首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Forge Min克拉夫特模式中修改暴民产卵率(1.16)

在Forge Min克拉夫特模式中修改暴民产卵率(1.16)
EN

Stack Overflow用户
提问于 2020-12-12 05:45:19
回答 1查看 13.1K关注 0票数 1

我刚开始修改“我的世界”,我想知道如何改变暴民的产卵率。比方说,我们想要孕育出很多Endermen。

到目前为止,我已经找到了在net.minecraft.world.biome DefaultBiomeFeatures.java中设置产卵频率的代码

代码语言:javascript
复制
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用于makeGiantTaigaBiomemakeBirchForestBiome等。我的结论是,我需要改变生物群落来改变产卵率。

我可以使用BiomeRegistryForgeRegistries.BIOMES访问生物群落。我在这里看到两种方法:

  1. 完全取代了生物群落的地图。很遗憾,它的register方法是private,所以我不能添加新的生物群落来取代现有的生物。我还读过这里,显然不可能删除它们。
  2. 修改了现有的生物群落图.,这将使用biome.withMobSpawnSettings(MobSpawnInfo mobSpawnSettings)来修改生物群落.但是MobSpawnInfo类再次没有任何公共设置器,因此我不知道如何在不手动重新创建整个MobSpawnInfo对象的情况下获得修改的MobSpawnInfo

大多数在线解决方案(12)似乎表明,下面这些解决方案在目前的1.16.4中已不再有效:

代码语言:javascript
复制
ModLoader.addSpawn(YOURENTITY.class, 25, 1, 3);
代码语言:javascript
复制
EntityRegistry.addSpawn(...)

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-12 18:50:33

不要试图使用Mixins来修改现有的“我的世界”软件包--这被称为coremodding,并因各种原因而皱眉。1.16的正确方法是订阅一个BiomeLoadingEvent,然后在加载所有生物群落之后进行猴子补丁:

1.16

代码语言:javascript
复制
@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,.)中工作

代码语言:javascript
复制
@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可以用来达到类似的效果,不需要编码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65262017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档