Katton
Next-generation scripting framework for Minecraft
Katton
<img width="1348" height="256" alt="20260226" src="https://github.com/user-attachments/assets/822f3883-23c9-4bde-88e1-e0a15bb16128" /> Katton is a powerful modding framework for Minecraft that allows you to use Kotlin scripts to create and modify game content. With hot-reloadable scripts, you can see your changes in real-time without needing to restart the game.
Katton supports both Fabric and NeoForge. We are trying to keep the API as consistent as possible between the two platforms, but there may be some differences in available events and features.
Why Katton?
- In-Game Management: Katton's intuitive API and hot-reload feature make it easy for modders of all skill levels to create and test their mods quickly. - In-Game Management: With Kotlin's powerful features, you can create complex mods that interact with Minecraft in unique ways. - In-Game Management: Katton uses Kotlin Scripts to directly interact with Java objects during the runtime of Minecraft, ensuring high performance and seamless integration. - In-Game Management: Katton provides a comprehensive API that allows you to access and modify various aspects of the game, from blocks and items to entities and world generation, even code injections like mixins, and In-Game Management. - In-Game Management: Manage your script packs through a built-in GUI (press K!), toggle packs on/off, and monitor registries with diagnostic commands — all without leaving the game.
A simple example:
```kotlin //nessary imports for the script import net.minecraft.network.chat.Component import top.katton.api.KattonEvents
// The function with @ServerScriptEntrypoint is the entry point of the script. @ServerScriptEntrypoint fun main(){ // Register an event listener for when a player joins the server KattonEvents.ServerPlayer.onPlayerJoin += onJoin@ fun(arg: KattonEvents.ServerPlayer.PlayerArg){ // Get the player who joined and send them a message val player = arg.player // As same as you would do in a normal mod! player.sendSystemMessage(Component.literal("Hello Katton")) } } ```