提供: Minecraft Modding Wiki
移動先: 案内検索
(鉱石を生成する)
13行目: 13行目:
  
 
import net.fabricmc.api.ModInitializer;
 
import net.fabricmc.api.ModInitializer;
import net.minecraft.item.Item;
+
import net.minecraft.block.Blocks;
import net.minecraft.block.Block;
 
import net.minecraft.item.BlockItem;
 
import net.minecraft.item.ItemGroup;
 
 
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行目: 34行目:
 
         .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(
91行目: 94行目:
 
}
 
}
 
</source>
 
</source>
===解説===
 
 
 
==解説==
 
==解説==
 +
*SampleMod.java
 +
ここでの構成は、「src/java/main/com/example/ore/SampleMod.java」となっている。
 
<source lang = "java">
 
<source lang = "java">
public static final Block SAMPLE_BLOCK = new Block(FabricBlockSettings.of(Material.METAL).build());
+
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 = "java">
+
*SampleDefaultBiomeFeaturesMixin.java
Registry.register(Registry.BLOCK, new Identifier(MOD_ID, "sample_block"), SAMPLE_BLOCK);
+
ここでの構成は、「src/java/main/com/example/ore/mixin/SampleDefaultBiomeFeaturesMixin.java」となっている。
Registry.register(Registry.ITEM, new Identifier(MOD_ID, "sample_block"), new BlockItem(SAMPLE_BLOCK, new Item.Settings().group(ItemGroup.MISC)));
+
*samplemod.mixins.json
 +
ここでの構成は、「src/resources/samplemod.mixins.json」となっている。
 +
名前は(MOD ID).mixins.jsonにして保存すること。
 +
<source lang = "json">
 +
  "mixins": [
 +
    "SampleDefaultBiomeFeaturesMixin"
 +
  ],
 
</source>
 
</source>
ブロックIDとアイテムIDの登録。
+
ここで「SampleDefaultBiomeFeaturesMixin.java」を指定している。
ブロックをアイテムとしてクリエイティブタグ、ItemGroup.MISC(その他)に登録。
+
詳しくは[[Fabric/Mixin|ミックスインについて]]を参照すること。

2020年10月11日 (日) 13:49時点における版

この記事は"Fabric API 0.3.2 build 230~"を前提MODとしています。

Stone pickaxe.png
中級者向けのチュートリアルです。
C block.png
Blockに関係のあるチュートリアルです。

ワールド上で鉱石のようにブロックを生成する方法

動作確認済みのバージョン: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」を指定している。 詳しくはミックスインについてを参照すること。