Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Minecraft JavaのMODをSwiftで作る

Avatar for 1mash0 1mash0
September 13, 2026

Minecraft JavaのMODをSwiftで作る

iOSDC Japan 2026

Avatar for 1mash0

1mash0

September 13, 2026

More Decks by 1mash0

Other Decks in Technology

Transcript

  1. 自己紹介 いますえ / 今末翔太 @1mash0̲ • 某SES企業所属 • iOS /

    Flutterエンジニア • Minecraftを一番遊んでたのは Beta 1.8〜正式版1.8 2
  2. 実際に作ってみた 環境 • Swift 6.3 • JDK 25 • Minecraft

    Java Edition 26.1.2 • Fabric Loader 0.19.3 / Fabric API 0.155.2 • swift-java • Java → Swift:jextract • Swift → Java:wrap-java/SwiftJavaマクロ 11
  3. 実際に作ってみた 実装の構成 JavaからSwift SwiftからJava fabric.mod.json FabricHudWrappers.swift “entrypoints”: { “main”: [

    "com.example.swift. SwiftJavaModFabric::initializeMod” ], … } @JavaInterface(“net.fabricmc.fabric.api.client.rendering.v1.hu d.HudElementRegistry”) struct FabricHudElementRegistry {} ↓ jextract生成コードを経由 extension JavaClass<FabricHudElementRegistry> { @JavaStaticMethod func addLast( _ id: Identifier?, _ element: FabricHudElement? ) } ↓ SwiftJavaModFabric.swift public func initializeMod() { ModItem.initialize() registerItemUseCallback() registerCreativeTabCallback() } SwiftJavaマクロでJava APIを宣言 SwiftJavaModFabric.swift let registryClass = try! JavaClass<FabricHudElementRegistry>() registryClass.addLast(hudId, element) 12
  4. 実際に作ってみた ClockHud.swift import Foundation let time = Date.now.formatted( Date.FormatStyle() .hour(.defaultDigits(amPM:

    .omitted)) .minute(.twoDigits) .second(.twoDigits) ) let padding: Int32 = 8 let x = graphics.guiWidth() - font.width(time) padding let y: Int32 = 8 graphics.text( font, time, x, y, -1, true ) 14
  5. 参考資料 • https://github.com/swiftlang/swift-java • https://developer.apple.com/videos/play/wwdc2025/307/ • https://developer.apple.com/videos/play/wwdc2026/262/ • https://docs.fabricmc.net/ •

    https://github.com/FabricMC/fabric-loader/blob/0.19.3/src/main/java/net/fabricmc/loader/ impl/util/DefaultLanguageAdapter.java • https://github.com/FabricMC/fabric-example-mod • https://www.minecraft.net/ja-jp/usage-guidelines • https://www.minecraft.net/ja-jp/eula 16