Java 在一个锻造雷霆模型中修改怪物繁殖率(1.16)
我刚开始改装雷舰,我想知道如何改变怪物的繁殖率。比如说,我们想要大量的恩德曼 到目前为止,我在net.minecraft.world.biome DefaultBiomeFeatures.java中找到了设置产卵频率的代码: 这意味着,尽管爬行动物和蜘蛛的体重很少达到10,但大多数生物群落中都会产卵 我知道BiomeMaker.java使用这个默认生物群落来制作GiantTaigabiome、makeBirchForestBiome等。我的结论是我需要改变生物群落来改变产卵率 我可以使用BiomeRegistry或ForgeRegistries.biomes访问biomes。我在这里看到两种方法: 完全替换生物群落图。遗憾的是,它的注册方法是私有的,所以我不能添加新的生物群落来取代现有的生物群落。我还读到,移除它们显然是不可能的。 修改现有的生物群落地图。这将使用biome.withMobSpawnSettingsMobSpawnInfo MobSpawnSetting修改原地生物群落。但是mobsawninfo类再次没有任何公共setter,因此我不知道如何在不手动重新创建整个mobsawninfo对象的情况下获得修改后的mobsawninfo。 大多数在线解决方案似乎建议以下内容,但遗憾的是,这些内容在当前的1.16.4中不再适用:Java 在一个锻造雷霆模型中修改怪物繁殖率(1.16),java,minecraft,minecraft-forge,Java,Minecraft,Minecraft Forge,我刚开始改装雷舰,我想知道如何改变怪物的繁殖率。比如说,我们想要大量的恩德曼 到目前为止,我在net.minecraft.world.biome DefaultBiomeFeatures.java中找到了设置产卵频率的代码: 这意味着,尽管爬行动物和蜘蛛的体重很少达到10,但大多数生物群落中都会产卵 我知道BiomeMaker.java使用这个默认生物群落来制作GiantTaigabiome、makeBirchForestBiome等。我的结论是我需要改变生物群落来改变产卵率 我可以使用Biom
ModLoader.addSpawn(YOURENTITY.class, 25, 1, 3);
任何帮助都将不胜感激。不要试图使用mixin修改现有的Minecraft软件包-这被称为CoreModing,出于各种原因不赞成。1.16的正确方法是订阅BiomeLoadingEvent,然后在加载所有BioMe后对其进行修补: 1.16 @模式示例 公共类示例mod { 公共示例mod{ MinecraftForge.EVENT_BUS.register此; } @subscribeentpriority=EventPriority.HIGH BIOMELOADINGEVENTBIOMELOADINGEVENT事件公开无效{ 列表生成= event.getSpawns.getSpawnerEntityClassification.MONSTER; //删除现有的Enderman生成信息 spawns.removiefe->e.type==EntityType.ENDERMAN; //使Enderman产卵更频繁,并在所有生物群落中添加火焰产卵 spawns.addnew mobsawninfo.spawnerEntityType.BLAZE,200,1,4; spawns.addnew MobSpawnInfo.SpawnersEntityType.ENDERMAN,200,1,4; } } 1.15可能也适用于1.14、1.13、1.12 @模式示例 公共类示例mod { 公共示例mod{ ForgeRegistries.BIOMES.forEachbiome->{ List spawns=biome.getSpawnsEntityClassification.MONSTER; spawns.removiefe->e.entityType==entityType.ENDERMAN; spawns.addnew Biome.SpawnListentyEntryEntityType.BLAZE,200,1,4; spawns.addnew Biome.SpawnListEntryEntityType.ENDERMAN,200,1,4; }; } }
编辑:请注意,可以使用来实现类似的效果,无需编码。不要尝试使用mixin修改现有的Minecraft软件包-这被称为CoreModing,出于各种原因而不赞成。1.16的正确方法是订阅BiomeLoadingEvent,然后在加载所有BioMe后对其进行修补: 1.16 @模式示例 公共类示例mod { 公共示例mod{ MinecraftForge.EVENT_BUS.register此; } @subscribeentpriority=EventPriority.HIGH BIOMELOADINGEVENTBIOMELOADINGEVENT事件公开无效{ 列表生成= event.getSpawns.getSpawnerEntityClassification.MONSTER; //删除现有的Enderman生成信息 spawns.removiefe->e.type==EntityType.ENDERMAN; //使Enderman产卵更频繁,并在所有生物群落中添加火焰产卵 spawns.addnew mobsawninfo.spawnerEntityType.BLAZE,200,1,4; spawns.addnew MobSpawnInfo.SpawnersEntityType.ENDERMAN,200,1,4; } } 1.15可能也适用于1.14、1.13、1.12 @模式示例 公共类示例mod { 公共示例mod{ ForgeRegistries.BIOMES.forEachbiome->{ List spawns=biome.getSpawnsEntityClassification.MONSTER; spawns.removiefe->e.entityType==entityType.ENDERMAN; spawns.addnew Biome.SpawnListentyEntryEntityType.BLAZE,200,1,4; spawns.addnew Biome.SpawnListEntryEntityType.ENDERMAN,200,1,4; }; } } 编辑:请注意,可以使用来实现类似的效果,无需编码。它需要是public static void on biomeloadingEvent在您的示例中缺少static,否则它将无法执行。我希望它能帮助那些不明白为什么它不会产生自定义怪物但代码不会抛出错误的人。它需要是公共静态void on biomeloadingEvent在您的示例中缺少静态,否则它根本不会执行。我希望它能帮助那些不明白为什么它不会产生自定义暴徒,但代码不会抛出错误的人。
ModLoader.addSpawn(YOURENTITY.class, 25, 1, 3);
EntityRegistry.addSpawn(...)