维度&传送门 1.21 Fabric
本篇教程的视频:
本篇教程源代码
GitHub地址:TutorialMod-Dimension-1.21
介绍
本篇教程我们将为我们的模组添加维度和传送门
维度在MC中是一个很重要的概念,它是一个独立的世界,有自己的生物群系、生物实体等等
不过呢,这玩意现在也是数据驱动的了,所以我们得写一些json文件
而传送门我们可以通过第三方的API来实现简单的传送门,这里我们将使用Custom Portal API,这里是它的GitHub地址
准备工作
那么先把第三方库的依赖加上
首先是maven仓库
1 | repositories { |
然后是具体的依赖
1 | dependencies { |
这里我们也使用include,直接将这个库囊括在我们的模组中,这样省的玩家去下载第三方的库了
然后重载Gradle,让它下载依赖,运行完之后再跑一下genSources,让它下载源代码
添加维度
注册维度
这里我们先来折腾维度,首先创建ModDimensions类
1 | public class ModDimensions { |
这个类用于维度的注册
先是一些注册键
1 | public static final RegistryKey<DimensionOptions> TEST_KEY = RegistryKey.of(RegistryKeys.DIMENSION, |
这里一共要写三个键,一个是维度的键,一个是世界的键,一个是维度类型的键
前两个的注册名字是一样的,后面的多了一个_type
然后我们用bootstrap方法来注册我们的维度
1 | public static void bootstrap(Registerable<DimensionType> context) { |
这里我们用DimensionType来注册我们的维度,这里面的参数有很多,我们一个个来看,这些都是维度的设置
OptionalLong.of(12000):形参OptionalLong fixedTime,这个是维度一天的时间false:形参boolean hasSkyLight,这个是是否有天空光false:形参boolean hasCeiling,这个是是否有天花板(下界有天花板,最上层是基岩层)false:形参boolean ultrawarm,这个是是否是极热(下界就是极热维度)true:形参boolean natural,这个是是否是自然维度1.0:形参float coordinateScale,这个是坐标缩放,比如下界一格等于主世界的八格true:形参boolean bedWorks,这个是床能否工作false:形参boolean respawnAnchorWorks,这个是重生锚能否工作0:形参int minY,这个是维度的最小高度256:形参int height,这个是维度的高度256:形参int logicalHeight,这个是逻辑高度BlockTags.INFINIBURN_OVERWORLD:形参TagKey<Block> infiniburn,这个是维度的燃烧块,也就是在此维度中,在该方块上的火焰不会熄灭,如灵魂沙和灵魂火DimensionTypes.OVERWORLD_ID:形参Identifier effects,这个是环境效果1.0f:形参float ambientLight,这个是环境光- 最后一个是
MonsterSettings,这个是怪物的设置,第一个是piglinSafe,第二个是hasRaids,第三个是monsterSpawnLightTest,第四个是monsterSpawnBlockLightLimit
数据生成
然后我们在数据生成类TutorialModDataGenerator中注册这个bootstrap方法
1 | registryBuilder.addRegistry(RegistryKeys.DIMENSION_TYPE, ModDimensions::bootstrap); |
还有在ModWorldGen中注册
1 | entries.addAll(registries.getWrapperOrThrow(RegistryKeys.DIMENSION_TYPE)); |
然后我们就可以跑数据生成了,我们会在data/tutorialmod/dimension_type中看到我们的维度类型文件
构造维度
那么接下来就是设置这个维度里面到底有什么了,有哪些生物群系?
先去这里Here
然后我们就可以看到一个json文件的编辑器,我们可以在这里编辑我们的维度中的生物群系,右上的一大块区域就是可视化框,右下是预生成的维度文件
我们回到中间的那块区域,直接来看蓝绿色显示的那部分
我们将生物群系源选择为多重噪声,了解过MC地形生成原理的应该都知道这个噪声是什么东西
在项目这栏可以更改生物群系,我们也可以用我们之前写的钻石大陆这个生物群系,不过是要你自己输入(不要输错,不然世界生成会崩溃),命名空间+生物群系注册名
下面的参数都是可以改的,包括温度、湿度、大陆性、侵蚀、奇异度、深度和偏移
这个你就自己玩吧,我这里就不多说了
当你编辑完之后,你可以点击右下的下载,然后将这个文件放到resources/data/tutorialmod/dimension中,当然这里的名字要和呢注册的一致
另外记得要将开头的type改为tutorialmod:test_type,我们才算真正完成了这个维度的构造
添加传送门
传送门的添加相当简单,因为有了Custom Portal API,我们只需要在主类的onInitialize方法中注册传送门即可
1 | CustomPortalBuilder.beginPortal() |
这里我们使用了CustomPortalBuilder来创建传送门
frameBlock是传送门的框架方块
lightWithItem是传送门激活的物品
destDimID是传送门的目的地,填我们写的维度
tintColor是传送门的颜色
当然这里我们并没有规定传送门的大小,那就默认大于等于原版的大小即可
同样的,通过这个库中,你也可以试着构建水平的传送门,就像末地传送门一样
那么现在,我们就进入游戏,搭建一个传送门,看看我们的维度是什么样子的吧











