← Назад к ресурсам

ProbeJS Legacy

Unofficial continuation of ProbeJS for versions abandoned by official ProbeJS

Modrinth library utility

Описание

# ProbeJS Legacy is an unofficial continuation of ProbeJS for KubeJS versions abandoned by official ProbeJS. ## Usage 1. You need to install ProbeJS Legacy, obviously. 2. Enter a singleplayer world. Use `/probejs dump` to export datas gathered by ProbeJS Legacy. For first-time users, this will be done automatically when you join the world. 3. Open your game instance folder using VSCode. 4. Enjoy! Note0: type `@item` or `@block_tag` to see snippets generated. Note1: game instance folder is where you can see the `kubejs` folder directly. Note2: Other IDEs with support for TypeScript typing (.d.ts) should also work. ## New Features (Compared to ProbeJS) - Simulated `Internal` - ProbeJS Legacy will now generate a `Internal` namespace, allowing users to migrate from ProbeJS 6 or ProbeJS Legacy 3 easily. - Example: `Internal.ItemStack` and `Internal.ItemStack_` - Better Param Naming - Param names that conflict with TypeScript will now be renamed in a better way. - Param names in Method/Constructor, if in `arg123` format, will be renamed to a new name generated from its type. Example: ```typescript "mayUseItemAt"(arg0: $BlockPos$$Type, arg1: $Direction$$Type, arg2: $ItemStack$$Type): boolean ``` will be renamed to ```typescript "mayUseItemAt"(blockPos0: $BlockPos$$Type, direction1: $Direction$$Type, itemStack2: $ItemStack$$Type): boolean ``` - Better `$Class` - ProbeJS will transform `$Class` into `typeof T`, but ignoring many conditions where this should not be done. ProbeJS Legacy makes it more correct. - Some basic classes, for example `java.lang.String` and `java.lang.Character`. can now be dumped. - The `T` in `$Class` is now actually usable for type hint. - better `instanceof` - ProbeJS Legacy can now properly support `obj instanceof $SomeClass`, where `$SomeClass` is a class loaded via `java(...)` or `Java.loadClass(...)`. Example: ```js const $BoatItem = java("some.path.to.BoatItem") let item = Item.of("boat").item; // here the type of `item` is `$Item` if (item instanceof $BoatItem) { // here the type of `item` can be inferred to `$BoatItem` } ``` - Field Beaning - Some fields will be transformed into getter+setter, in order to provide better support for TypeWrapper - Consider a `obj` with a field like this: `block: $Block`, and `obj.block = "minecraft:stone"` is a valid syntax in KubeJS. This had no typing support before, but now ProbeJS Legacy can support it properly. - Typing files sharing - By extracting common parts in dumped classes, the total typing files size can be much smaller than before. - Another benefits is that TS server can now reuse common typings between 3 script types, improving IDE performance. - Better comment formatting - blank lines at the front/back will now be ignored - comments will be formatted as one line if there's only one valid line - Side only methods (marked by `@OnlyIn`) will have comments telling you that it's server-only or client-only. - `xxx.d.ts` file with too many modules in it will now be split into smaller files automatically, providing better IDE performance - Method/Field in declaration files are now naturally sorted. - `gloabl` resolving: values you put into `global` can be resolved now. Configure resolving depth via `'global' Resolving Depth` config. - And many internal changes. This Readme will certainly be too long if I write them all down. ## Collecting data ### KubeJS Event For 1.16.5, ProbeJS Legacy will record all posted event. If you're unable to find some common events, try triggering it before dumping data. Example: `block.place` event is triggered by placing a block. For 1.20.1, all registered KJS events will be dumped automatically, no need for triggering. ### Forge Event ProbeJS Legacy will record all Forge events, regardless of whether they have been posted or not. This behaviour can be altered via `Class Scanner` config. ### Java Classes ProbeJS Legacy will use multiple approaches for collecting Java classes. These classes will be recorded: - Classes loaded manually, aka those loaded via `java(...)` or `Java.loadClass(...)` - Classes referenced by JS bindings, for example `AABB` and `Text`. - Classes references by known classes, for example `Item.class` referenced by `ItemStack.class`. - Registry objects, for example `BoatItem` for vanilla boats. By default this will skip non-vanilla objects, and can be altered via `Registry Object Filter` config. - Classes from certain mods. See `Mods with forced Full Scanning` config. - Classes read from cache file. The cache file is saved to `/.probe/classes.txt`. - Classes found by class scanner. See `Class Scanner` config. ## Why Initially, all I want to do is just find some sort of doc or helper for KubeJS script writing, so that I won't need to feel such pain in the arse when developing Enlightend6Expert([https://www.curseforge.com/minecraft/modpacks/enlightened-6-expert](https://www.curseforge.com/minecraft/modpacks/enlightened-6-expert)) . But after some research, I realized that 1.16.5, despite being one of the hottest modded versions, didn't even have a proper KubeJS helper mod. So there it is, a ProbeJS fork for 1.16.5. This is my first Java project and first Minecraft Mod project, and to be honest, ProbeJS is too tough for a coding noob like me. Thankfully I made it. This project is licensed under LGPLv3, the same as the original ProbeJS.