Uploaded:2023/01/01 Latest-Update:2023/01/01

MOD作成 - バイオームを追加する

目次は右上の「≡」から!

ModIdやメインクラスのjavaファイル名などの各自で異なる部分はいちいち説明しないのでご注意を。
メインのクラスは「com.masec.newmod」の「NewMod」とし、ModIDは「new_mod」とします。

サーフェイスビルダーのクラス

新しいパッケージ「com.masec.newmod.world.biome」を作成し、中に「ModConfiguredSurfaceBuilders」クラスを新しく作ります。

● クラスのコード

作られたファイルを編集して、こうなります。

package com.masec.newmod.world.biome;

import net.minecraft.block.Blocks;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.WorldGenRegistries;
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
import net.minecraft.world.gen.surfacebuilders.ISurfaceBuilderConfig;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder;
import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig;
import com.masec.newmod.NewMod;

public class ModConfiguredSurfaceBuilders {
    public static ConfiguredSurfaceBuilder<?> TEST_SURFACE = register("test_surface",
            SurfaceBuilder.DEFAULT.configured(new SurfaceBuilderConfig(
                    Blocks.DIAMOND_ORE.defaultBlockState(),
                    Blocks.GLASS.defaultBlockState(),
                    Blocks.BEDROCK.defaultBlockState()
            )));

    private static <SC extends ISurfaceBuilderConfig>ConfiguredSurfaceBuilder register(String name,
                                                                                           ConfiguredSurfaceBuilder csb) {
        return WorldGenRegistries.register(WorldGenRegistries.CONFIGURED_SURFACE_BUILDER,
                new ResourceLocation(NewMod.MOD_ID, name), csb);
    }
}

書き換える場所をマーカーで示しました。

各自で違うところをマーカーしたやつ
package com.masec.newmod.world.biome; import net.minecraft.block.Blocks; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.WorldGenRegistries; import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder; import net.minecraft.world.gen.surfacebuilders.ISurfaceBuilderConfig; import net.minecraft.world.gen.surfacebuilders.SurfaceBuilder; import net.minecraft.world.gen.surfacebuilders.SurfaceBuilderConfig; import com.masec.newmod.NewMod; public class ModConfiguredSurfaceBuilders { public static ConfiguredSurfaceBuilder<?> TEST_SURFACE = register("test_surface", SurfaceBuilder.DEFAULT.configured(new SurfaceBuilderConfig( Blocks.DIAMOND_ORE.defaultBlockState(), Blocks.GLASS.defaultBlockState(), Blocks.BEDROCK.defaultBlockState() ))); private static <SC extends ISurfaceBuilderConfig>ConfiguredSurfaceBuilder register(String name, ConfiguredSurfaceBuilder csb) { return WorldGenRegistries.register(WorldGenRegistries.CONFIGURED_SURFACE_BUILDER, new ResourceLocation(NewMod.MOD_ID, name), csb); } }

桃色でマーカーしたところは定義なので、空気を読んで大文字とかを真似して自由に決めてください。
橙色でマーカーしたところはたぶん、表面の起伏を指定するものだと思います。表から選んでください。
青色でマーカーしたところは平原でいうところの上から草ブロック、土ブロック、海岸などの砂ブロックとなる部分のブロックを指定します。

変数概要
DEFAULTデフォルト
MOUNTAIN
SHATTERED_SAVANNAこまごまとしたサバンナ
GRAVELLY_MOUNTAIN砂利の山岳
GIANT_TREE_TAIGA大きな木のタイガ
SWAMP湿地
BADLANDSメサ
WOODED_BADLANDSメサの森
ERODED_BADLANDS侵食されたメサ
FROZEN_OCEAN凍った海
NETHERネザー
NETHER_FORESTネザーの森
SOUL_SAND_VALLEYソウルサンドの谷
BASALT_DELTAS玄武岩デルタ
NOPEなし
バイオーム本体のクラス

パッケージ「com.masec.newmod.world.biome」の中に「TestBiome」クラスを新しく作ります。名前は各自で決めます。

● クラスのコード

作られたファイルを編集して、こうなります。

package com.masec.newmod.world.biome;

import net.minecraft.client.audio.BackgroundMusicTracks;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.particles.ParticleTypes;
import net.minecraft.util.SoundEvents;
import net.minecraft.world.biome.*;
import net.minecraft.world.gen.GenerationStage;
import net.minecraft.world.gen.feature.Features;
import net.minecraft.world.gen.feature.structure.StructureFeatures;
import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import com.masec.newmod.NewMod;

