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).

