このシリーズのまとめはこちら:
umagame.hatenablog.jp
こんばんは。
はじめに
今回は鉱石ブロックを作って、それをワールドに生成されるようにしたいと思います。
前回:
umagame.hatenablog.jp
鉱石ブロックを作る
まず、以前の記事を参考に鉱石ブロックを作ります。
以前の記事:
umagame.hatenablog.jp
あと、ドロップ用のアイテムも作っておきます。
アイテムについてはこちら:
umagame.hatenablog.jp
こんな感じ。
生成の設定
生成のクラスをworld/genにを作ります。
例によりコードは丸パクリです。
package com.umagame.dirtmod.world.gen;
import com.umagame.dirtmod.init.DirtModBlocks;
import com.umagame.dirtmod.main.DirtMod;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.gen.GenerationStage;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.OreFeatureConfig;
import net.minecraft.world.gen.placement.ConfiguredPlacement;
import net.minecraft.world.gen.placement.CountRangeConfig;
import net.minecraft.world.gen.placement.Placement;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.ObjectHolder;
@ObjectHolder(DirtMod.MOD_ID)
public class DirtModOreGen {
@Mod.EventBusSubscriber(modid = DirtMod.MOD_ID, bus = Bus.MOD)
public static class Register {
@SubscribeEvent
public static void loadCompleteEvent(FMLLoadCompleteEvent event) {
for(Biome biome : ForgeRegistries.BIOMES) {
ConfiguredPlacement<CountRangeConfig> customConfig = Placement.COUNT_RANGE
.func_227446_a_(new CountRangeConfig(20,0,0,64));
biome.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Feature.ORE
.func_225566_b_(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, DirtModBlocks.DIRT_CRYSTAL_ORE.getDefaultState(), 9))
.func_227228_a_(customConfig));
}
}
}
}
下の方のDirtModBlocks.DIRT_CRYSTAL_OREが生成される鉱石ブロックです。
また、この5つある数字についてですが、どれがなにを表しているかよくわかりません!
なので内部データを見てバニラの鉱石はどうなっているかを調べました。
適当にまとめるとこんな感じ(LibreOffice Calcで作ってそのまま記事にコピペしたらちゃんと表になりました。はてなブログすごい。)
|
石炭 |
鉄 |
金 |
レッドストーン |
ダイヤモンド |
new CountRangeConfigのところのやつ |
20,0,0,128 |
20,0,0,64 |
2,0,0,32 |
8,0,0,16 |
1,0,0,16 |
.getDefaultState()のあとのやつ |
17 |
9 |
9 |
8 |
8 |
今回は鉄と同じにしました。
あと、変数biomeを使って鉱石が生成されるバイオームを制限することもできます。
起動して確認してみるとありました。
ブロックの修正
ブロックを壊せばそのままアイテムが出てくるので、経験値が壊したときに出るようにしましょう。
レッドストーン鉱石ブロックのコードからそのまま持ってきます。
@Override
public int getExpDrop(BlockState state, net.minecraft.world.IWorldReader world, BlockPos pos, int fortune, int silktouch) {
return silktouch == 0 ? 1 + RANDOM.nextInt(5) : 0;
}
これをブロックのクラスに追加すればOKです。
さいごに
今回はここまでです。
次回:
umagame.hatenablog.jp