提供: Minecraft Modding Wiki
この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。 |
ワールド上で鉱石のようにブロックを生成する方法
動作確認済みのバージョン:1.16.3
鉱石を生成する
ソースコード
- SampleMod.java
package com.example.ore; import net.fabricmc.api.ModInitializer; import net.minecraft.block.Blocks; import net.minecraft.util.Identifier; import net.minecraft.util.registry.BuiltinRegistries; import net.minecraft.util.registry.Registry; import net.minecraft.world.gen.decorator.Decorator; import net.minecraft.world.gen.decorator.RangeDecoratorConfig; import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.Feature; import net.minecraft.world.gen.feature.OreFeatureConfig; public class SampleMod implements ModInitializer { /** * ModID文字列 */ public static final String MOD_ID = "samplemod"; //鉱石作成 public static ConfiguredFeature<?, ?> ORE_OAK_LOG_OVERWORLD = Feature.ORE .configure(new OreFeatureConfig( OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, Blocks.OAK_LOG.getDefaultState(),//オークの原木を指定 9)) //鉱石(生成物)の最大サイズ .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig( 0, 0, //鉱石(生成物)Y座標の最小レベル 64))) //鉱石(生成物)Y座標の最大レベル .spreadHorizontally() .repeat(20); //1チャンクあたりの鉱石(生成物)の数 @Override public void onInitialize() { //つくった鉱石(生成物)を登録 Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, new Identifier(MOD_ID, "ore_oak_log_overworld"), ORE_OAK_LOG_OVERWORLD); } } }
- SampleDefaultBiomeFeaturesMixin.java
package com.example.ore.mixin; import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.feature.DefaultBiomeFeatures; import com.example.ore.SampleMod; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(DefaultBiomeFeatures.class) public class SampleDefaultBiomeFeaturesMixin { @Inject(method = "addDefaultOres(Lnet/minecraft/world/biome/GenerationSettings$Builder;)V", at = @At("TAIL")) private static void addDefaultOres(GenerationSettings.Builder builder, CallbackInfo ci) { builder.feature(GenerationStep.Feature.UNDERGROUND_ORES, SampleMod.ORE_OAK_LOG_OVERWORLD); } }
- samplemod.mixins.json
{ "required": true, "minVersion": "0.8", "package": "com.example.ore.mixin", "compatibilityLevel": "JAVA_8", "$comment": "↓SampleDefaultBiomeFeaturesMixinをミックスインに追加", "mixins": [ "SampleDefaultBiomeFeaturesMixin" ], "client": [ "SampleMixin" ], "injectors": { "defaultRequire": 1 } }
解説
- SampleMod.java
ここでの構成は、「src/java/main/com/example/ore/SampleMod.java」となっている。
public static ConfiguredFeature<?, ?> ORE_OAK_LOG_OVERWORLD = Feature.ORE .configure(new OreFeatureConfig( OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, Blocks.OAK_LOG.getDefaultState(), 9)) .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig( 0, 0, 64))) .spreadHorizontally() .repeat(20);
Blocks.OAK_LOGでminecraft:oak_logを指定している。
追加したブロックにしたいなら、Blocks.OAK_LOGをクラス名.ブロック(例:SampleMod.SAMPLE_BLOCK)に指定すればよい。
- SampleDefaultBiomeFeaturesMixin.java
ここでの構成は、「src/java/main/com/example/ore/mixin/SampleDefaultBiomeFeaturesMixin.java」となっている。
- samplemod.mixins.json
ここでの構成は、「src/resources/samplemod.mixins.json」となっている。 名前は(MOD ID).mixins.jsonにして保存すること。
"mixins": [ "SampleDefaultBiomeFeaturesMixin" ],
ここで「SampleDefaultBiomeFeaturesMixin.java」を指定している。 詳しくはMixinを参照すること。