
ProbeJS Legacy
ProbeJS非官方延续,适用于官方ProbeJS已放弃的版本。
ProbeJS Legacy
是官方 ProbeJS 已放弃支持的 KubeJS 版本的非官方延续项目。
使用方法
- 显然,你需要安装 ProbeJS Legacy。
- 进入一个单人世界。使用
/probejs dump导出 ProbeJS Legacy 收集的数据。对于首次使用的用户,加入世界时会自动完成此操作。 - 使用 VSCode 打开你的游戏实例文件夹。
- 尽情享受吧!
注意0:输入 @item 或 @block_tag 可查看生成的代码片段。
注意1:游戏实例文件夹是指你能直接看到 kubejs 文件夹的那个目录。
注意2:其他支持 TypeScript 类型(.d.ts)的 IDE 应该也能正常工作。
新特性
(与 ProbeJS 相比)
模拟
Internal- ProbeJS Legacy 现在会生成一个
Internal命名空间,方便用户从 ProbeJS 6 或 ProbeJS Legacy 3 迁移。 - 示例:
Internal.ItemStack和Internal.ItemStack_
- ProbeJS Legacy 现在会生成一个
更完善的参数命名
- 与 TypeScript 冲突的参数名现在会以更好的方式重命名。
- 方法/构造函数中的参数名,如果是
arg123格式,将根据其类型生成的新名称进行重命名。
示例:
"mayUseItemAt"(arg0: $BlockPos$$Type, arg1: $Direction$$Type, arg2: $ItemStack$$Type): boolean
将被重命名为
"mayUseItemAt"(blockPos0: $BlockPos$$Type, direction1: $Direction$$Type, itemStack2: $ItemStack$$Type): boolean
更完善的
$Class<T>- ProbeJS 会将
$Class<T>转换为typeof T,但忽略了许多不应进行此转换的情况。ProbeJS Legacy 使其更加准确。 - 现在可以导出一些基础类,例如
java.lang.String和java.lang.Character。 $Class<T>中的T现在可以实际用于类型提示。
- ProbeJS 会将
更完善的
instanceof- ProbeJS Legacy 现在可以正确支持
obj instanceof $SomeClass,其中$SomeClass是通过java(...)或Java.loadClass(...)加载的类。
- ProbeJS Legacy 现在可以正确支持
示例:
const $BoatItem = java("some.path.to.BoatItem")
let item = Item.of("boat").item; // 这里 `item` 的类型是 `$Item`
if (item instanceof $BoatItem) {
// 这里 `item` 的类型可以被推断为 `$BoatItem`
}
字段属性化
- 某些字段会被转换为 getter+setter,以便为 TypeWrapper 提供更好的支持。
- 考虑一个具有如下字段的
obj:block: $Block,并且在 KubeJS 中obj.block = "minecraft:stone"是有效语法。这在以前没有类型支持,但现在 ProbeJS Legacy 可以正确支持。
类型文件共享
- 通过提取导出类中的公共部分,类型文件的总大小可以比以前小得多。
- 另一个好处是 TS 服务器现在可以在 3 种脚本类型之间复用公共类型,从而提升 IDE 性能。
更好的注释格式化
- 开头/结尾的空行现在将被忽略。
- 如果只有一行有效内容,注释将格式化为一行。
仅限特定侧的方法(由
@OnlyIn标记)将有注释提示它是服务端专用还是客户端专用。模块过多的
xxx.d.ts文件现在将自动拆分为较小的文件,从而提供更好的 IDE 性能。声明文件中的方法/字段现在会自然排序。
global解析:你放入global中的值现在可以被解析。可通过'global' Resolving Depth配置来设置解析深度。以及许多内部更改。如果我把它们全部写下来,这个 Readme 肯定会太长了。
数据收集
KubeJS 事件
对于 1.16.5,ProbeJS Legacy 会记录所有已发布的事件。如果你找不到某些常见事件,请在导出数据前尝试触发它。例如:block.place 事件通过放置方块来触发。
对于 1.20.1,所有已注册的 KJS 事件都会被自动导出,无需触发。
Forge 事件
ProbeJS Legacy 会记录所有 Forge 事件,无论它们是否已被发布。此行为可通过 Class Scanner 配置进行修改。
Java 类
ProbeJS Legacy 将使用多种方法来收集 Java 类。
将记录以下类:
- 手动加载的类,即通过
java(...)或Java.loadClass(...)加载的类。 - 被 JS 绑定引用的类,例如
AABB和Text。 - 被已知类引用的类,例如被
ItemStack.class引用的Item.class。 - 注册表对象,例如原版船只的
BoatItem。默认情况下会跳过非原版对象,可通过Registry Object Filter配置进行修改。 - 来自特定模组的类。参见
Mods with forced Full Scanning配置。 - 从缓存文件读取的类。缓存文件保存于
<你的实例文件夹>/.probe/classes.txt。 - 由类扫描器发现的类。参见
Class Scanner配置。
缘由
起初,我只想为 KubeJS 脚本编写找到某种文档或辅助工具,这样在开发 Enlightend6Expert(https://www.curseforge.com/minecraft/modpacks/enlightened-6-expert) 时就不会感到如此痛苦。 但经过一番研究,我意识到 1.16.5 尽管是最热门的模组版本之一,却连一个合适的 KubeJS 辅助模组都没有。 所以就这样了,一个面向 1.16.5 的 ProbeJS 分支。 这是我的第一个 Java 项目和第一个 Minecraft 模组项目,说实话,ProbeJS 对于像我这样的编程新手来说太难了。谢天谢地,我做到了。
本项目采用 LGPLv3 许可证,与原版 ProbeJS 相同。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。