프로젝트
엔진 모드
고급이며 예외적인 단계입니다. 게임 자체의 일부를 대체하는 모드이며, 거의 모든 모드에는 필요하지 않습니다.
이게 필요한가요?
거의 확실히 아닙니다. Crafting API 위에서 CraftScript나 Kotlin으로 작성한 모드는 블록, 아이템, 생물, 월드, 인터페이스, 이벤트를 모두 다루며 Minecraft가 업데이트되어도 계속 동작합니다. 엔진 모드는 더 빠른 청크 렌더러나 새로운 조명 엔진처럼 게임 자체의 일부를 대체할 때만 씁니다. 아이디어가 일반 API로 가능하다면 그것을 사용하세요.
무엇을 주고 무엇이 드는가
모드의 코드는 게임 자체의 클래스를 사용하고 믹스인으로 패치할 수 있습니다. 대가는 이렇습니다. 정확히 한 가지 Minecraft 버전용으로 만들어지고 그 버전에서만 실행되며, 제작자가 게임 버전마다 업데이트해야 합니다. 사용하는 어떤 것에도 호환성 보장이 없습니다.
선언하기
crafting.mod.json에 믹스인 설정을 나열한 engine 섹션을 추가합니다.
{
"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처럼 정확한 버전이어야 합니다. 다른 버전에서는 모드가 로드되지 않으며 게임이 이유를 알려 줍니다.
독점 부분
게임의 일부는 대체물을 하나만 가질 수 있습니다. 모드는 slots로 이를 차지합니다.
{ "engine": { "slots": ["chunk_renderer"] } }| 슬롯 | 대체하는 부분 |
|---|---|
chunk_renderer |
청크 렌더러 |
lighting |
조명 엔진 |
shaders |
셰이더 파이프라인 |
각 부분은 모드 하나만 대체할 수 있습니다. 두 모드가 시도하면 두 번째는 로드되지 않고 모드 화면에 어떤 모드가 차지했는지 표시됩니다. shaders를 차지한 모드는 셰이더 팩을 끕니다.
코드에서
엔진 기능은 실수로 쓰이지 않도록 명시적인 옵트인이 필요합니다.
@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의 플레이어, 월드, 엔티티, 서버 뒤에 있는 게임 자체의 객체를 줍니다.
믹스인
믹스인은 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에 믹스인을 나열합니다.
{ "required": true, "package": "com.example.engine.mixin", "compatibilityLevel": "JAVA_25",
"mixins": ["ServerBrandMixin"], "injectors": { "defaultRequire": 1 } }빌드
게임 jar와 Mixin 라이브러리에 대해 컴파일합니다. 둘 다 compile-only입니다. Java와 Kotlin의 대상은 버전 25입니다.
플레이어에게 보이는 것
모드 화면은 엔진 모드를 "게임을 직접 사용, Minecraft 26.3 전용: 게임 업데이트로 고장날 수 있음"이라고 표시하고, 각각이 어떤 부분을 대체하는지 보여 줍니다.