
OpenJavascript
Create custom menus, commands, plugins, systems, basically anything with scripts in Javascript! With multithreading and Folia support! Everything is fully documented in the documentation!

General Fixes & Improvements
- Scripts run more than 2.5 times faster than in previous versions now! No changes needed, just update!
- You can convert scripts (scriptPacks) into plugins now!
- Added support for minecraft version 26.1
- Reviewed and fixed numerous bugs across the entire codebase.
- Added a debug mode boolean to the config for easier troubleshooting.
- Fixed a bug where reloading with the reload command would not update the debug mode boolean until a full restart.
- Fixed an issue where deleting folders inside the script folder was not possible due to the file watcher locking them.
- Removed all deprecated code and cleaned up a large portion of the codebase.
Dialog API
- Created a new DialogApi for managing in-game graphical dialogs.
Task API
- Tasks are now shared across all scripts, meaning they can be cancelled from external scripts using
setSharedandgetShared. - Added
task.latch()which returns an object with the following thread-safe methods:.destroy(),.connect(function),.wait(),.invoke(),.fire(), and.invoked. - Added
task.threadType()which returns a string indicating the thread type (main,async, orsync). - Enhanced thread safety in
DelayTaskby properly handling thread interruptions.
FileManager API
- Added
FileManager.getPath(File), which returns the relative path of a file based on the script's folder. - Added support for ZIP files: any
.zipfile containing aninfo.jsonwill automatically be extracted into a folder named after the zip file. - Fixed a bug where the file watcher could receive
nullpaths, causing errors. - Improved watcher robustness by handling
OVERFLOWevents and adding a null check for the watch service when clearing listeners. This fixed many errors with the file listener, its more reliable now
ProtocolLib Integration
- Added the following new ProtocolLib methods:
broadcastServerPacket(packet, source, broadcastRange)broadcasts a packet to nearby players.sendServerPacket(player, packet)sends a packet directly to a specific player.createPacket(packetTypePath)creates a packet by type path.
PlaceholderAPI
- Fixed
parseStringnot working correctly when passing an offline player as the target.
Inventory API
- Added the following new methods:
getSlot(slot)retrieves the item in a given slot.setItemLore(slot, lore)sets the lore of an item in a slot.setItemName(slot, name)sets the display name of an item in a slot.
- Fixed colors not being applied correctly in item lore.
- Added backwards compatibility for
Inventory.setTitlevia ProtocolLib.
Service Objects & Internal Refactoring
- Refactored Folia support initialisation for improved performance, including a centralised
init()method and pre-cached scheduler. - Refactored
setShared()&getShared(), replacing complex lock logic with a simpler and saferwait()/notifyAll()approach. - Optimised script preprocessing to read from
CODE_CACHEfirst, avoiding unnecessary disk reads. - Switched import ID generation in
importJavaToJsGCfrom random strings to anAtomicLongcounter (__import_0,__import_1, ...) for better performance. - Added player permission verification (
openjs.use) at the start ofonCommandto prevent unauthorised command execution. - Added
Array.from()support. - Created custom mappings to support Minecraft 1.13 through the current version.
- Fixed
importClass()it now correctly translates Java classes into Javascript objects - Fixed
Java.type()it can now correctly read and translate external plugin classes too! This is huge, trust me :)
Thank you, guys, for downloading this plugin. I’ve poured my heart and a lot of passion into this project 💚
Нет описания изменений
Alpha Build - Use at your own risk! Full release soon!
Changelog
General Fixes & Improvements
- Reviewed and fixed numerous bugs across the entire codebase.
- Added a debug mode boolean to the config for easier troubleshooting.
- Fixed a bug where reloading with the reload command would not update the debug mode boolean until a full restart.
- Fixed an issue where deleting folders inside the script folder was not possible due to the file watcher locking them.
- Removed all deprecated code and cleaned up a large portion of the codebase.
Dialog API
- Created a new DialogService for managing in-game graphical dialogs.
- Added NMS support for the Dialog API.
- Added backwards compatibility for
Inventory.setTitlevia ProtocolLib.
Task API
- Tasks are now shared across all scripts, meaning they can be cancelled from external scripts using
setSharedandgetShared. - Added
task.latch()which returns an object with the following thread-safe methods:.destroy(),.connect(function),.wait(),.invoke(),.fire(), and.Fired. - Added
task.threadType()which returns a string indicating the thread type (main,async, orsync). - Enhanced thread safety in
DelayTaskby properly handling thread interruptions.
FileManager API
- Added
FileManager.getPath(File), which returns the relative path of a file based on the script's folder. - Added support for ZIP files: any
.zipfile containing aninfo.jsonwill automatically be extracted into a folder named after the zip file. - Fixed a bug where the file watcher could receive
nullpaths, causing errors. - Improved watcher robustness by handling
OVERFLOWevents and adding a null check for the watch service when clearing listeners. This fixed many errors with the file listener, its more reliable now
ProtocolLib Integration
- Added the following new ProtocolLib methods:
broadcastServerPacket(packet, source, broadcastRange)— broadcasts a packet to nearby players.sendServerPacket(player, packet)— sends a packet directly to a specific player.createPacket(packetTypePath)— creates a packet by type path.
PlaceholderAPI
- Fixed
parseStringnot working correctly when passing an offline player as the target.
Inventory API
- Added the following new methods:
getSlot(slot)retrieves the item in a given slot.setItemLore(slot, lore)sets the lore of an item in a slot.setItemName(slot, name)sets the display name of an item in a slot.
- Fixed colors not being applied correctly in item lore.
Service Objects & Internal Refactoring
- Refactored Folia support initialisation for improved performance, including a centralised
init()method and pre-cached scheduler. - Refactored
PublicVarManager's waiting mechanism, replacing complex lock logic with a simpler and saferwait()/notifyAll()approach. - Optimised script preprocessing to read from
CODE_CACHEfirst, avoiding unnecessary disk reads. - Switched import ID generation in
importJavaToJsGCfrom random strings to anAtomicLongcounter (__import_0,__import_1, ...) for better performance. - Added player permission verification (
openjs.use) at the start ofonCommandto prevent unauthorised command execution. - Added
Array.from()support. - Created custom mappings to support Minecraft 1.13 through the current version.
- Fixed
importClass()it now correctly translates Java classes into Javascript objects - Fixed
Java.type()it can now correctly read and translate external plugin classes too! This is huge, trust me :)
This release is just a hotfix, containing crucial fixes and new features.
General Fixes & Improvements
- Migrated from Nashorn 15.6 to 15.7 for better JavaScript compatibility and performance.
- Reduced plugin file size by
~1,000KBthrough code cleanup and a complete rewrite of theUpdateChecker. - Fixed an error where
task.bindToUnloadwould crash because the plugin attempted to schedule tasks during the shutdown sequence. - Resolved a
ConcurrentModificationExceptionthat occurred when destroying an inventory immediately upon a player closing it.
Custom-Menus Api Updates
- Menu.setTitle(String): Added the missing
setTitlemethod. - Setting any Menu/Inventory slot to
nullnow automatically converts it to Air instead of throwing a null pointer error.
FileManager Api Updates
The
FileManagerservice has received a few new methodsNew Methods:
getFile(path): Retrieves a specific file.removeFile(path): Deletes a file.getFolder(path): Retrieves a directory.removeFolder(path): Deletes a directory and its contents.getFiles(path): Returns an array of all files within the specified folder.
FileManagerpath prefixes for easier navigation:..(Parent Directory): Jump up one level out of the current folder./(Script Root): Quickly reference the directory where your script is currently located.- Example:
FileManager.getFiles("/");returns everything in the script's local folder.
Improvements
- Fixed DiskApi issues that caused unexpected behavior
- DiskApi now removes datastore entries when values are
NULL - DiskApi now persists active files on script reload
- Fixed rare ConcurrentModificationException issues when:
- Registering commands
- Syncing commands
- Improved error handling: script exceptions now log as ERROR instead of WARN
- All scripts now unload before any other shutdown logic
- Scripts unload asynchronously on the main thread, allowing tasks to finish safely
Additions
- Completely rewritten script management & I/O system
- Significantly reduces unnecessary disk operations
- Added official folder support for scripts
- Scripts are automatically loaded when added while the server is running
- Added requireScript
- Introduced global
[script]class - Fixed scripts failing to load via command due to parsing errors
- Added
task.bindToUnload(function)to register unload handlers - Yielding operations now block unload until execution completes
- Cache behavior improved:
- Cache drops only after I/O operations complete
- Fully handled automatically by scripts
APIs & Services improvements
-
Introduced Services API
- ProtocolLib and PlaceholderAPI are now service-based
-
PlaceholderAPI improvements:
- Fully thread-safe (fixes random unregister issues)
- OfflinePlayer support
- Parsing support for offline players
-
Added FileSystem Service
-
Added InventoryApi service for simplified menu & inventory management
-

