Slide 1

Slide 1 text

Minecraft JavaのMODを Swiftで作る @1mash0̲ iOSDC Japan 2026 1

Slide 2

Slide 2 text

自己紹介 いますえ / 今末翔太 @1mash0̲ • 某SES企業所属 • iOS / Flutterエンジニア • Minecraftを一番遊んでたのは Beta 1.8〜正式版1.8 2

Slide 3

Slide 3 text

宣伝 3

Slide 4

Slide 4 text

Saitama.swift #1 やります! • Saitama.swiftのcompass • 日時 • 場所 • 池袋、新宿などから何分とかの説明 4

Slide 5

Slide 5 text

本編 5

Slide 6

Slide 6 text

注意点 • 本発表および紹介するMODは、Minecraftの公式コンテンツではありませ ん。 Mojang および Microsoft から承認を受けておらず、関連性もありません。 https://www.minecraft.net/ja-jp/usage-guidelines https://www.minecraft.net/ja-jp/eula • 今回作成したMODは、配布を目的としていません。 • 本発表で紹介する実装方法は、標準的なMOD開発方法ではありません。 6

Slide 7

Slide 7 text

きっかけ 7

Slide 8

Slide 8 text

WWDC25: Explore Swift and Java interoperability WWDC26: What's new in Swift 8

Slide 9

Slide 9 text

swift-javaを使えばSwiftで MinecraftのMOD(の大部分)を作れるのでは WWDC25: Explore Swift and Java interoperability WWDC26: What's new in Swift 9

Slide 10

Slide 10 text

本題 10

Slide 11

Slide 11 text

実際に作ってみた 環境 • 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

Slide 12

Slide 12 text

実際に作ってみた 実装の構成 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 { @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() registryClass.addLast(hudId, element) 12

Slide 13

Slide 13 text

実際に作ってみた 13

Slide 14

Slide 14 text

実際に作ってみた 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

Slide 15

Slide 15 text

まとめ • MODの初期化、アイテム、HUDをSwiftで実装 • MOD固有の手書きJavaコードはゼロ • ほぼ全編でAIに相談(チャッピーいつもありがとう) 15

Slide 16

Slide 16 text

参考資料 • 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

Slide 17

Slide 17 text

進捗達成の動画 17