
想要看代码高亮的可以去原文地址或者我的微信公众号(pearapple_2015)查看。
原文链接:https://wiki.mcjty.eu/modding/index.php?title=Dimensions-1.9

这个更进阶的教程将展示你可以如何创建你自己自定义的空间。需要注意的是这个教程基于添加自定义指令的那个教程(能够传送到你自己的空间)以及关于配置栏的教程。

实现你自己的空间十分有趣而且你能做很多事情来调整你的空间。在这个教程中,我们只会向你展示非常基础的空间。你还可以做很多其他的事情。关于做更多其他的事情,原版的“ChunkProviderOverworld”类是一个很好的参考。我们的空间只实现了原版世界的一个子集。
你首先需要的是一个WorldProvider的实现。在许多情况下,每一个空间都有它自己的WorldProvider,但是实际上对不同的空间重复使用相同的world provider是可行的(RFTools空间就是这样)。还需要注意的是在WorldProvider类中有许多方法供你重写来提供各种各样有趣的结果。你可以影响空间的时间、天空、天气等等。

现在我们需要生成风貌地形的代码。这是ChunkProviderOverworld类的一个修改的拷贝,除了为了清晰我们把地形生成器独立在了一个单独的类中。我们在这里生成的地形只是生成了地形和洞穴,没有结构,没有沟壑等等。你可以去查看原版代码是如何实现这些的。我们还让我们自定义的生物生成在这里作为唯一的生物。你当然也可以改变这个:


现在我们需要地形生成器。这个包含了许多数学内容(Perlin噪声函数等),是相当复杂的代码。我们不会详细解释。我建议你修改这边的值,然后看看会有什么影响。这段代码的基本目的是填充一个高度图然后基于此生成一个区块。区块在ChunkPrimer类中生成。如果你只是想要生成一个平面地形,那对于入门来说相当容易。






最后我们需要把所有这些都设置好,这样我们的空间就可以在游戏里运作了。要做到这个,我们要添加一个新的ModDimensions的类。我们需要在这里注册两个不同的东西。首先是空间的类型。这是一个枚举类型的值,你可以用DimensionType.register()方法在运行时(Forge的魔法)对它进行扩展。这个空间类型将一个空间类型ID和你的world provider进行映射。在这个例子中,空间类型的ID和空间是一致的,但这实际上不是必须的。
接着,我们还需要注册空间本身,并把它和空间类型进行映射。
最后我们在CommonProxy类中调用我们新的init()方法:

要测试我们的空间,你可以在游戏中使用:/tp 100
