提供: Minecraft Modding Wiki
移動先: 案内検索
(ページの作成:「{{前提MOD|reqmod="Fabric API 0.3.2 build 230~"}} {{チュートリアル難易度|difficulty=1|clear=none}} {{チュートリアルカテゴリー|difficulty=0|type=O…」)
 
 
(同じ利用者による、間の5版が非表示)
1行目: 1行目:
 
{{前提MOD|reqmod="Fabric API 0.3.2 build 230~"}}
 
{{前提MOD|reqmod="Fabric API 0.3.2 build 230~"}}
 
{{チュートリアル難易度|difficulty=1|clear=none}}
 
{{チュートリアル難易度|difficulty=1|clear=none}}
{{チュートリアルカテゴリー|difficulty=0|type=Ore}}
+
{{チュートリアルカテゴリー|difficulty=0|type=Block}}
 
ワールド上で鉱石のようにブロックを生成する方法
 
ワールド上で鉱石のようにブロックを生成する方法
 
動作確認済みのバージョン:1.16.3
 
 
==鉱石を生成する==
 
==鉱石を生成する==
  
13行目: 11行目:
  
 
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行目: 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(
38行目: 39行目:
 
           64))) //鉱石(生成物)Y座標の最大レベル
 
           64))) //鉱石(生成物)Y座標の最大レベル
 
         .spreadHorizontally()
 
         .spreadHorizontally()
         .repeat(20); // 1チャンクあたりの鉱石(生成物)の数
+
         .repeat(20); //1チャンクあたりの鉱石(生成物)の数
  
 
         @Override
 
         @Override
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>
54行目: 78行目:
 
   "required": true,
 
   "required": true,
 
   "minVersion": "0.8",
 
   "minVersion": "0.8",
   "package": "com.github.ptom76.trialmod.mixin",
+
   "package": "com.example.ore.mixin",
 
   "compatibilityLevel": "JAVA_8",
 
   "compatibilityLevel": "JAVA_8",
 +
  "$comment": "↓SampleDefaultBiomeFeaturesMixinをミックスインに追加",
 
   "mixins": [
 
   "mixins": [
     "DefaultBiomeFeaturesMixin"
+
     "SampleDefaultBiomeFeaturesMixin"
 
   ],
 
   ],
 
   "client": [
 
   "client": [
     "MixinMain"
+
     "SampleMixin"
 
   ],
 
   ],
 
   "injectors": {
 
   "injectors": {
68行目: 93行目:
 
</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|Mixin]]を参照すること。

2020年10月12日 (月) 22:44時点における最新版

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

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

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

鉱石を生成する[編集]

ソースコード[編集]

  • 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を参照すること。