提供: Minecraft Modding Wiki
細 |
細 |
||
(同じ利用者による、間の3版が非表示) | |||
3行目: | 3行目: | ||
{{チュートリアルカテゴリー|difficulty=0|type=Block}} | {{チュートリアルカテゴリー|difficulty=0|type=Block}} | ||
ワールド上で鉱石のようにブロックを生成する方法 | ワールド上で鉱石のようにブロックを生成する方法 | ||
− | |||
− | |||
==鉱石を生成する== | ==鉱石を生成する== | ||
13行目: | 11行目: | ||
import net.fabricmc.api.ModInitializer; | import net.fabricmc.api.ModInitializer; | ||
− | + | import net.minecraft.block.Blocks; | |
− | import net.minecraft.block. | ||
− | |||
− | |||
import net.minecraft.util.Identifier; | import net.minecraft.util.Identifier; | ||
+ | import net.minecraft.util.registry.BuiltinRegistries; | ||
import net.minecraft.util.registry.Registry; | 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 | public class SampleMod implements ModInitializer | ||
31行目: | 32行目: | ||
.configure(new OreFeatureConfig( | .configure(new OreFeatureConfig( | ||
OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, | OreFeatureConfig.Rules.BASE_STONE_OVERWORLD, | ||
− | Blocks.OAK_LOG.getDefaultState(), | + | Blocks.OAK_LOG.getDefaultState(),//オークの原木を指定 |
9)) //鉱石(生成物)の最大サイズ | 9)) //鉱石(生成物)の最大サイズ | ||
.decorate(Decorator.RANGE.configure(new RangeDecoratorConfig( | .decorate(Decorator.RANGE.configure(new RangeDecoratorConfig( | ||
47行目: | 48行目: | ||
} | } | ||
} | } | ||
+ | } | ||
+ | </source> | ||
+ | *SampleDefaultBiomeFeaturesMixin.java | ||
+ | <source lang = "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); | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
56行目: | 80行目: | ||
"package": "com.example.ore.mixin", | "package": "com.example.ore.mixin", | ||
"compatibilityLevel": "JAVA_8", | "compatibilityLevel": "JAVA_8", | ||
+ | "$comment": "↓SampleDefaultBiomeFeaturesMixinをミックスインに追加", | ||
"mixins": [ | "mixins": [ | ||
− | " | + | "SampleDefaultBiomeFeaturesMixin" |
], | ], | ||
"client": [ | "client": [ | ||
68行目: | 93行目: | ||
</source> | </source> | ||
==解説== | ==解説== | ||
+ | *SampleMod.java | ||
+ | ここでの構成は、「src/java/main/com/example/ore/SampleMod.java」となっている。 | ||
<source lang = "java"> | <source lang = "java"> | ||
− | public static | + | 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); | ||
</source> | </source> | ||
− | + | Blocks.OAK_LOGでminecraft:oak_logを指定している。<br /> | |
− | + | 追加したブロックにしたいなら、Blocks.OAK_LOGをクラス名.ブロック(例:SampleMod.SAMPLE_BLOCK)に指定すればよい。 | |
− | <source lang = " | + | *SampleDefaultBiomeFeaturesMixin.java |
− | + | ここでの構成は、「src/java/main/com/example/ore/mixin/SampleDefaultBiomeFeaturesMixin.java」となっている。 | |
− | + | *samplemod.mixins.json | |
+ | ここでの構成は、「src/resources/samplemod.mixins.json」となっている。 | ||
+ | 名前は(MOD ID).mixins.jsonにして保存すること。 | ||
+ | <source lang = "json"> | ||
+ | "mixins": [ | ||
+ | "SampleDefaultBiomeFeaturesMixin" | ||
+ | ], | ||
</source> | </source> | ||
− | + | ここで「SampleDefaultBiomeFeaturesMixin.java」を指定している。 | |
− | + | 詳しくは[[Fabric/Mixin|Mixin]]を参照すること。 |
2020年10月12日 (月) 22:44時点における最新版
この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。 |
ワールド上で鉱石のようにブロックを生成する方法
鉱石を生成する[編集]
ソースコード[編集]
- 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を参照すること。