import java.util.function.Supplier;

public class TestBiome {
  public static final DeferredRegister<Biome> BIOMES = DeferredRegister.create(ForgeRegistries.BIOMES,
      NewMod.MOD_ID);

  public static final RegistryObject<Biome> TEST_BIOME = BIOMES.register("test_biome",
      () -> makeTestBiome(() -> ModConfiguredSurfaceBuilders.TEST_SURFACE, 0.125f, 0.05f));

  private static Biome makeTestBiome(final Supplier<ConfiguredSurfaceBuilder<?>> surfaceBuilder, float depth,
      float scale) {
    MobSpawnInfo.Builder mobspawninfo$builder = new MobSpawnInfo.Builder();
    DefaultBiomeFeatures.farmAnimals(mobspawninfo$builder);
    DefaultBiomeFeatures.ambientSpawns(mobspawninfo$builder);
    mobspawninfo$builder.addSpawn(EntityClassification.MONSTER,
        new MobSpawnInfo.Spawners(EntityType.BLAZE, 100, 7, 10));
    mobspawninfo$builder.addSpawn(EntityClassification.MONSTER,
        new MobSpawnInfo.Spawners(EntityType.ZOMBIFIED_PIGLIN, 50, 4, 4));
    
    BiomeGenerationSettings.Builder biomegenerationsettings$builder = (new BiomeGenerationSettings.Builder())
        .surfaceBuilder(surfaceBuilder);
    DefaultBiomeFeatures.addDefaultCarvers(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addDefaultLakes(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addDefaultMonsterRoom(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addDefaultUndergroundVariety(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addDefaultOres(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addDefaultSprings(biomegenerationsettings$builder);
    DefaultBiomeFeatures.addSurfaceFreezing(biomegenerationsettings$builder);
    biomegenerationsettings$builder.addStructureStart(StructureFeatures.MINESHAFT);
    biomegenerationsettings$builder.addStructureStart(StructureFeatures.RUINED_PORTAL_SWAMP);
    biomegenerationsettings$builder.addStructureStart(StructureFeatures.BURIED_TREASURE);
    biomegenerationsettings$builder.addFeature(GenerationStage.Decoration.LAKES, Features.LAKE_LAVA);

    return (new Biome.Builder())
        .precipitation(Biome.RainType.NONE)
        .biomeCategory(Biome.Category.DESERT)
        .depth(depth)
        .scale(scale)
        .temperature(1.5F)
        .downfall(0.9F)
        .specialEffects((new BiomeAmbience.Builder())
            .waterColor(34952)
            .waterFogColor(34952)
            .fogColor(3355460)
            .foliageColorOverride(34952)
            .grassColorOverride(34952)
            .ambientParticle(new ParticleEffectAmbience(ParticleTypes.WARPED_SPORE, 0.03f))
            .skyColor(3355460)
            .ambientLoopSound(SoundEvents.AMBIENT_CRIMSON_FOREST_LOOP)
            .ambientMoodSound(new MoodSoundAmbience(SoundEvents.AMBIENT_WARPED_FOREST_MOOD, 6000, 8, 2.0D))
            .ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents.AMBIENT_NETHER_WASTES_ADDITIONS, 0.0111D))
            .backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents.MUSIC_BIOME_CRIMSON_FOREST))
            .build())
        .mobSpawnSettings(mobspawninfo$builder.build())
        .generationSettings(biomegenerationsettings$builder.build())
        .build();
  }

  public static void register(IEventBus eventBus) {
    BIOMES.register(eventBus);
  }
}

バイオームの性質を指定するところ以外で書き換える場所をマーカーで示しました。

各自で違うところをマーカーしたやつ
package com.masec.newmod.world.biome; import net.minecraft.client.audio.BackgroundMusicTracks; import net.minecraft.entity.EntityClassification; import net.minecraft.entity.EntityType; import net.minecraft.particles.ParticleTypes; import net.minecraft.util.SoundEvents; import net.minecraft.world.biome.*; import net.minecraft.world.gen.GenerationStage; import net.minecraft.world.gen.feature.Features; import net.minecraft.world.gen.feature.structure.StructureFeatures; import net.minecraft.world.gen.surfacebuilders.ConfiguredSurfaceBuilder; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import com.masec.newmod.NewMod; import java.util.function.Supplier; public class TestBiome { public static final DeferredRegister<Biome> BIOMES = DeferredRegister.create(ForgeRegistries.BIOMES, NewMod.MOD_ID); public static final RegistryObject<Biome> TEST_BIOME = BIOMES.register("test_biome", () -> makeTestBiome(() -> ModConfiguredSurfaceBuilders.TEST_SURFACE, 0.125f, 0.05f)); private static Biome makeTestBiome(final Supplier<ConfiguredSurfaceBuilder<?>> surfaceBuilder, float depth, float scale) { // 略 } public static void register(IEventBus eventBus) { BIOMES.register(eventBus); } }

桃色でマーカーしたところはさきほど作ったサーフェイスビルダーです。

バイオームの性質の指定について説明します。

● 地形

26行目右側にある小数二つは、depth、scaleといって地形をつかさどる数値です。

● フィーチャーの指定

その下のmakeTestBiome関数の中にある「DefaultBiomeFeatures.〇〇(□□$builder);」はフィーチャーを指定しています。 以下では「DefaultBiomeFeatures」を「DBF」と略します。

・DBF.farmAnimals(mobspawninfo$builder);

動物がスポーンするようにします。

・DBF.commonSpawns(mobspawninfo$builder);

地下にコウモリとモンスターがスポーンするようにします。

・DBF.addDefaultCarvers(biomegenerationsettings$builder);

洞窟と渓谷を生成します。

・DBF.addDefaultLakes(biomegenerationsettings$builder);

マグマと水の池を生成します。

・DBF.addDefaultMonsterRoom(biomegenerationsettings$builder);

スポナー部屋を生成します。

・DBF.addDefaultUndergroundVariety(biomegenerationsettings$builder);

土や砂利、花崗岩などが地下に生成されるようにします。

・DBF.addDefaultOres(biomegenerationsettings$builder);

バニラの鉱石を通常の分布で生成します。

・DBF.addDefaultSprings(biomegenerationsettings$builder);

マグマと水の池を生成します。

・DBF.addSurfaceFreezing(biomegenerationsettings$builder);

● 表面にスポーンするモブの指定

mobspawninfo$builder.addSpawn(EntityClassification.MONSTER,
  new MobSpawnInfo.Spawners(EntityType.BLAZE, 100, 7, 10));

エンティティ、他のモブとの出現率の比、最小数、最大数を指定します。
複数指定する場合はこの一文全体を増やします。

● ストラクチャの生成

biomegenerationsettings$builder.addStructureStart(StructureFeatures.MINESHAFT);

生成するストラクチャを指定します。以下から選んでください。複数指定する場合はこの一文全体を増やします。

変数概要
MINESHAFT廃坑
MINESHAFT_MESA廃坑(メサ)
WOODLAND_MANSION森の館
JUNGLE_TEMPLEジャングルの寺院
DESERT_PYRAMIDピラミッド
IGLOOイグルー
SHIPWRECK沈没船
SHIPWRECH_BEACHED打ち上げられた難破船
SWAMP_HUT魔女の家
STRONGHOLDエンドポータルの遺跡
OCEAN_MONUMENT海底神殿
OCEAN_RUIN_COLD海底遺跡(冷たい海)
OCEAN_RUIN_WARM海底遺跡(暖かい海)
NETHER_BRIDGEネザー要塞
NETHER_FOSSILネザーの化石
END_CITYエンドシティ
BURIED_TREASURE埋められた宝
BASTION_REMNANTピグリンの砦
PILLAGER_OUTPOSTピレジャーのやぐら
VILLAGE_PLAINS平原の村
VILLAGE_DESERT砂漠の村
VILLAGE_SAVANNAサバンナの村
VILLAGE_SNOWY雪原の村
VILLAGE_TAIGAタイガの村
RUINED_PORTAL_STANDARD壊れたネザーゲート(通常)
RUINED_PORTAL_DESERT壊れたネザーゲート(砂漠)
RUINED_PORTAL_JUNGLE壊れたネザーゲート(ジャングル)
RUINED_PORTAL_SWAMP壊れたネザーゲート(湿地)
RUINED_PORTAL_MOUNTAIN壊れたネザーゲート(山岳)
RUINED_PORTAL_OCEAN壊れたネザーゲート(海)
RUINED_PORTAL_NETHER壊れたネザーゲート(ネザー)

● 空間の性質

下半分にある「return」以降のかたまりがそうです。

.precipitation(RainType)

降水について指定します。NONE(なし)かRAIN(雨)かSNOW(雪)です。

.biomeCategory(Category)

バイオームのカテゴリを指定します。

以下から選べます
変数概要
NONEなし
TAIGAタイガ
EXTREME_HILLS山岳
JUNGLEジャングル
MESAメサ
PLAINS平原
SAVANNAサバンナ
ICY雪原
THEENDエンド
BEACHビーチ
FOREST
OCEAN
DESERT砂漠
RIVER
SWAMP湿地
MUSHROOMきのこ島
NETHERネザー

.temperature(float)

気温を指定します。高いとスポンジの水が蒸発したり、低いと水が凍ったりします。
平原は0.8, 砂漠とネザーは2.0, 雪原は0.0です。

.downfall(float)

平原は0.4, 砂漠は0.0, 雪原は0.5です。

● 空間の性質(特殊)

.specialEffects(BiomeAmbience)のBiomeAmbienceに指定する値についてです。
「色を整数で指定する」 → 赤、緑、青をそれぞれ0~255の値で示し、(赤)×65535+(緑)×255+(青)の値で指定します。わからなかったらこのサイトで取得してください。

.waterColor(int)

水の色を整数で指定します。

.waterFogColor(int)

水中にいるときの霧の色を整数で指定します。

.fogColor(int)

霧の色を整数で指定します。

.foliageColorOverride(int)

草や一部の葉っぱブロック、ツタなど植物の色を整数で指定します。

.grassColorOverride(int)

草ブロックの色を整数で指定します。

.ambientParticle(new ParticleEffectAmbience(ParticleTypes, float))

バイオーム全体にパーティクルを出現させられます。パーティクル、出現率(量)を指定します。

パーティクルは以下から選べます

わからないやつは適当に書いてます

変数概要
AMBIENT_ENTITY_EFFECTポーションのモヤモヤ
ANGRY_VILLAGER村人が怒ったときのやつ
BARRIERバリアブロック
BLOCKブロックの破片
BUBBLE「泡」
CLOUD残留ポーション
CRITクリティカル攻撃
DAMAGE_INDICATORダメージを与えたときの黒いハート
DRAGON_BREATHドラゴンブレス
DRIPPING_LAVAブロックの下から滲むマグマのしずく
FALLING_LAVA滴り落ちているマグマのしずく
LANDING_LAVA着地したマグマのしずく
DRIPPING_WATERブロックの下から滲む水滴
FALLING_WATER滴り落ちている水滴
DUSTレッドストーンなど
EFFECTポーションのモヤモヤ
ELDER_GUARDIANエルダーガーディアン
ENCHANTED_HITエンチャント特効攻撃
ENCHANTエンチャント台
END_RODエンドロッド
ENTITY_EFFECTポーションのモヤモヤ
EXPLOSION_EMITTER爆発
EXPLOSION爆発
FALLING_DUST重力ブロックが浮いてる時のやつ
FIREWORK花火
FISHING釣り
FLAME松明の炎
SOUL_FIRE_FLAME青い松明の炎
SOULソウルスピードの魂
FLASH花火のフラッシュ
HAPPY_VILLAGER村人が喜んでる時のやつ
COMPOSTERコンポスター
HEART繁殖のハート
INSTANT_EFFECT
ITEMアイテムの破片
ITEM_SLIMEスライムのしずく
ITEM_SNOWBALL雪玉の破片
LARGE_SMOKEブレイズの煙
LAVAマグマからたまに飛び出るやつ
MYCELIUM菌糸ブロックの表面に出るちっちゃいやつ
NOTE音符
POOFモブが倒されたときの煙
PORTALポータル
RAIN
SMOKE松明の煙
SNEEZEパンダのくしゃみ
SPITラマのつば
SQUID_INKイカのインク
SWEEP_ATTACK剣のスイープ攻撃
TOTEM_OF_UNDYING不死のトーテム
UNDERWATER水中に漂うちっちゃいやつ
SPLASHスプラッシュポーション
WITCHウィッチの紫のパーティクル
BUBBLE_POP泡?
CURRENT_DOWN下降水流
BUBBLE_COLUMN_UP上昇水流
NAUTILUSコンジット?
DOLPHINイルカ
CAMPFIRE_COSY_SMOKEキャンプファイヤの煙
CAMPFIRE_SIGNAL_SMOKEキャンプファイヤの煙(長い)
DRIPPING_HONEY滲み出るハチミツのしずく
FALLING_HONEY滴り落ちているハチミツのしずく
LANDING_HONEY着地したハチミツのしずく
FALLING_NECTARハチから滴り落ちている花粉
ASHソウルサンドの谷に漂う灰
CRIMSON_SPORE深紅の森の胞子
WARPED_SPORE歪んだ森の胞子
DRIPPING_OBSIDIAN_TEAR滲み出る黒曜石の涙
FALLING_OBSIDIAN_TEAR滴り落ちている黒曜石の涙
LANDING_OBSIDIAN_TEAR着地した黒曜石の涙
REVERSE_PORTALポータル?
WHITE_ASH玄武岩デルタに漂う灰

.skyColor(int)

空の色を整数で指定します。

.ambientLoopSound(SoundEvents)

ループさせる環境音を指定します。

.ambientMoodSound(new MoodSoundAmbience(SoundEvents, int, int, double))

ムード環境音を指定します。

.ambientAdditionsSound(new SoundAdditionsAmbience(SoundEvents, double))

追加の環境音を指定します。

環境音は以下から選べます

わからないやつは適当に書いてます、サウンドなら何でも指定できますが、量が量なのでいくつか代表させました。

変数概要
AMBIENT_CAVE空同音
AMBIENT_BASALT_DELTAS_ADDITIONS玄武岩デルタの環境音(追加)
AMBIENT_BASALT_DELTAS_LOOP玄武岩デルタの環境音(ループ)
AMBIENT_BASALT_DELTAS_MOOD玄武岩デルタの環境音(ムード)
AMBIENT_CRIMSON_FOREST_ADDITIONS深紅の森の環境音(追加)
AMBIENT_CRIMSON_FOREST_LOOP深紅の森の環境音(ループ)
AMBIENT_CRIMSON_FOREST_MOOD深紅の森の環境音(ムード)
AMBIENT_NETHER_WASTES_ADDITIONS通常ネザーの環境音(追加)
AMBIENT_NETHER_WASTES_LOOP通常ネザーの環境音(ループ)
AMBIENT_NETHER_WASTES_MOOD通常ネザーの環境音(ムード)
AMBIENT_SOUL_SAND_VALLEY_ADDITIONSソウルサンドの谷の環境音(追加)
AMBIENT_SOUL_SAND_VALLEY_LOOPソウルサンドの谷の環境音(ループ)
AMBIENT_SOUL_SAND_VALLEY_MOODソウルサンドの谷の環境音(ムード)
AMBIENT_WARPED_FOREST_ADDITIONS歪んだ森の環境音(追加)
AMBIENT_WARPED_FOREST_LOOP歪んだ森の環境音(ループ)
AMBIENT_WARPED_FOREST_MOOD歪んだ森の環境音(ムード)
AMBIENT_UNDERWATER_LOOP水中の環境音(ループ)
AMBIENT_UNDERWATER_LOOP_ADDITIONS水中の環境音(追加)
AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE水中の環境音(追加,レア)
AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE水中の環境音(追加,激レア)
CONDUIT_AMBIENTコンジット
CONDUIT_AMBIENT_SHORTコンジット(短い)
FIRE_AMBIENT
LAVA_AMBIENTマグマ
PORTAL_AMBIENTポータル
RESPAWN_ANCHOR_AMBIENTリスポーンアンカー
WATER_AMBIENT

.backgroundMusic(BackgroundMusicTracks.createGameMusic(SoundEvents))

BGMを指定します。

BGMは以下から選べます

わからないやつは適当に書いてます、サウンドなら何でも指定できますが、音楽に限りました。

変数概要
MUSIC_CREATIVEクリエイティブ
MUSIC_CREDITSクレジット
MUSIC_DISC_11レコード「11」
MUSIC_DISC_13レコード「13」
MUSIC_DISC_BLOCKSレコード「Blocks」
MUSIC_DISC_CATレコード「Cat」
MUSIC_DISC_CHIRPレコード「Chirp」
MUSIC_DISC_FARレコード「Far」
MUSIC_DISC_MALLレコード「Mall」
MUSIC_DISC_MELLOHIレコード「Mellohi」
MUSIC_DISC_PIGSTEPレコード「Pigstep」
MUSIC_DISC_STALレコード「stal」
MUSIC_DISC_STRADレコード「strad」
MUSIC_DISC_WAITレコード「wait」
MUSIC_DISC_WARDレコード「ward」
MUSIC_DRAGONエンダードラゴン戦
MUSIC_ENDエンド
MUSIC_GAMEサバイバル
MUSIC_MENUメインメニュー
MUSIC_BIOME_BASALT_DELTAS玄武岩デルタ
MUSIC_BIOME_NETHER_WASTES通常ネザー
MUSIC_BIOME_SOUL_SAND_VALLEYソウルサンドの谷
MUSIC_BIOME_CRIMSON_FOREST深紅の森
MUSIC_BIOME_WARPED_FOREST歪んだ森
MUSIC_UNDER_WATER水中
バイオームを生成

新しいパッケージ「com.masec.newmod.world.gen」を作成し、中に「TestBiomeGeneration」クラスを新しく作ります。名前は各自で決めます。

● クラスのコード

作られたファイルを編集して、こうなります。

package com.masec.firstmod.world.gen;

import net.minecraft.util.RegistryKey;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.registries.ForgeRegistries;
import com.masec.newmod.world.biome.TestBiome;

import java.util.Objects;

import static net.minecraftforge.common.BiomeDictionary.Type.*;

public class TestBiomeGeneration {
    public static void generateBiomes() {
        addBiome(TestBiome.TEST_BIOME.get(), BiomeManager.BiomeType.WARM, 100, PLAINS, OVERWORLD);
    }

    private static void addBiome(Biome biome, BiomeManager.BiomeType type, int weight, BiomeDictionary.Type... types) {
        RegistryKey<Biome> key = RegistryKey.create(ForgeRegistries.Keys.BIOMES,
                Objects.requireNonNull(ForgeRegistries.BIOMES.getKey(biome)));

        BiomeDictionary.addTypes(key, types);
        BiomeManager.addBiome(type, new BiomeManager.BiomeEntry(key, weight));
    }
}

書き換える場所をマーカーで示しました。

各自で違うところをマーカーしたやつ
package com.masec.newmod.world.gen; import net.minecraft.util.RegistryKey; import net.minecraft.world.biome.Biome; import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.BiomeManager; import net.minecraftforge.registries.ForgeRegistries; import com.masec.newmod.world.biome.TestBiome; import java.util.Objects; import static net.minecraftforge.common.BiomeDictionary.Type.*; public class TestBiomeGeneration { public static void generateBiomes() { addBiome(TestBiome.TEST_BIOME.get(), BiomeManager.BiomeType.WARM, 100, PLAINS, OVERWORLD); } private static void addBiome(Biome biome, BiomeManager.BiomeType type, int weight, BiomeDictionary.Type... types) { RegistryKey<Biome> key = RegistryKey.create(ForgeRegistries.Keys.BIOMES, Objects.requireNonNull(ForgeRegistries.BIOMES.getKey(biome))); BiomeDictionary.addTypes(key, types); BiomeManager.addBiome(type, new BiomeManager.BiomeEntry(key, weight)); } }

桃色でマーカーしたところは、バイオームの気候、生成率の比、残りは全てバイオームのタイプを指定しています。
気候は DESERT(あつい)、 DESERT_LEGACY(あったか~い)、 WARM(ふつう)、 COOL(つめた~い)、 ICY(さむい)から選びます。
バイオームのタイプは以下から選びます

バイオームのタイプ(ジェネリック)概要
MESAメサ
FOREST
PLAINS平原
MOUNTAIN山岳
HILLS
SWAMP湿地
SANDY砂漠
SNOWY雪原
WASTELAND荒野
BEACHビーチ
VOID奈落
バイオームのタイプ(ディメンション)概要
OVERWORLD地上
NETHERネザー
ENDエンド
イベントバス

メインクラスのファイルに少し書き加えます。各自で名前が違うと思いますが「NewMod.java」を開きます。

package com.masec.newmod; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.masec.newmod.init.BlockInit; import com.masec.newmod.init.ItemInit; import com.masec.newmod.world.biome.TestBiome; import com.masec.newmod.world.gen.TestBiomeGeneration; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; // The value here should match an entry in the META-INF/mods.toml file @Mod(NewMod.MOD_ID) public class NewMod { // Directly reference a log4j logger. public static final Logger LOGGER = LogManager.getLogger(); public static final String MOD_ID = "new_mod"; public NewMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); bus.addListener(this::setup); ItemInit.ITEMS.register(bus); BlockInit.BLOCKS.register(bus); TestBiome.register(bus); // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); } private void setup(final FMLCommonSetupEvent event) { // some preinit code TestBiomeGeneration.generateBiomes(); } }

これを書き加えて終わりです。上のほうは各自で書き換える部分がありますね。
ちなみに、カスタムディメンションだけに生成したい場合は下のgenerationのやつは消します。

マイクラを起動して確認

コマンドを使って探します。この時点で追加できてることが分かりますね。

このように異様なバイオームが追加できました。

参考サイト
©2023 Rinca Hayamine