我正在尝试为Minecraft制作一个小模块。
这涉及创建自定义WorldType。
到目前为止,我的代码看起来像这样:
@Mod(modid = HungryPillarsMod.MODID, version = HungryPillarsMod.VERSION)
public class HungryPillarsMod {
public static final String MODID = "hungry-pillars";
public static final String VERSION = "0.1";
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
WorldType HUNGRYPILLARS = new HungryPillarsWorld();
}
}
和HungryPillarWorld.class
public class HungryPillarsWorld extends WorldType {
public HungryPillarsWorld(){
super("HUNGRYPILLARS");
}
@Override
public IChunkProvider getChunkGenerator(World world, String generatorOptions) {
System.out.println("Custom getChunkGenerator is running.");
return new HungryPillarsChunkProvider(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled());
}
}
在HungryPillarsChunkProvider.class中
public class HungryPillarsChunkProvider extends ChunkProviderGenerate {
public World hungryWorldObj;
public HungryPillarsChunkProvider(World world, long seed, boolean mapfeatures) {
super(world,seed,mapfeatures);
System.out.println("custom HungryPillarsChunkProvider is running and the super has been called.");
this.hungryWorldObj = world;
System.out.println(this.loadChunk(3,4));
}
@Override
public Chunk loadChunk(int xPos, int yPos) {
System.out.println("something from custom loadChunk");
// my custom code would go here.
}
}
在编译或运行时没有错误,但我的方法HungryPillarsChunkProvider.loadChunk
方法没有被游戏调用。它仍然使用ChunkProviderGenerate
中的原始内容。
我可以在这里发布原始的Minecraft代码,但它非常大。
我已经检查过它不是私人的还是最终的。
我的方法在ChunkProviderGenerate
:
public Chunk loadChunk(int p_73158_1_, int p_73158_2_) {
return this.provideChunk(p_73158_1_, p_73158_2_);
}
如果有任何不同, ChunkProviderGenerate
会实现接口IChunkProvider
。我试过让我自己的班级做到这一点,但它没有效果。
在控制台中我得到了这个输出:
[22:19:52] [Server thread/INFO] [STDOUT]: [com.impellar.hungrypillars.HungryPillarsWorld:getChunkGenerator:14]: Custom getChunkGenerator is running.
[22:19:52] [Server thread/INFO] [STDOUT]: [com.impellar.hungrypillars.HungryPillarsChunkProvider:<init>:19]: custom HungryPillarsChunkProvider is running and the super has been called.
但是最后一条消息(&#34;来自自定义loadChunk&#34;的东西)从未显示过,我放在那里的任何其他代码似乎从未运行过,所以我在这里缺少什么?
为什么游戏不能使用我的新方法,因为它很乐意跳过我所有的课程来获得世界类型?
答案 0 :(得分:0)
loadChunk()
可能无法被调用。如果loadChunk()
只调用provideChunk()
,则loadChunk()可能是遗留功能,不再使用。