还是很忙。就更新一点简单的东西好了。(但愿这回不是flag,是真的简单
通过前面的教程我们已经学会了如何创建一个有名字、有材质、可以实现自己功能的方块了。大概你已经迫不及待的要去创建自己的mod了。许许多多的mod都是开始于矿物的创建。你一定也想要创建你的矿物方块 。这回我们就来学习如何让你创建的矿石方块在生成世界的时候被生成。(注意:如果你要创建矿物的话最好使用矿物字典来实现多mod兼容,有关矿物字典的东西我以后会去介绍的。)
为了创建矿物,我们需要能够在世界生成的时候执行我们的代码,很幸运的是,forge已经提供给我们一个接口了:
public class TutorialGenerator implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { } }
代码来源:minecraft forge wiki
可以看到通过这个接口,我们就有可能在区块被生成的时候被调用,从而修改这个世界。
这个接口的world.provider.dimensionId可以为我们提供当前所在维度的信息:
- -1 表示地狱
- 0 表示主世界
- 1 表示天域(就是末地啦)
当然了,你可能遇到的维度不只是这些,如果其他的mod添加了新的维度的话(比如以太、暮色、星系)你就可能需要处理其他的维度的情况。
在有了这些的情况下,你就有能力在新生成的地图上生成出一切的东西。但是我们不要跑题,我们只是为了生成矿石而已。这个时候minecraft自带的一个矿石的生成器就会帮我们很大的忙
int firstBlockXCoord = i + random.nextInt(16); int firstBlockYCoord = random.nextInt(64); int firstBlockZCoord = j + random.nextInt(16); (new WorldGenMinable(TutorialMain.myFirstBlock.blockID, 13)).generate(world, random, firstBlockXCoord, firstBlockYCoord, firstBlockZCoord);
以上代码也来自minecraft forge wifi
到现在为止我们就可以去让你的矿物生成在世界上新加载的区块了。等等,貌似忘了什么,你们有没有忘记?我们不是说GameRegistry的使用么?我们的标题都丢掉了。
为了让forge加载你的这个世界生成器,你必须要在你的初始化的时候注册它。
GameRegistry.registerWorldGenerator(new WorldGeneratorName());
大概这样就算是彻底的完成了创建矿石的过程呢
有没有原帖?
已经弃坑啦。教程不写啦,移步我的wiki看别人的教程吧,推荐szszss的
额,i j两个变量的定义去哪里了。求写上
请问这些代码应该放在什么地方?是新建一个类吗?
为什么找不到上述i和j两个变量?
64的三个单引号是什么意思?
Gameregistry.registerGenerator似乎有两个参数,另一个是什么?
比如我在Mod的主类里创建了一个叫SilverOre = new BlockCommon,那么教程中写的TutorialMain.myFirstBlock.blockID应该填成什么?
咦,我还没有发现呢,大概是代码复制的时候出错了呢。谢谢。就是一个整数而已啦
请问一下WorldGeneratorName应该实例化的是哪个类呢?
0.0 你吧wiki打成了wifi
thanks,等年后我也会更新一下这些教程的,来重新写一下1.8的。(像szszss劳模学习