当前位置: 首页 > news >正文

我的世界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.jsondependencies对象中添加新的依赖;

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颜色值或提供rgb三个参数代表颜色。
  • 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_BLOCKlightWithWater()方法设置使用水激活传送门;destDimID()方法设置目标维度,其中调用Identifier.of()方法传递一个标识符对象,即维度的命名空间ID;tintColor()方法设置传送门激活后其中显示的颜色。最后调用registerPortal()方法注册传送门;

这里的“new_dimension”指的是自定义维度。目标维度也可以是原版游戏中的末地和下界,此时需要destDimID()方法中应当传递末地的标识符对象DimensionTypes.THE_END_ID或下界的标识符对象DimensionTypes.THE_NETHER_ID

启动游戏测试

启动游戏,进入世界,使用钻石块搭建传送门并使用水桶激活传送门,大小和下界传送门相同。此外,也可以搭建其他大小的传送门,最小为4×5,最大为23×23,这一点也与下界传送门相同;
请添加图片描述
可以看到传送门内部方块的颜色、传送门方块以及使用水激活传送门等与方法中设置的相同;

进入传送门,前往自定义维度;
请添加图片描述
成功进入其他维度。如果目标维度为自定义维度,且维度使用了噪声型区块生成器,传送门的生成与维度噪声设置JSON中的“spawn_target”配置项相关,有些时候传送门可能生成在地下。

本章小结

本章详细阐述了使用第三方库创建自定义传送门的详细步骤,包括第三方库的导入和传送门创建的过程。总体来说,难度较小,篇幅较短,且不需要其他的模组开发知识,对模组开发新手比较友好。感谢各位的阅读,有兴趣可以订阅此专栏!

http://www.dtcms.com/a/334299.html

相关文章:

  • 边缘计算及其特点
  • 学习日志35 python
  • Python Day30 CSS 定位与弹性盒子详解
  • CodeBuddy IDE深度体验:AI驱动的全栈开发新时代
  • 缓存一致性总线协议(Cache Coherence Protocols)的发展过程
  • LangChain4j:基于 SSE 与 Flux 的 AI 流式对话实现方案
  • Honor of Kings 100star (S40) 2025.08.16
  • 11-verilog的RTC驱动代码
  • 10-verilog的EEPROM驱动-单字节读写
  • OpenCV安装及配置
  • 机器学习核心概念精要:从定义到评估
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践222
  • 利用 Java 爬虫按图搜索淘宝商品(拍立淘)实战指南
  • AirReceiverLite:轻松实现手机隔空投屏
  • [typescript] interface和type有什么关系?
  • Spark 数据分发性能深度剖析:mapPartitions vs. UDF – 你该选择哪一个?
  • 矩阵链相乘的最少乘法次数(动态规划解法)
  • KVM虚拟化技术解析:从企业应用到个人创新的开源力量
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • AutoDL使用学习
  • 第二十八节 业务代表模式
  • Custom SRP - Baked Light
  • tree组件(几种不同分叉树Vue3)
  • Qt QDateTime时间部分显示为全0,QTime赋值后显示无效问题【已解决】
  • 从零开始大模型之实现GPT模型
  • 黑板架构详解
  • Wi-Fi 7 将如何重塑互联工作场所
  • 链式二叉树的基本操作——遍历
  • 《从入门到高可用:2025最新MySQL 8.0全栈速通指南》
  • docker-compose-mysql-定时备份数据库到其他服务器脚本