📄
XPlus KubeJS Tutorial v1 (zh_cn)
  • 前言
    • 本文更新日志
  • 一、一切的开始
    • 1.1 常用指令
    • 1.2 文件结构
    • 1.3 脚本基础
    • 1.4 事件列表
  • 二、配方
    • 2.1 新建配方及物品表示
    • 2.2 配方的修改和删除
    • 2.3 非标准配方修改
  • 三、自定义修改初步
    • 3 标签
    • 4 自定义Loot Table
    • 5 自定义流体
    • 6 自定义世界生成
    • 7 添加方块
    • 10:自定义窗口标题和logo
  • 四、事件初步
    • 8 聊天事件
    • 9 计划重启
  • 五、针对其他模组的修改
    • 11.1 JEI信息修改
    • 11.2 REI信息修改
    • 11.3 FTB Quest相关修改
    • 11.4 KubeJs内置游戏阶段 (类似于GameStage)
  • 六、拓展模组简介
    • 12.1 KubeJS Create
    • 12.2 KubeJS Blood Magic
    • 12.3 KubeJS Mekanism
    • 12.4 KubeJS UI
    • 12.5 KubeJS Termal
    • 12.7 便捷战利品表修改(LootJS Forge)
    • 12.8 LootJS战利品表修改实例
  • 七、游戏内容修改进阶
    • 13 自定义物品和物品ToolTip
    • 14 方块和物品属性修改
  • 八、事件进阶
    • 15.0 事件列表
    • 15.1 玩家&实体事件,信息获取及操作
    • 15.2 实体生成 & RayTraceResultJS & ItemStackJS及其他
    • 15.3 方块信息获取及操作
    • 15.4 WorldJS 和 ServerJS
    • 15.5 本章例子
    • 15.6 测试用例
  • 九、杂项
    • 16 网络包和Painter API
    • 17 本地化相关
    • 18.1 熔炼之镐
    • 18.2 罐头示例(包含物品注册, 配方添加, 玩家交互和persistentData的使用)
    • 19 Forge事件监听
  • 十、1.18.2的变化和介绍
    • 20 1.18.2中的变化和功能
    • 20.1 ProbeJS
    • 20.2 组件(Component)的使用
    • 20.3 格式变化
      • 20.3.1 世界生成
      • 20.3.2 方块 / 物品注册
      • 20.3.3 事件
      • 20.3.4 global[] 的使用
    • 20.4 命令注册
    • 20.5 反射与Java access
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. 九、杂项

19 Forge事件监听

上一页18.2 罐头示例(包含物品注册, 配方添加, 玩家交互和persistentData的使用)下一页20 1.18.2中的变化和功能

这有帮助吗?


KubeJS提供了很多事件,但相较于Forge依旧不够全面。因此,KubeJS提供了 onForgeEvent 用于监听 Forge 事件。

一、准备工作

为便于编写事件,你需要先在你的电脑上部署Forge开发环境。

  • 下载并安装

  • 下载Forge MDK

  • 右键解压后的文件夹,选择"Open Folder as lntelliJ IDEA Project",在弹出的窗口中选择"Trust Project",之后IDEA应该会自动配置开发环境。该过程会从Mojang,MinecraftForge等站点下载资源,可能速度较慢。

    • 若下载多次出现问题可以尝试使用。

    • 尝试

  • 安装插件。

二、监听事件

你可以在IDEA中按下Ctrl + N快捷键搜索Forge事件,所有net.minecraftforge.event下的事件均可被监听,以监听玩家改变维度事件为例:

onForgeEvent("net.minecraftforge.event.entity.player.PlayerEvent$PlayerChangedDimensionEvent", event=>{
    console.info("PlayerChangedDimensionEvent 触发")
})

Forge事件下的所有方法都可以被调用,例如此处获取玩家从哪里来又到哪里去:

onForgeEvent("net.minecraftforge.event.entity.player.PlayerEvent$PlayerChangedDimensionEvent", event=>{
    console.info(event.getFrom())
    console.info(event.getTo())
})

此时触发事件,日志中会打印出世界的RegistryKey(形如" ResourceKey[minecraft:dimension / minecraft:the_nether]"),如果我们只想要获取世界ID,应该调用RegistryKey下的getLocation()方法。

通过查询可以获得RegistryKey下的getLocation()对应的SRG Name是func_240901_a_():

onForgeEvent("net.minecraftforge.event.entity.player.PlayerEvent$PlayerChangedDimensionEvent", event=>{
    console.info(event.getFrom().func_240901_a_())// getLocation()
    console.info(event.getTo().func_240901_a_())
})
// 返回 minecraft:the_nether 和 minecraft:overworld

现在我们要将该消息发送给玩家,根据上文同理可得:

onForgeEvent("net.minecraftforge.event.entity.player.PlayerEvent$PlayerChangedDimensionEvent", event=>{
    // PlayerEntity.func_146105_b -> PlayerEntity.sendStatusMessage
    event.player.func_146105_b("你来到了" + event.getTo().func_240901_a_(), false)
})

KubeJS添加了方法.asKJS(),通过该方法你可以将部分支持的Minecraft类转换为KubeJS中等价的方法(比如Player和ItemStack等),便于编写事件。

则上述代码可改写为:

onForgeEvent("net.minecraftforge.event.entity.player.PlayerEvent$PlayerChangedDimensionEvent", event=>{
    event.player.asKJS().tell("你来到了" + event.getTo().func_240901_a_())
})

通过直接监听Forge事件可以解决一些KubeJS中的老大难问题,比如监听玩家重生事件或者读取键盘输入等。

**当调用Minecraft类中的方法等内容时,你应该使用其SRG Name而不是IDE中看到的名称。**在IDEA中右键方法,选择"Get SRG Name"即可快捷获取方法的SRG Name。(也可通过)

网站查询
IntelliJ IDEA
离线开发包
设置代--理
Minecraft Development