维度&传送门 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
是传送门的颜色
当然这里我们并没有规定传送门的大小,那就默认大于等于原版的大小即可
同样的,通过这个库中,你也可以试着构建水平的传送门,就像末地传送门一样
那么现在,我们就进入游戏,搭建一个传送门,看看我们的维度是什么样子的吧