プロジェクト
エンジンMod
上級者向けの特別なレベルです。ゲーム本体の一部を置き換えるModで、ほとんどのModには必要ありません。
これは必要ですか?
ほぼ間違いなく不要です。CraftingのAPIを使ってCraftScriptやKotlinで書いたModは、ブロック、アイテム、クリーチャー、ワールド、UI、イベントをカバーし、Minecraftが更新されても動き続けます。エンジンModは、より高速なチャンクレンダラーや新しいライティングエンジンのように、ゲーム本体の一部を置き換えるためだけのものです。通常のAPIで実現できるなら、そちらを使ってください。
できることと代償
Modのコードはゲーム自身のクラスを使い、Mixinでパッチを当てられます。代償として、Modは特定のMinecraftバージョン1つ専用で、そのバージョンでしか動かず、作者はゲームの新バージョンごとに更新する必要があります。使うものには互換性の保証が一切ありません。
宣言する
crafting.mod.json に engine セクションを追加し、Mixin設定を並べます。
{
"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 で確保します。
{ "engine": { "slots": ["chunk_renderer"] } }| スロット | 置き換える部分 |
|---|---|
chunk_renderer |
チャンクレンダラー |
lighting |
ライティングエンジン |
shaders |
シェーダーパイプライン |
各部分を置き換えられるModは1つだけです。2つが試みた場合、2つ目は読み込まれず、Mod画面にどのModが確保しているか表示されます。shaders を確保したModは、シェーダーパックを無効にします。
コードでは
エンジン機能は、うっかり使われないよう明示的なオプトインが必要です。
@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で書き、ゲームのクラスにパッチを当てます。
@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を並べます。
{ "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専用:ゲームの更新で動かなくなる可能性があります」と表示され、それぞれが置き換える部分も示されます。