提供: Minecraft Modding Wiki
この記事は"Minecraft Forge Universal 11.14.0.xxx~"を前提MODとしています。 |
OreGenEventを利用した鉱石生成
IWorldGeneretor利用よりも簡易的な鉱石生成のやり方
もちろん鉱石でなくても生成できる。
BlockPosやfmlパッケージ下のクラスパス等に気をつければ1.8以前でも利用可能である。
ソースコード
- SampleOreGeneratorCore.java
package mods.gensample; import省略 @Mod(modid="SampleOreGenerator" acceptedMinecraftVersions = "[1.8,1.8.8]") public class SampleOreGeneratorCore { /** Eventの登録を行う。 */ @EventHandler public void init(FMLInitializationEvent event){ MinecraftForge.ORE_GEN_BUS.register(this); } @SubscribeEvent public void generateOrePre(OreGenEvent.Pre event){ WorldGenerator bedrockGen = new WorldGenMinable(Blocks.bedrock.getDefaultState(), 9); if(TerrainGen.generateOre(event.world, event.rand,bedrockGen, event.pos, OreGenEvent.GenerateMinable.EventType.CUSTOM)) genStandardOre1(event.world, event.pos, 20, bedrockGen, 0, 96, event.rand); } /** Standard ore generation helper. Generates most ores. */ protected void genStandardOre1(World world, BlockPos pos, int size, WorldGenerator generator, int minY, int maxY, Random rnd){ int l; if(maxY < minY){ l = minY; minY = maxY; maxY = l; }else if(maxY == minY){ if(minY < 255){ ++maxY; }else{ --minY; } } for(l = 0; l < size; ++l){ BlockPos blockpos = pos.add(rnd.nextInt(16), rnd.nextInt(maxY - minY) + minY, rnd.nextInt(16)); generator.generate(world, rnd, blockpos); } } /** Standard ore generation helper. Generates Lapis Lazuli. */ protected void genStandardOre2(World world, BlockPos pos, int size, WorldGenerator generator, int minY, int maxY, Random rnd){ for(int l = 0; l < size; ++l){ BlockPos blockpos = pos.add(rnd.nextInt(16), rnd.nextInt(maxY) + rnd.nextInt(maxY) + minY - maxY, rnd.nextInt(16)); generator.generate(world, rnd, blockpos); } } }
解説
genStandardOre等のメソッドの引数は読んで字の如しである。
WorldGeneratorのところには通常、WorldGenMinableが入るがそれ以外でも全く問題はない。
参考になるバニラのソースとしては、net.minecraft.world.biome.BiomeDecorator.java#generateOresなどがある。