我刚开始修改“我的世界”,我想知道如何改变暴民的产卵率。比方说,我们想要孕育出很多Endermen。
到目前为止,我已经找到了在net.minecraft.world.biome DefaultBiomeFeatures.java中设置产卵频率的代码
public static void withHostileMobs(MobSpawnInfo.Builder builder) {
...
builder.withSpawner(EntityClassification.MONSTER, new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 10, 1, 4));
...
}这意味着Endermen在大多数生物群落中产卵,尽管很少(10是重量,爬虫和蜘蛛有100)。
我知道这个DefaultBiome随后被BiomeMaker.java用于makeGiantTaigaBiome,makeBirchForestBiome等。我的结论是,我需要改变生物群落来改变产卵率。
我可以使用BiomeRegistry或ForgeRegistries.BIOMES访问生物群落。我在这里看到两种方法:
register方法是private,所以我不能添加新的生物群落来取代现有的生物。我还读过这里,显然不可能删除它们。biome.withMobSpawnSettings(MobSpawnInfo mobSpawnSettings)来修改生物群落.但是MobSpawnInfo类再次没有任何公共设置器,因此我不知道如何在不手动重新创建整个MobSpawnInfo对象的情况下获得修改的MobSpawnInfo。大多数在线解决方案(1、2)似乎表明,下面这些解决方案在目前的1.16.4中已不再有效:
ModLoader.addSpawn(YOURENTITY.class, 25, 1, 3);EntityRegistry.addSpawn(...)任何帮助都将不胜感激。
发布于 2020-12-12 18:50:33
不要试图使用Mixins来修改现有的“我的世界”软件包--这被称为coremodding,并因各种原因而皱眉。1.16的正确方法是订阅一个BiomeLoadingEvent,然后在加载所有生物群落之后进行猴子补丁:
1.16
@Mod("example")
public class ExampleMod
{
public ExampleMod() {
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent(priority = EventPriority.HIGH)
public void onBiomeLoadingEvent(BiomeLoadingEvent event) {
List<MobSpawnInfo.Spawners> spawns =
event.getSpawns().getSpawner(EntityClassification.MONSTER);
// Remove existing Enderman spawn information
spawns.removeIf(e -> e.type == EntityType.ENDERMAN);
// Make Enderman spawns more frequent and add Blaze spawns in all biomes
spawns.add(new MobSpawnInfo.Spawners(EntityType.BLAZE, 200, 1, 4));
spawns.add(new MobSpawnInfo.Spawners(EntityType.ENDERMAN, 200, 1, 4));
}
}1.15 (也可能在1.14,1.13,1.12,.)中工作
@Mod("example")
public class ExampleMod
{
public ExampleMod() {
ForgeRegistries.BIOMES.forEach(biome -> {
List<Biome.SpawnListEntry> spawns = biome.getSpawns(EntityClassification.MONSTER);
spawns.removeIf(e -> e.entityType == EntityType.ENDERMAN);
spawns.add(new Biome.SpawnListEntry(EntityType.BLAZE, 200, 1, 4));
spawns.add(new Biome.SpawnListEntry(EntityType.ENDERMAN, 200, 1, 4));
});
}
}编辑:注意,InControl可以用来达到类似的效果,不需要编码。
https://stackoverflow.com/questions/65262017
复制相似问题