提供: Minecraft Modding Wiki
移動先: 案内検索
(作った。解説が少ないと思うので追記求みます。)
 
22行目: 22行目:
 
*/
 
*/
 
@EventHandler
 
@EventHandler
public void init(FMLInitializationEvent event)
+
public void init(FMLInitializationEvent event){
 
MinecraftForge.ORE_GEN_BUS.register(this);
 
MinecraftForge.ORE_GEN_BUS.register(this);
 
}
 
}

2015年5月6日 (水) 10:24時点における版

この記事は"Minecraft Forge Universal 11.14.0.xxx~"を前提MODとしています。

Wood pickaxe.png
初心者向けのチュートリアルです。
C world.png
Worldに関係のあるチュートリアルです。


OreGenEventを利用した鉱石生成

IWorldGeneretor利用よりも簡易的な鉱石生成のやり方
もちろん鉱石でなくても生成できる。
BlockPosやfmlパッケージ下のクラスパス等に気をつければ1.8以前でも利用可能である。

ソースコード

  • SampleOreGeneratorCore.java
package mods.gensample;

import省略

@Mod(modid="SampleOreGenerator")
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などがある。