ProbeJS Legacy
является неофициальным продолжением ProbeJS для версий KubeJS, не поддерживаемых официальным ProbeJS.
Использование
- Необходимо установить ProbeJS Legacy.
- Войти в однопользовательский мир. Используйте
/probejs dump
для экспорта данных, собранных ProbeJS Legacy. Для новых пользователей это выполняется автоматически при первом входе в мир. - Откройте папку экземпляра игры в VSCode.
- Наслаждайтесь!
Примечание0: введите @item
или @block_tag
для просмотра сгенерированных сниппетов.
Примечание1: папка экземпляра игры — это место, где можно напрямую увидеть папку kubejs
.
Примечание2: Другие IDE с поддержкой типизации TypeScript (.d.ts) также должны работать.
Новые возможности
(В сравнении с 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>
$Class<T>
корректно преобразуется вtypeof T
с учётом граничных условий.- Добавлена поддержка базовых классов (например,
java.lang.String
). T
в$Class<T>
теперь используется для подсказок типов.
Улучшенный
instanceof
- Корректная обработка
obj instanceof $SomeClass
для классов, загруженных черезjava(...)
илиJava.loadClass(...)
.
- Корректная обработка
Пример:
const $BoatItem = java("some.path.to.BoatItem")
let item = Item.of("boat").item; // тип `item` — `$Item`
if (item instanceof $BoatItem) {
// здесь тип `item` выводится как `$BoatItem`
}
Трансформация полей
- Некоторые поля преобразуются в геттеры/сеттеры для лучшей поддержки TypeWrapper.
- Пример: присвоение
obj.block = "minecraft:stone"
теперь имеет корректную типизацию.
Совместное использование типизаций
- Общие части классов выделяются в отдельные файлы, уменьшая общий размер типизаций.
- Улучшает производительность IDE за счёт повторного использования типов между скриптами.
Улучшенное форматирование комментариев
- Пустые строки в начале/конце игнорируются.
- Однострочные комментарии форматируются в одну строку.
Методы, помеченные
@OnlyIn
, содержат комментарии об ограничении по стороне (сервер/клиент).Большие файлы
xxx.d.ts
автоматически разделяются для улучшения производительности IDE.Методы и поля в файлах объявлений сортируются естественным образом.
Разрешение значений в
global
. Глубина настраивается через'global' Resolving Depth
.
Сбор данных
События KubeJS
Для 1.16.5: записываются все запущенные события. Если событие отсутствует, вызовите его перед дампом (например, поместите блок для block.place
).
Для 1.20.1: все зарегистрированные события KJS дампируются автоматически.
События Forge
Записываются все события Forge независимо от их вызова (настраивается через Class Scanner
).
Java-классы
Используются различные методы сбора классов. Записываются:
- Классы, загруженные вручную (
java(...)
,Java.loadClass(...)
). - Классы, используемые JS-привязками (например,
AABB
,Text
). - Классы, на которые ссылаются известные классы (например,
Item.class
черезItemStack.class
). - Объекты реестров (например,
BoatItem
). По умолчанию пропускаются неванильные объекты (настраивается черезRegistry Object Filter
). - Классы из определённых модов (см.
Mods with forced Full Scanning
). - Классы из кэш-файла (
<папка экземпляра>/.probe/classes.txt
). - Классы, найденные сканером (см.
Class Scanner
).