
ChatTriggers is a framework for Minecraft that allows for live scripting and client modification using JavaScript.
For Users
Simply find modules you wish to use, and then import them in-game. It's as easy as that!
The 3.0.0 beta for newer versions of Minecraft is just that, a beta. There are very few modules updated to use it.
For Developers
We provide libraries, wrappers, objects and more to make your life as a modder as easy as possible. Even without the proper wrapper, you can still use exposed Minecraft methods and variables but you will need knowledge of FML mappings. The entire ChatTriggers engine is built on our custom fork of Rhino using Java 8.
All Versions
+ Add Version- Fix certificate issue on older Java versions that caused issues with importing (@MisterCheezeCake)
- Fix modules sometimes evaluating twice when imported from different locations
- Fix trigger priorities sometimes not working correctly (@camnwalter)
- Color required modules gray in the
/ct modulesmenu (@NoahTheNerd)
- Completely revamped the
ScoreboardAPI to be more ergonomic Scoreis now mutable, and many methods have been added. Check the docs for more info- Added
PlayerInteractionto provided libs - Added MIT license
- Added CT module list to crash reports
- Added a typings generator that produces a TypeScript definition file for the mod (see attachments)
- Added support for targeting non-Minecraft classes when using mixins
- Added
entityDamageandentityDeathtriggers - Fixed a bunch of misc bugs
- Disallow cancelling
playerInteracttrigger if the action isBreakBlock - Calling
.register()on a trigger more than once will now do nothing TextComponentnow mirrors/tellrawwith respect to click and hover event values
- Console now prints error causes where applicable
- Fix a few more edge cases with
KeyBind - Fix
Shaperendering being offset by the player's position - Completely rewrite
TextComponent - It is now immutable and much more developer-friendly. See the docs for more details
- Removed
Message;TextComponentnow containschat()/actionBar()/chatLineId/etc - Fix not parsing JS files as UTF-8
- Add a
ToastAPI, which can be used to display toasts (the thing that pops up in the top right when you get an advancement) - Re-add ModMenu support
- Fix
Renderer.drawCircle()causing crashes - Fix needing to call
Renderer.rotateToCamera/translateToPlayer - Fix
CommandsAPI not converting Java objects to JS values - Fix a bunch of mapping errors
- Fix
Guibuttons not being clickable and add functions to set their text and tooltip - Fix various
KeyBindissues - Fix not being to colorize
Item's rendering - Fix
ChatLib.chat()triggering chat triggers - Fix
/ct fileson MacOS - Fix
TextComponentnot parsing its actions correctly - Add
TextComponent.setColor() - Add ability for
Commandsto redirect to the vanilla MC command dispatcher viaCommands.redirect(Commands.getDispatcherRoot() - Add
Renderer.lineWidth()
- Fix
Renderer.drawCircle()causing crashes - Fix needing to call
Renderer.rotateToCamera/translateToPlayer - Fix
CommandsAPI not converting Java objects to JS values - Fix a bunch of mapping errors
- Fix
Guibuttons not being clickable and add functions to set their text and tooltip - Fix various
KeyBindissues - Fix not being to colorize
Item's rendering - Fix
ChatLib.chat()triggering chat triggers - Fix
/ct fileson MacOS - Fix
TextComponentnot parsing its actions correctly - Add
TextComponent.setColor() - Add ability for
Commandsto redirect to the vanilla MC command dispatcher viaCommands.redirect(Commands.getDispatcherRoot() - Add
Renderer.lineWidth()
- Add 1.20.2 support
- Rhino now treats java.util.Collection objects as JS arrays
- Rhino now convert Java boxed-primitive classes to their JS equivalent primitives (i.e. converting java.lang.String into a JS string instead of a new String())
- Fix Renderer.drawLine() treating newlines incorrectly
- Fix colors not working correctly in Renderer
- Fix Renderer3d.drawString() not showing through walls (also added a parameter to control that behavior)
- Fix Renderer text not scaling properly
- Fix Inventory.getItems() sometimes causing an NPE
- Fix the CT console keybinding getting reset every time the game is launched
- Change the way
serverConnect/serverDisconnect/worldLoad/worldUnloadtrigger with respect to each other. See [this commit](https://github.com/ChatTriggers/ctjs/commit/03a69cb27ccfcba773a59734108f71f32afd18ca) for more details. - Remove the general console. If you need to see chat messages for criteria, use /ct dump
- Add 1.20.2 support
- Rhino now treats java.util.Collection objects as JS arrays
- Rhino now convert Java boxed-primitive classes to their JS equivalent primitives (i.e. converting java.lang.String into a JS string instead of a new String())
- Fix Renderer.drawLine() treating newlines incorrectly
- Fix colors not working correctly in Renderer
- Fix Renderer3d.drawString() not showing through walls (also added a parameter to control that behavior)
- Fix Renderer text not scaling properly
- Fix Inventory.getItems() sometimes causing an NPE
- Fix the CT console keybinding getting reset every time the game is launched
- Change the way
serverConnect/serverDisconnect/worldLoad/worldUnloadtrigger with respect to each other. See [this commit](https://github.com/ChatTriggers/ctjs/commit/03a69cb27ccfcba773a59734108f71f32afd18ca) for more details. - Remove the general console. If you need to see chat messages for criteria, use /ct dump
- Add 1.20.2 support
- Rhino now treats java.util.Collection objects as JS arrays
- Rhino now convert Java boxed-primitive classes to their JS equivalent primitives (i.e. converting java.lang.String into a JS string instead of a new String())
- Fix Renderer.drawLine() treating newlines incorrectly
- Fix colors not working correctly in Renderer
- Fix Renderer3d.drawString() not showing through walls (also added a parameter to control that behavior)
- Fix Renderer text not scaling properly
- Fix Inventory.getItems() sometimes causing an NPE
- Fix the CT console keybinding getting reset every time the game is launched
- Change the way
serverConnect/serverDisconnect/worldLoad/worldUnloadtrigger with respect to each other. See [this commit](https://github.com/ChatTriggers/ctjs/commit/03a69cb27ccfcba773a59734108f71f32afd18ca) for more details. - Remove the general console. If you need to see chat messages for criteria, use /ct dump
- Added a new
/ct migratecommand which can handle most incompatibilities when upgrading - Reverted previous merger of
RendererandTessellator, butTessellatorhas been renamed toRenderer3d. It does not necessarily have the same API, as it now holds 3D-only methods. - Fixed a few obscure Mixin issues
- Removed the
parameterNameoption in various Mixin objects, since it will never work outside of a dev environment - Stop converting Java
Collections to JS arrays. This allowsCollectionobjects coming from Java to be modified - Fix
Scoreboard.getLines()returning empty strings - Also made scoreboard functions return
TextComponentinstead ofstring - Fix custom KeyBinds not being persistent between game launches and sometimes causing crashes
- Fix
Item.getLore()triggering the Fabric tooltip event - Fix calling
.trigger()on a custom trigger at the top level not working - Fix
messageSentnot propogating the leading/character if the message was a command
- Added a new
/ct migratecommand which can handle most incompatibilities when upgrading - Reverted previous merger of
RendererandTessellator, butTessellatorhas been renamed toRenderer3d. It does not necessarily have the same API, as it now holds 3D-only methods. - Fixed a few obscure Mixin issues
- Removed the
parameterNameoption in various Mixin objects, since it will never work outside of a dev environment - Stop converting Java
Collections to JS arrays. This allowsCollectionobjects coming from Java to be modified - Fix
Scoreboard.getLines()returning empty strings - Also made scoreboard functions return
TextComponentinstead ofstring - Fix custom KeyBinds not being persistent between game launches and sometimes causing crashes
- Fix
Item.getLore()triggering the Fabric tooltip event - Fix calling
.trigger()on a custom trigger at the top level not working - Fix
messageSentnot propogating the leading/character if the message was a command
- Ensure top-level code runs in a consistent order. If module A requires module B, module B's entry file will be ran before module A's entry file. It is now an enforced error to have circular module requirements.
- Add middle clicks to
CPS - Fixed interface methods not being remapped
- Fixed
Scoreboardnot updating when the scoreboard changes - Fixed a bunch of
Soundissues - Fixed a
ConcurrentModificationExceptionwhen constructing anImage - Fixed console being extremely unreliable
- Fixed
serverConnecttrigger using the wrong trigger class (causing error) as well as firing when joining a single player world
- Ensure top-level code runs in a consistent order. If module A requires module B, module B's entry file will be ran before module A's entry file. It is now an enforced error to have circular module requirements.
- Add middle clicks to
CPS - Fixed interface methods not being remapped
- Fixed
Scoreboardnot updating when the scoreboard changes - Fixed a bunch of
Soundissues - Fixed a
ConcurrentModificationExceptionwhen constructing anImage - Fixed console being extremely unreliable
- Fixed
serverConnecttrigger using the wrong trigger class (causing error) as well as firing when joining a single player world
- Added extra parameter to
Image.fromUrlto control the cached image name - Added
FileLib.{encodeBase64,decodeBase64}(@Debuggingss) - Added
Gui.register{Opened,Closed}(@DalwynWasTaken) - Added
Player.isMoving(@realfork) - Added ability to filter the class type using
.setFilteredClass(Class)for the following triggers:renderEntity,postRenderEntity,renderTileEntity,postRenderTileEntity(@Marvinschs) - Added a top-level
NBThelper to make parsing NBT easier (@camnwalter) - Added
KeyBind.{unregisterKeyPress,unregisterKeyRelease,unregisterKeyDown}()(@Marvinschs) - Added
Display.{unregisterClicked,unregisterHovered,unregisterMouseLeave,unregisterDragged}()(@Marvinschs) - Added ability to pass
Class<*>objects which inherit from Forge'sEventclass into the first parameter ofregister. This allows you to register for arbitrary events. - Show module dependencies on the module graph GUI (@camnwalter)
- Fixed step trigger firing a bunch of extra times when registering it after a call to unregister.
- Fixed links in
TextComponentinstances not being clickable (@camnwalter ) - Fixed
ChatLib.saynot triggeringmessageSent(@Debuggingss) - Fixed not being able to
/ct loadafter a/ct unload(@camnwalter) - Fixed not having to manually
/ct loadafter importing a module with a .jar file (@camnwalter)