6.1 (1.19.2)

预计阅读时间: 10 分钟

适用于 Minecraft 1.19.2 的重大更新

对于脚本和整合包开发者

  • 计划事件现在接受持续时间(特别是像 '200 t' 这样的字符串也适用于 tick 持续时间)来表示它们的延迟!

  • NetworkEvents.fromServerNetworkEvents.fromClient 已合并为 NetworkEvents.dataReceived,这将根据脚本类型处理来自对应侧的传入数据。

  • 注册表:event.custom(T) 现在是 event.createCustom(() => T),它接受一个供应商而不是直接对象,以避免可能提前加载它可能依赖的其他注册表元素。请注意,custom 仍然存在,但由于这个原因,强烈不鼓励使用它!

  • 事件 .cancel() 现在会退出事件块 - 这可能是一个小更改,但可能会影响一些脚本。以前它只会将事件标记为已取消,不做其他事情,但现在它也会像 return; 调用一样工作。

  • 添加了事件结果! 您现在对事件如何工作有更精细的控制,更接近它们在 Architectury/Minecraft 侧的处理方式!例如:

ItemEvents.rightClicked('minecraft:stick', event => {
  // (请注意,由于它们都立即返回,所以这些中只有一个会同时工作!)
  event.cancel() // 取消事件并防止点击生效
  event.success() // 取消事件并强制点击生效
  event.exit() // 取消事件而不设置结果
  // 在支持自定义结果(如物品堆栈)的事件中,您还可以执行以下操作:
  event.success('minecraft:apple') // 成功 + 结果是一个苹果 🍎
})

现在,这个新系统只在物品右键点击事件中活跃使用,但随着时间的推移将扩展到更多事件(当然不会破坏脚本,只是使用 event.cancel() 仍然可以正常工作)!

  • 大规模后端重写,大幅提高性能 - Lat 再次审查了配方事件并重新制定了解析配方的方式,同时修复了异步配方操作,因此如果一切按预期工作,您应该通常会注意到重新加载时间减少!在某些情况下,使用 KJS 的配方现在应该比仅使用原版加载得更快!

  • 不再有标签 workaround!(希望如此)- 我们修复了第一次世界加载时在配方事件期间解析标签成分的问题,并普遍改进了配方过滤器的工作方式,因此您应该不再需要使用 hacky 双重重新加载 workaround 了(请... 停止使用它们)

  • Forge 和 Fabric 上的注册表都已修复 - 我们已经解决了注册表事件的一些问题,因此您现在应该能够再次正确注册流体、模组注册表等。

  • 将 kubejs/logs 文件从 .txt 重命名为 .log - 因此您现在可以在 VSCode 等中进行格式化。

  • 修复了资源和数据包顺序 - 用户添加的资源包和数据包现在将位于 KJS 生成的包之上,因此您应该能够使用它们更改纹理和其他内容。

  • 添加了从 kubejs/data 和 kubejs/assets 加载 .zip - 您只需将 .zip 文件放入该文件夹中,它就会强制加载它(在 KJS 之上,在用户包之下)

  • debugInfo 配置kubejs/config/common.properties 移到了 local/kubejsdev.properties。不知道为什么它首先放在 common properties 中,它是一个用于开发者的调试配置。

  • 改进了 Platform.mods.modid.name = 'Custom Name' - 现在它应该能在 REI 和 ModNameTooltip 上与自定义模组 ID 一起工作。对于不存在的模组,您应该使用 Platform.getInfo('custom_mod_id').name = 'Custom Name'

  • 与 ProbeJS 更好的配方集成 - 由于 KJS 中的新架构系统,probe 能够更好地显示哪些成分属于哪里,更少的 hack!

  • .stage(string) 配方函数不再需要 Recipe Stages 才能工作。

  • 修复了 Fabric 上的流动流体纹理和其他流体相关问题。

  • 修复了日志中错误太长的问题 - 信不信由你,KJS 本来不应该为每个配方吐出 150 行错误。

  • 为...流体量添加了一个新的包装器 FluidAmounts 对于那些记不住制作一个桶需要多少块、锭和金粒的人,或者只是想让他们的脚本具有跨平台兼容性的人(因为 Fabric 使用“81000 滴”而不是“1000 mB”来进行更精确的流体测量)

  • 添加了自定义通知(toast) - 您可以使用 player.notify(title)(title, subtitle)(Notification.make(...))

  • 添加了 /kubejs reload config 命令 - 您不再需要重启游戏来更新配置!

  • 添加了 /kubejs packmode [mode] 命令 - 同上,但您完全不需要处理文件。

  • 添加了 /kubejs help 命令 - 游戏中直接提供的有用链接。

  • 移除了 /kjs_hand 命令 - 而是添加了 /kjs hand(带空格)重定向。有些人可能讨厌这个更改,但_比空格难按得多,我敢肯定您会很快习惯并更喜欢它。

  • 流体注册 .tag() 已修复 - 现在也会标记流动流体。

  • 您现在可以替换和匹配流体 - 您必须使用 Fluid.of('minecraft:water') 而不是纯字符串,但您可以在 {input: Fluid.of('minecraft:water')} 配方过滤器和支持的配方类型的 event.replaceInput('*', Fluid.of('minecraft:water'), Fluid.of('minecraft:lava')) 替换函数中使用它。

