zh_cn:tutorial:biomes_old
Table of Contents
添加生物群系(1.16.3)
本教程仅适用于旧版本!对于 1.18 以上的版本,生物群系是完全使用 JSON 完成的,更多信息请参见 Minecraft Wiki 页面。
添加生物群系有以下三个步骤:
- 创建生物群系
- 注册生物群系
- 将生物群系添加到世界的气候区域
本教程中,我们添加一个叫做黑曜石之地的生物群系,该生物群系表面覆盖着黑曜石。
注意本教程依赖标记为实验性的 Fabric API 中的生物群系 API。如果此 API 不起作用,考虑 mixin 版本。
创建生物群系
如需创建生物群系,使用 Biome.Builder
并配置属性。缺失一个属性可能会导致游戏崩溃。建议看一看原版生物群系(在 DefaultBiomeCreator
)中的例子。
public class ExampleMod implements ModInitializer { // SurfaceBuilder 定义了生物群系表面应该看起来怎样。 // 我们使用自定义的表面构造器以使得生物群系表满铺满黑曜石。 private static final ConfiguredSurfaceBuilder<TernarySurfaceConfig> OBSIDIAN_SURFACE_BUILDER = SurfaceBuilder.DEFAULT .withConfig(new TernarySurfaceConfig( Blocks.OBSIDIAN.getDefaultState(), Blocks.DIRT.getDefaultState(), Blocks.GRAVEL.getDefaultState())); private static final Biome OBSILAND = createObsiland(); private static Biome createObsiland() { // 指定哪些实体可以生成,以及生物群系生成哪些地物。 // 除了某些结构、树木、岩石、植物、自定义实体之外,这些每个生物群系都是几乎一样的。 // 原版配置的生物群系地物是在 DefaultBiomeFeatures 中定义的。 SpawnSettings.Builder spawnSettings = new SpawnSettings.Builder(); DefaultBiomeFeatures.addFarmAnimals(spawnSettings); DefaultBiomeFeatures.addMonsters(spawnSettings, 95, 5, 100); GenerationSettings.Builder generationSettings = new GenerationSettings.Builder(); generationSettings.surfaceBuilder(OBSIDIAN_SURFACE_BUILDER); DefaultBiomeFeatures.addDefaultUndergroundStructures(generationSettings); DefaultBiomeFeatures.addLandCarvers(generationSettings); DefaultBiomeFeatures.addDefaultLakes(generationSettings); DefaultBiomeFeatures.addDungeons(generationSettings); DefaultBiomeFeatures.addMineables(generationSettings); DefaultBiomeFeatures.addDefaultOres(generationSettings); DefaultBiomeFeatures.addDefaultDisks(generationSettings); DefaultBiomeFeatures.addSprings(generationSettings); DefaultBiomeFeatures.addFrozenTopLayer(generationSettings); return (new Biome.Builder()) .precipitation(Biome.Precipitation.RAIN) .category(Biome.Category.NONE) .depth(0.125F) .scale(0.05F) .temperature(0.8F) .downfall(0.4F) .effects((new BiomeEffects.Builder()) .waterColor(0x3f76e4) .waterFogColor(0x050533) .fogColor(0xc0d8ff) .skyColor(0x77adff) .build()) .spawnSettings(spawnSettings.build()) .generationSettings(generationSettings.build()) .build(); } }
注册生物群系
我们在入口点 onInitialize
中注册生物群系。如果你是用自己的表面构造器,你也需要将其注册。
public class ExampleMod implements ModInitializer { public static final RegistryKey<Biome> OBSILAND_KEY = RegistryKey.of(Registry.BIOME_KEY, new Identifier("tutorial", "obsiland")); @Override public void onInitialize() { Registry.register(BuiltinRegistries.CONFIGURED_SURFACE_BUILDER, new Identifier("tutorial", "obsidian"), OBSIDIAN_SURFACE_BUILDER); Registry.register(BuiltinRegistries.BIOME, OBSILAND_KEY.getValue(), OBSILAND); } }
此外,你还需要在 en_us.json
和 zh_cn.json
文件中,给你的生物群系一个语言项:
- src/main/resources/assets/modid/lang/en_us.json
{ "biome.tutorial.obsiland": "Obsiland" }
- src/main/resources/assets/modid/lang/zh_cn.json
{ "biome.tutorial.obsiland": "黑曜石之地" }
添加生物群系到世界的气候区域
我们需要指定气候(生物群系添加到此气候中),此外还需要指定我们添加的生物群系,以及生物群系的权重(双精度值)。权重用来衡量生物群系生成的概率。更高的权重对应生物群系生成更高几率,相对于其他生物群系。测试过程中,可以给生物群系更高的权重,从而更容易找到它。此教程中,作为例子,我们将这个自定义的生物群系添加到 TEMPERATE 和 COOL 气候中。
public class ExampleMod implements ModInitializer { @Override public void onInitialize() { [...] OverworldBiomes.addContinentalBiome(OBSILAND_KEY, OverworldClimate.TEMPERATE, 2D); OverworldBiomes.addContinentalBiome(OBSILAND_KEY, OverworldClimate.COOL, 2D); } }
结果
zh_cn/tutorial/biomes_old.txt · Last modified: 2024/08/25 13:30 by solidblock