1. 新维度
实现新维度可以说是 Minecraft Mod 中最具神秘感的话题——不仅是因为有关它的资料的确少得可怜,还因为添加新维度的 Mod 也本来就不多。
1.1. 从 DimensionType 开始
import net.minecraft.world.DimensionType;
import net.minecraftforge.common.DimensionManager;
public static int dimID = 233;
public static DimensionType myDim;
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
// 第一个参数代表此维度的内部名称。
// 第二个参数是村庄等数据保存时会用到的“当前维度的专有后缀名”。
// 第三个参数是维度 ID。维度 ID 是基于 Minecraft 1.12.2 的 Forge Mod 开发中
// 仍然需要手动指定数字 ID 的游戏内容,也因此几乎所有的 Modder 都会允许通过配置文件
// 修改维度 ID。
// 第四个参数是该维度使用的 WorldProvider 的类。要求这个类有零参构造器。
// 第五个参数代表“是否保持该维度的 spawn 区块一直加载”。
myDim = DimensionType.register("my_dimension", "_my_dim", dimID, MyWorldProvider.class, false);
// 在拿到自己的维度的 myDimType 后,需要再向 Forge 告知这一新的 DimensionType 的存在,
// 否则某些 Forge 加入的功能会无法在你的新维度中工作。
// 第一个参数仍然是维度 ID,和上面保持一致即可。
DimensionManager.registerDimension(dimID, myDim);
}
1.2. WorldProvider
是的,一个新的维度必须要有一个 WorldProvider
的实现。关于它的具体实现很快就会讲到,这里我们暂时先用一个和主世界完全一致的 WorldProvider
:
public final class MyWorldProvider extends WorldProviderSurface {
@Override
public final DimensionType getDimensionType() {
return myDimType;
}
}