Minecraft Modding (1.12.2) #1 - IBakedModel
はじめに
IBakedModelとかTileEntitySpecialRendererなどに関する解説記事があんまりないなーと思ったので、書いてみる。 アイテム/ブロックの追加などの基本的な部分については扱わない。素晴らしい記事がインターネット上にたくさんあるので、そちらを参照して欲しい。 環境構築は少しだけ扱う。
なお、サンプルコードは人口が多いであろうJavaで書くが、個人的には、スマートキャストやエルビス演算子などの便利な機能があるKotlinをお勧めする。
環境構築Tips
今から1.12.2でModdingをする場合、CleanroomMCのTemplateDevEnvを使うと簡単に環境を構築できる。 ちなみにKotlin用もある。 GregTechCEu/Buildscriptsも参考になると思う。
IBakedModelとはなに?
TESRと同じようにDynamicなRenderingを行うものである。 TESRが"active"にTileEntityを描画するのに対し、IBakedModelは"passive"である。 つまり、TESRのrenderメソッドは常に呼ばれ続けるが、IBakedModelのgetQuadsメソッドは、周りのブロックが変更された時などにのみ呼ばれる。
それと、クラス間の依存関係が多めで把握しづらい。せっかくなので以下にまとめてみた。
作ってみる
java
public class ExampleModel implements IModel {
@Override
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
return new ExampleBakedModel(ModelLoaderRegistry.getMissingModel().bake(state, format, bakedTextureGetter));
}
}java
public void preInit(FMLPreInitializationEvent e) {
ModelLoaderRegistry.registerLoader(new ExampleModelLoader());
}