A custom addon for NotEnoughUpdates that works on Lunar Client.
- Module System: Toggleable modules with keybind support
- Command System: Dot-prefix commands for easy control
- Config System: JSON-based config save/load with multiple profiles
- Event-Based: Uses Forge events for compatibility
Lists all available modules with their status (ON/OFF) and keybinds.
Bind modules to keys.
.bind <module> <key>- Bind a module to a key (e.g.,.bind test o).bind <module> none- Unbind a module.bind list- List all current keybinds.bind * <key>- Bind all modules to the same key
Toggle modules on/off.
.toggle <module>- Toggle a module.toggle <module> on- Turn on a module.toggle <module> off- Turn off a module
Manage configs.
.config save <name>- Save current config.config save- Save to default config.config load <name>- Load a config.config list- List all saved configs (click to load).config folder- Open config folder
A simple test module that sends "Hello World" to chat when toggled.
Usage: .bind test o then press 'O' to toggle
io.github.moulberry.notenoughupdate.coffeeclient/
├── CoffeeClient.java - Main initialization class
├── util/
│ ├── ChatUtil.java - Chat formatting utilities
│ └── KeyBindUtil.java - Keybind utilities
├── module/
│ ├── Module.java - Base module class
│ ├── ModuleManager.java - Module management
│ └── modules/
│ └── TestModule.java - Test module
├── command/
│ ├── Command.java - Base command class
│ ├── CommandManager.java - Command interception & routing
│ └── commands/
│ ├── CoffeeCommand.java - .coffee command
│ ├── BindCommand.java - .bind command
│ ├── ToggleCommand.java - .toggle command
│ └── ConfigCommand.java - .config command
└── config/
└── Config.java - JSON config save/load
- All code is in
io.github.moulberry.notenoughupdatespackage (required for net.minecraft access) - Uses Forge events instead of mixins (limited mixin support on Lunar)
- No external dependencies - uses NEU's existing dependencies
- Event-based architecture for maximum compatibility
- Initialization:
CoffeeClient.init()is called fromNotEnoughUpdates.preinit() - Command Interception:
CommandManagerlistens forGuiScreenEvent.KeyboardInputEvent.Preto intercept chat messages starting with "." - Keybind Handling:
ModuleManagerlistens forInputEvent.KeyInputEventto handle module keybinds - Config Storage: Configs are saved to
./config/CoffeeClient/as JSON files
- Create a new class extending
Modulein themodulespackage - Override
onEnabled()andonDisabled()as needed - Register the module in
CoffeeClient.registerModules()
Example:
public class MyModule extends Module {
public MyModule() {
super("MyModule", false);
}
@Override
public void onEnabled() {
ChatUtil.sendMessage("&aModule enabled!");
}
@Override
public void onDisabled() {
ChatUtil.sendMessage("&cModule disabled!");
}
}Based on the module/command system from OpenMyau by sakthic01.
Part of NotEnoughUpdates - See COPYING and COPYING.LESSER for license information.