プロジェクト

エンジンMod

上級者向けの特別なレベルです。ゲーム本体の一部を置き換えるModで、ほとんどのModには必要ありません。

これは必要ですか?

ほぼ間違いなく不要です。CraftingのAPIを使ってCraftScriptやKotlinで書いたModは、ブロック、アイテム、クリーチャー、ワールド、UI、イベントをカバーし、Minecraftが更新されても動き続けます。エンジンModは、より高速なチャンクレンダラーや新しいライティングエンジンのように、ゲーム本体の一部を置き換えるためだけのものです。通常のAPIで実現できるなら、そちらを使ってください。

できることと代償

Modのコードはゲーム自身のクラスを使い、Mixinでパッチを当てられます。代償として、Modは特定のMinecraftバージョン1つ専用で、そのバージョンでしか動かず、作者はゲームの新バージョンごとに更新する必要があります。使うものには互換性の保証が一切ありません。

宣言する

crafting.mod.json に engine セクションを追加し、Mixin設定を並べます。

crafting.mod.jsonJSON
{
  "id": "brandengine",
  "name": "Brand Engine",
  "version": "1.0.0",
  "game": "26.3",
  "entrypoints": ["com.example.engine.BrandEngine"],
  "engine": { "mixins": ["brandengine.mixins.json"] }
}

game は範囲ではなく、26.3 のような正確なバージョンにします。他のバージョンではModは読み込まれず、ゲームが理由を表示します。

排他的な部分

ゲームの一部には、置き換えられるのが1つだけのものがあります。Modは slots で確保します。

crafting.mod.jsonJSON
{ "engine": { "slots": ["chunk_renderer"] } }
スロット 置き換える部分
chunk_renderer チャンクレンダラー
lighting ライティングエンジン
shaders シェーダーパイプライン

各部分を置き換えられるModは1つだけです。2つが試みた場合、2つ目は読み込まれず、Mod画面にどのModが確保しているか表示されます。shaders を確保したModは、シェーダーパックを無効にします。

コードでは

エンジン機能は、うっかり使われないよう明示的なオプトインが必要です。

BrandEngine.ktKotlin
@OptIn(CraftingInternal::class)
class BrandEngine : CraftingMod {
    override fun onLoad(ctx: ModContext) {
        Crafting.events.on<ServerStartedEvent> { e ->
            val server = Engine.handle(e.server) as MinecraftServer
            ctx.logger.info("Server brand: ${server.serverModName}")
        }
    }
}

Engine.handle(view) は、Craftingのプレイヤー、ワールド、エンティティ、サーバーの裏にあるゲーム自身のオブジェクトを返します。

Mixin

MixinはJavaで書き、ゲームのクラスにパッチを当てます。

ServerBrandMixin.javaJava
@Mixin(MinecraftServer.class)
public abstract class ServerBrandMixin {
    @Inject(method = "getServerModName", at = @At("RETURN"), cancellable = true)
    private void brand(CallbackInfoReturnable<String> cir) {
        cir.setReturnValue(cir.getReturnValue() + "+brandengine");
    }
}

その設定 brandengine.mixins.json にMixinを並べます。

brandengine.mixins.jsonJSON
{ "required": true, "package": "com.example.engine.mixin", "compatibilityLevel": "JAVA_25",
  "mixins": ["ServerBrandMixin"], "injectors": { "defaultRequire": 1 } }

ビルド

ゲームのjarとMixinライブラリに対してコンパイルします。どちらもcompile-onlyです。JavaとKotlinのターゲットはバージョン25です。

プレイヤーに見えるもの

Mod画面ではエンジンModに「ゲームを直接使用、Minecraft 26.3専用:ゲームの更新で動かなくなる可能性があります」と表示され、それぞれが置き換える部分も示されます。