我的世界Java版1.21.4的Fabric模组开发教程(十八)自定义传送门
这是适用于Minecraft Java版1.21.4的Fabric模组开发系列教程专栏第十八章——自定义传送门。想要阅读其他内容,请查看或订阅上面的专栏。
传送门(Portal) 是Minecraft中用于跨维度传送的特殊结构。在完成自定义维度的创建后,为了避免每次进入维度都需要使用指令,我们可以在游戏中添加前往自定义维度的传送门。
在Fabric模组开发中,为了简化创建自定义传送门的过程,我们可以使用第三方提供的库——kyrptonaught/customportalapi。这也是绝大多数模组开发中创建自定义传送门最常用的解决方案。更多信息请参考GitHub - kyrptonaught/customportalapi: Developer Api for creating custom portals to any dimension。
想要在开始前创建自定义维度,请参考我的世界Java版1.21.4的Fabric模组开发教程(十七)自定义维度。
准备工作
现在,我们将kyrptonaught/customportalapi导入到模组项目中。这个小节的内容官网也有提供。
1.添加Maven仓库。打开build.gradle.json
,在repositories
对象中添加新的仓库地址;
repositories {...maven {url = "https://maven.kyrptonaught.dev"}
}
2.添加依赖。继续在build.gradle.json
的dependencies
对象中添加新的依赖;
dependencies {...modImplementation 'net.kyrptonaught:customportalapi:0.0.1-beta68-1.21.4'include 'net.kyrptonaught:customportalapi:0.0.1-beta68-1.21.4'
}
这里需要提供游戏版本。根据官方文档所述,游戏版本1.21.4对应的API版本应为0.0.1-beta68-1.21.4;
3.重新构建项目。点击右上角的“同步Gradle更改”图标,重新构建项目,等待项目构建完成;
出现BUILD SUCCESSFUL in Xs代表构建成功,第三方库已经可以使用。
创建并注册传送门
现在,我们在入口点类的onInitialize()
方法中使用第三方库完成传送门的创建与注册。
自定义传送门构造器类CustomPortalBuilder
CustomPortalBuilder
类来自第三方库kyrptonaught,用于创建并注册自定义传送门,同时提供了传送门的诸多设置。 其构造方法已经私有化,想要创建CustomPortalBuilder
类的对象,需要调用静态方法beginPortal()
。
此外,CustomPortalBuilder
类中提供了以下方法,且所有方法均支持链式编程:
frameBlock(Identifier blockID)
:指定用于构建传送门的方块,需要传递一个方块的标识符对象,应当使用Items
类中的常量;destDimID(Identifier dimID)
:指定目标维度的命名空间ID,需要传递一个维度的标识符对象。tintColor(int color)/tintColor(int r, int g, int b)
:指定传送门激活后传送门内部方块的颜色,可以传递一个16进制RGB颜色值或提供r
、g
、b
三个参数代表颜色。lightWithWater()
:指定传送门需要使用水来激活;lightWithItem(Item item)
:指定激活传送门的物品,需要传递一个物品对象;registerPortal()
:用于注册传送门,需要在链式编程结尾调用;
更多方法可参考源文件CustomPortalBuilder.java
。
在入口点类的onInitialize()
方法中,使用CustomPortalBuilder
类创建自定义传送门;
CustomPortalBuilder.beginPortal().frameBlock(Blocks.DIAMOND_BLOCK).lightWithWater().destDimID(Identifier.of(FabricDocsReference.MOD_ID, "new_dimension")).tintColor(45,65,101).registerPortal();
首先调用静态方法beginPortal()
创建CustomPortalBuilder
类的对象,然后依次调用frameBlock()
方法设置传送门方块为钻石块Blocks.DIAMOND_BLOCK
;lightWithWater()
方法设置使用水激活传送门;destDimID()
方法设置目标维度,其中调用Identifier.of()
方法传递一个标识符对象,即维度的命名空间ID;tintColor()
方法设置传送门激活后其中显示的颜色。最后调用registerPortal()
方法注册传送门;
这里的“new_dimension”指的是自定义维度。目标维度也可以是原版游戏中的末地和下界,此时需要destDimID()
方法中应当传递末地的标识符对象DimensionTypes.THE_END_ID
或下界的标识符对象DimensionTypes.THE_NETHER_ID
。
启动游戏测试
启动游戏,进入世界,使用钻石块搭建传送门并使用水桶激活传送门,大小和下界传送门相同。此外,也可以搭建其他大小的传送门,最小为4×5,最大为23×23,这一点也与下界传送门相同;
可以看到传送门内部方块的颜色、传送门方块以及使用水激活传送门等与方法中设置的相同;
进入传送门,前往自定义维度;
成功进入其他维度。如果目标维度为自定义维度,且维度使用了噪声型区块生成器,传送门的生成与维度噪声设置JSON中的“spawn_target”
配置项相关,有些时候传送门可能生成在地下。
本章小结
本章详细阐述了使用第三方库创建自定义传送门的详细步骤,包括第三方库的导入和传送门创建的过程。总体来说,难度较小,篇幅较短,且不需要其他的模组开发知识,对模组开发新手比较友好。感谢各位的阅读,有兴趣可以订阅此专栏!