对于插件模组开发者

  • 配方系统的完整重写 - 配方现在使用配方架构,一个(几乎)完全替代旧 RecipeJS 对象的新系统。更多内容请见 Discord 公告

  • 事件现在有结果用于更精确地控制返回值,我们添加了一个 hasListeners() 检查以提高性能。对于您来说,最明显的更改将是您自己的事件也需要返回一个 EventResult

  • 修复了数据生成问题 - KJS 应该不再会在开发环境中让数据生成器永远不关闭游戏。我们真的生活在一个奇迹时代!

配方架构

来自公告:

这是大的那个。配方架构彻底改变了 KJS 中自定义配方处理器的注册方式,并且希望这也意味着未来您将需要更少的样板代码。每个配方现在由一个包含一组配方组件架构定义,这些组件充当底层值的“编解码器”。对于您来说,这意味着:

  • 而不是主要使用 RecipeJS 子类,您现在将需要定义一个RecipeSchema

  • 每个架构使用一组RecipeKeys,它们是命名的RecipeComponents,带有一些附加属性,如可选默认值和用于自动构造函数和方法生成的设置

  • RecipeComponent是一个配方元素(如输入/输出物品、流体,甚至只是一个数值)的可重用定义,它具有一个角色(输入、输出、其他)、一个描述(用于 ProbeJS 等插件模组)并包含(反)序列化和批量配方操作(即配方过滤和替换)的逻辑。在 dev.latvian.mods.kubejs.recipe.component 包中提供了许多标准组件,包括方块、物品和流体、通用组和逻辑组件(数组、映射、与、或),以及各种原语(包括数字范围和字符等专用组件)

  • 虽然配方架构默认生成构造函数,但您可以通过使用 constructor(factory, keys) 自己定义一个来覆盖此行为。请注意,这将停止生成默认构造函数,因此如果您想保留它,您将需要再次自己定义它。(复杂自定义配方构造函数的一个好例子是 ShapedRecipeSchema

  • 虽然架构在 java 端替代了RecipeJS,但在 JS 端,用户在创建后仍然传递一个RecipeJS对象,其中包含每个组件的额外自动生成的“构建器”方法,以允许用户在配方创建后设置例如可选值(例如 event.smelting(...).xp(20).cookingTime(100))。并且您可以添加更多属性或通过完全覆盖配方工厂来执行额外的加载后验证!

6.0 (1.19.2) - 适用于 Minecraft 1.19.2 的重大更新 7.0 (1.21) - 适用于 Minecraft 1.21 的重大更新