当前位置: 首页 > 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.xdnf.cn/news/1308781.html

相关文章:

  • 《C++进阶之继承多态》【多态:概念 + 实现 + 拓展 + 原理】
  • 超越“调参”:从系统架构师视角,重构 AI 智能体的设计范式
  • 嵌入式硬件篇---电感本质
  • VScode 使用遇到的问题
  • Git Revert 特定文件/路径的方法
  • 设计模式之【快速通道模式】,享受VIP的待遇
  • leetcode_ 739 每日温度
  • AI杀死的第一个仪式:“hello world”
  • C++设计模式:面向对象设计原则
  • B+树索引分析:单表最大存储记录数
  • Day2--滑动窗口与双指针--2090. 半径为 k 的子数组平均值,2379. 得到 K 个黑块的最少涂色次数,2841. 几乎唯一子数组的最大和
  • Windows 基于ACL(访问控制列表)的权限管理
  • Manus AI与多语言手写识别的技术突破与行业变革
  • 数学建模Topsis法笔记
  • 【php反序列化介绍与常见触发方法】
  • Bash常用操作总结
  • 9.从零开始写LINUX内核——设置中断描述符表
  • RK3568 NPU RKNN(五):RKNN-ToolKit-lite2板端推理
  • linux I2C核心、总线与设备驱动
  • Dify实战应用指南(上传需求稿生成测试用例)
  • 守护品质安全,防伪溯源系统打造全链路信任体系
  • MySQL异步连接池的学习(五)
  • 海康机器人3D相机的应用
  • Docker目录的迁移
  • OpenCV Python——图像拼接(一)(图像拼接原理、基础知识、单应性矩阵 + 图像变换 + 拼接)
  • Python爬虫实战:研究Scrapy Spiders ,构建豆瓣网电影数据分析处理系统
  • CSV 生成 Gantt 甘特图
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • 初识c语言————宏定义和调用
  • Trae中`settings.json`文件的Java配置项功能详解(一)