Commands & Runtime fixes
- Refactored addCommand / registerCommand
- Added
removeCommand(commandName)- Allows scripts to override existing plugin commands
Deprecations
- Added
importClass()for runtime class importing - Deprecated
//!import xxx.xxxin favor ofimportClass() - Deprecated feature flags / service flags
Configuration & Automation
- Added
autoReloadScriptsconfig option- Toggle automatic reload when scripts change or are added
Threading & more Folia Support
- Added
task.thread(function)for parallel execution- This means you can multithread scripts on non-Folia servers now
- Services and PlaceholderAPI are now fully thread-safe
Documentation
- Added "Advanced Guides" section that also explains how to use the new folder support
- Reconstructed everything to find APIs and Methods faster
- Added 3 new example scripts: Food Bait, Nuke Menu and Spawn Menu
- All old example scripts have been updated to use the latest non deprecated methods
OpenJS v1.2.0
Major Changes
- Added official internal support for ProtocolLib
- Introduced BridgeEngine system for external plugin bridges
- Task library now supports creating Java listeners/proxies from scripts
- Universal cleanup system for listeners and proxies
- PlaceholderAPI support now lazy-loads for better performance
- Ported PlaceholderAPI integration to the new BridgeEngine system
Fixes
- Commands now properly unregister
- Fixed placeholders being unregistered after PlaceholderAPI reload
- Fixed
nullFailed to unregister all script commandserror - Fixed missing script source name in rare ghost error cases
- Fixed missing tab-completion for the
versioncommand
Optimizations
- Minimized IO operations during script loading
- Improved error catching to prevent script freezing
- Removed feature flag limitations
Additions
- Added removePlaceholder(String prefix) for scripts
- Added new commands:
/documentationand/page - Added missing unregisterEvent() method
Documentation
- Updated and extended documentation:
- Added missing entries: getMethod, removePlaceholder, ProtocolLib
- Split into cleaner sections to reduce clutter
- documented how to make scripts interact with external plugins
- added script example that modifies packets to create custom fluids
Sorry for the update delay, I'm currently working on my driving license.
Thanks for your patience and enjoy the update.Update Log
- Rewritten the async system for full Folia compatibility
- Now finally stable on Folia, a major milestone
- Introduced a new task library: simpler, more intuitive, and fully cross-platform compatible
- Added support for loading
.jarfiles directly into scripts - Upgraded from ECMAScript 5.1 to ECMAScript 6.0
(Modern JavaScript features are now available in OpenJS) - Implemented script security enforcement
- Completed documentation for all previously half-documented components
- added new example script that runs a local ai with the new features
- registerEvent can now take functions directly instead of having to put them in a array
We also have a dedicated server now
Need help or want to share your scripts?
Join our Discord for support and discussion
Small patch with new additions
-
Fixed Schedules not unregistering on Folia Servers
-
Fixed Plugin breaking if PlaceholderApi is not installed
-
Fixed /oj reload command on Folia servers
-
Added Bstats opt-out option in the configuration file
-
Fixed a few weird errors that only occurred on Folia servers
-
Fixed the no hit cooldown example script causing errors
-
Added 2 new example scripts: hitstand script & Knockback-stick script to the documentation
-
Fixed Bstats silently failing to load on Folia servers
-
OpenJS Update 1.0.6
-
A Wiki for OpenJS has been created. Everything is documented from the ground up, although it is not yet fully complete.
-
Added official PlaceholderAPI support.
-
Introduced a new DiskAPI system for loading and saving files.
-
Added a permission system for custom commands.
-
Fixed an issue where custom commands were not appearing.
-
Fixed scheduling not working correctly.
-
Deprecated getVar and setVar due to a memory leak, in favor of the new DiskAPI.
-
Нет описания изменений

