Documentation
Complete guides for Coder and all official addons
Coder Plugin
The Most Powerful Scripting Minecraft Plugin
Coder is a lightweight "Skript-like" plugin for Minecraft server automation. It allows you to create custom commands and logic without the bloat of traditional heavy scripting engines. By utilizing native Java/Python/Lua execution and a custom-built, simple syntax parser, Coder gives you full control over your server environment.
๐ Key Features
- Modern Skript Syntax: A clean, "Modern Skript" language designed for readability
- Native Execution: Execute real Java, Python, and Lua code directly from your server
- Lightweight: Minimal dependencies for maximum performance
- Memory Loading: Load scripts to server memory, ensuring they stay active
- Version Manager: Automatic alerts and version update tracking
- File System Integration: Full access to read/write files
- Task Scheduling: Delayed and repeating task execution
- Event System: React to server events and player actions
๐ฅ Installation
- Download
Coder.jarfrom the Releases page - Place the JAR in your
/plugins/folder - Restart your server to generate folder structure
- Check console for initialization message
Folder Structure Created:
/plugins/Coder/
โโโ scripts/ (Your .cd, .java, .py, .lua scripts)
โโโ config.yml (Configuration file)
โโโ JavaClasses/ (Compiled scripts)
โโโ data/ (Plugin data and variables)
โ๏ธ Basic Commands
| Command | Description | Permission |
|---|---|---|
/coder run <script> |
Execute a script from the scripts folder | coder.run |
/coder reload <script> |
Reload a script without server restart | coder.reload |
/coder load <script> |
Load script into memory | coder.load |
/coder unload <script> |
Unload script from memory | coder.unload |
/coder list |
List all available scripts | coder.list |
/coder update |
Check for and install updates | coder.admin |
๐ Security Warning
โ ๏ธ Important: Because Coder allows native Java, Python, and Lua execution, only allow trusted administrators to manage files in the /plugins/Coder/scripts/ directory. These scripts have full access to system commands and can execute arbitrary code on your server.
๐ Learning Resources
- GitHub Repository - Source code and issue tracker
- Releases Page - Download latest version
- Wiki - Extended documentation
- Discord Community - Get help and support
CodeDSL v1.3.4
Domain Specific Language addon for Coder
CodeDSL is a powerful Domain Specific Language (DSL) addon for the Coder Minecraft plugin that allows you to write scripts in an easy-to-learn custom syntax without needing Java knowledge. CodeDSL handles all the heavy lifting while you focus on logic.
โจ Features
- Easy-to-Learn Syntax: Write scripts without Java knowledge
- Fast Execution: Optimized for Minecraft servers
- Secure Variables: Store secrets with obfuscated variables
- Async Support: Run tasks on separate threads
- File Operations: Read/write files from scripts
- Bukkit Integration: Full access to Bukkit API
- Inter-Script Communication: Scripts can talk to each other
- Task Scheduling: Delayed and repeating tasks
- Command Definitions: Create custom Minecraft commands
๐ฅ Installation
- Download
CodeDSL-1.3.4.jarfrom the Addons page - Place the JAR in your
/plugins/folder - Restart your server
- Server automatically creates the CodeDSL folder structure
Folder Structure Created:
/plugins/Coder/CodeDSL/
โโโ scripts/ (Your .cd scripts)
โโโ examples/ (Example scripts)
โโโ variables/
โ โโโ variables.storage (Plain text variables)
โ โโโ variables.obf (Obfuscated variables)
โโโ config.yml
๐ง Quick Start
Create Your First Script
Create a file named hello.cd in /plugins/Coder/CodeDSL/scripts/:
broadcast "Hello, World!"
send "Welcome!" to player_name
console.log "Script executed!"
Execute the Script
/codedsl run hello.cd
Or use Coder commands:
/coder run hello.cd
๐ Command Syntax Reference
Broadcast Messages
broadcast "This message goes to everyone!"
Send Messages to Players
send "Hello!" to DARRELMT
Console Logging
console.log "Server log message"
console.log {
Multi-line
Console output
Supported
}
Variables
var playerCount = 42
var serverName = "MyAwesomeServer"
broadcast "Server {serverName} has {playerCount} players!"
Obfuscated Variables (Secrets)
obfuscatedVAR apiKey = "secret-api-key-12345"
obfuscatedVAR password = "super-secret-password"
console.log "Secrets stored securely!"
File Operations
fileRead /path/to/file.txt
fileWrite /path/to/output.txt {
This content will be written to the file
Multiple lines supported
}
fileDel /path/to/file.txt
Delays and Waits
delay 20 # 20 ticks = 1 second
broadcast "After delay!"
wait 1s # 1 second
wait 2m # 2 minutes
wait 5t # 5 ticks
Repeating Tasks
every 5s {
broadcast "Running every 5 seconds!"
}
every 1m {
console.log "1 minute has passed!"
}
If/Else Statements
if someValue is "expected":
broadcast "Value matched!"
else if someValue is "other":
broadcast "Other value!"
else:
broadcast "No match!"
๐ Import Libraries
Async - Run tasks on separate threads
import async
async:
broadcast "This runs async!"
wait 2s
broadcast "After async delay!"
Connection - Link multiple scripts
import Connection
connectToFile "other-script.cd":
if file is connected:
broadcast "Connected to other script!"
Bukkit - Full Bukkit API
import bukkit
execute command "say Hello from Bukkit!" in console
โ๏ธ Plugin Commands
| Command | Description |
|---|---|
/codedsl run <filename> |
Execute a CodeDSL script |
/codedsl reload <filename> |
Reload a script |
/codedsl load <filename> |
Load script to memory |
/codedsl unload <filename> |
Unload script from memory |
/codedsl list |
List all available scripts |
/cdsl <same as above> |
Alias for /codedsl |
/code-dsl <same as above> |
Alternative alias |
๐ Permissions
| Permission | Description |
|---|---|
codedsl.use |
Use CodeDSL commands |
codedsl.command |
Execute custom commands |
๐ ๏ธ Troubleshooting
โ Script not found
Ensure the file is in /plugins/Coder/CodeDSL/scripts/ and uses .cd or .code extension.
โ Variables not saving
Ensure variables.storage exists in the variables/ folder and check file permissions.
โ Commands not working
Ensure Coder plugin is installed and enabled, and player has codedsl.use permission.
โ Async not working
Ensure import async is at the top of your script and check server console for errors.
๐ Configuration
Edit /plugins/Coder/CodeDSL/config.yml:
# =======================================================
# = CodeDSL Configuration File
# = Made By Firesmasher | Version 2.3.1
# ======================================================
# Enable the plugin
enabled: true
# File extensions to bind on
file-extensions:
main: ".cd"
legacy: ".code"
old: ".cdsl"
custom: "YOUR_PREFERED_CUSTOM_FILE_EXTENSION_HERE"
# Allow file reloading
# Enables: /coder reload or /codedsl reload
reloading-enabled: true
# Script execution settings
scripts:
# Auto-load scripts from startup
auto-load: true
# Max script execution time (in seconds)
timeout: 30
# Variable storage
variables:
# Enable variable persistence
persistence-enabled: true
# Auto-save interval (in seconds)
auto-save-interval: 60
# Logging
logging:
# Enable debug logging
debug: false
# Log level (INFO, DEBUG, ERROR)
level: "INFO"
# Placeholders
placeholders:
enabled: true
CoderJSLoader v1.0.0
Native JavaScript Execution for Coder
CoderJSLoader is an ultra-lightweight native JavaScript (.js) script execution addon for Coder v1.3.6+ Minecraft plugin. Optimized for modern Paper 1.21+ servers running OpenJDK 21-25, it seamlessly integrates JavaScript support without triggering any Mojang remapper bugs or security blocks.
๐ Key Features
- Native .js Extension: No file masking or workarounds needed
- Pre-Baked API Injections: Automatic bukkit, api, and sender variable mapping
- Pure Performance Engine: Shaded Mozilla Rhino JSR-223 runtime (optimized RAM usage)
- Remapper Protection: Built with paper-plugin.yml to dodge Mojang bytecode corruption
- Small Footprint: Only ~1.37MB in size
- Instant Execution: No compilation overhead
๐ฅ Installation
- Download
CoderJSLoader-1.0.0.jarfrom the Addons page - Place the JAR in your server's
/plugins/folder - Restart your server
- Verify console message:
[JS Reflection] SUCCESS! Surgically modified Coder's executor to support .js extension.
๐ ๏ธ Quick Start
Create Your First Script
Create hello.js in /plugins/Coder/scripts/:
// Use section symbols for color parameters
var prefix = "ยงeยงl[JS Engine] ยงf";
// Broadcast using pre-baked 'bukkit' handle
bukkit.broadcastMessage(prefix + "JavaScript is flying natively on this node! ๐");
// Log to console using 'api' handle
api.log("[JS Addon] Script executed successfully.");
Execute
/coder run hello.js
๐ป API Reference
Pre-Injected Variables
| Variable | Type | Description |
|---|---|---|
bukkit |
Server | Bukkit Server instance for broadcasting and world management |
api |
CoderAPI | Coder API handle for logging and plugin communication |
sender |
CommandSender | Command executor (player or console) |
Common Methods
// Broadcast to all players
bukkit.broadcastMessage("Hello everyone!");
// Send message to command sender
sender.sendMessage("Hello!");
// Get online players
var players = bukkit.getOnlinePlayers();
for (var i = 0; i < players.length; i++) {
var player = players[i];
player.sendMessage("Hi " + player.getName());
}
// Access world
var world = bukkit.getWorld("world");
var entities = world.getEntities();
// Log to console
api.log("Debug information");
// Execute command
bukkit.dispatchCommand(bukkit.getConsoleSender(), "say Hello from JS!");
๐ฎ Examples
Broadcast with Formatting
var prefix = "ยง6ยงl[Server] ยงf";
var message = "Welcome to the server!";
bukkit.broadcastMessage(prefix + message);
Get Player Count
var players = bukkit.getOnlinePlayers();
api.log("Online players: " + players.length);
bukkit.broadcastMessage("Players online: " + players.length);
Teleport Player
var players = bukkit.getOnlinePlayers();
if (players.length > 0) {
var player = players[0];
var loc = player.getLocation();
loc.setY(loc.getY() + 10);
player.teleport(loc);
player.sendMessage("Teleported upwards!");
}
Scheduled Task
var scheduler = bukkit.getScheduler();
var plugin = bukkit.getPluginManager().getPlugin("Coder");
scheduler.scheduleSyncRepeatingTask(plugin, function() {
bukkit.broadcastMessage("ยงeยงlAutomatic broadcast!");
}, 0, 1200); // Run every 1 minute (20 ticks/second * 60 = 1200)
โ๏ธ Compatible Versions
- Paper 1.21+ (recommended)
- OpenJDK 21, 22, 23, 24, 25
- Coder v1.3.6+
๐ Security Notes
JavaScript execution is sandboxed through the Rhino engine. However, since scripts have access to Bukkit API, only allow trusted administrators to create or modify .js scripts.
๐ Troubleshooting
โ "Method not found" errors
Ensure you're running Paper 1.21+ and OpenJDK 21-25. Some Bukkit methods may differ between versions.
โ Script not executing
Check that the file has .js extension and is in /plugins/Coder/scripts/ folder.
โ "SUCCESS" message not in console
Verify CoderJSLoader.jar is in /plugins/ folder and Coder is installed and enabled.
CoderJavaFixer
Security addon for Coder runtime plugin
CoderJavaFixer is a lightweight security addon for the Coder runtime plugin, designed to manage script compilation and prevent malicious system access. It acts as a gatekeeper between user scripts and system-level operations.
โจ Key Features
- Secure Compilation: Safely intercepts /coder requests for live source compilation
- User Execution Control (UEC): Scans scripts for unauthorized terminal handles
- Bypass Logic: Seamlessly trusts server CONSOLE and defined administrator accounts
- Resource Efficiency: Automates build-cache cleanup
- Audit Logging: Track all compilation and execution attempts
- Whitelist Support: Define trusted users and code patterns
๐ฅ Installation
- Download
CoderJavaFixer.jarfrom the Addons page - Place the JAR in your
/plugins/folder (after Coder plugin) - Restart your server
- Configuration file generated:
/plugins/CoderJavaFixer/config.yml
๐ก๏ธ Security Features
Blocked System Calls
CoderJavaFixer automatically blocks:
Runtime.exec()- Arbitrary command executionProcessBuilder- Process creationSystem.exit()- Server shutdownFile.delete()- Critical file deletion (when restricted)ClassLoader- Arbitrary class loading
Trusted Users
By default, trusted:
- Console / CONSOLE
- Server operators
โ๏ธ Commands
| Command | Description | Permission |
|---|---|---|
/coder run <file.java> |
Compiles and runs a Java script (with security check) | coder.run |
/cjf compile <file.java> |
Compile a script into protected cache without running | cjf.compile |
/cjf execute-class <file> |
Run a previously compiled class from cache | cjf.execute |
/cjf reload |
Reload configuration file | cjf.admin |
๐ Configuration
Edit /plugins/CoderJavaFixer/config.yml:
# CoderJavaFixer Configuration
enabled: true
# Security Settings
security:
# Block dangerous methods
block-runtime-exec: true
block-process-builder: true
block-system-exit: true
block-file-delete: true
block-classloader: true
# Trusted users who bypass security checks
trusted-users:
- "CONSOLE"
- "YourAdminUsername"
- "AnotherTrustedUser"
# Dangerous patterns to detect
dangerous-patterns:
- "Runtime.getRuntime()"
- "new ProcessBuilder"
- "System.exit"
- "File.delete"
- "ClassLoader"
# Cache settings
cache:
auto-cleanup: true
cleanup-interval: 3600 # seconds
max-cache-size: 100 # MB
# Logging
logging:
audit-log: true
log-failed-attempts: true
log-trusted-bypasses: false
# Permissions
permissions:
require-permission: true
permission-node: "cjf.run"
๐ Permissions
| Permission | Description |
|---|---|
cjf.run |
Run Java scripts |
cjf.compile |
Compile Java scripts |
cjf.execute |
Execute compiled classes |
cjf.admin |
Administrative commands |
๐ก Usage Examples
Safe Java Script
import org.bukkit.Bukkit;
public class HelloWorld {
public static void execute() {
Bukkit.broadcastMessage("Hello from safe Java!");
}
}
Using Bukkit API
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class PlayerStats {
public static void execute() {
int count = Bukkit.getOnlinePlayers().size();
Bukkit.broadcastMessage("Online players: " + count);
}
}
๐ Troubleshooting
โ "Access denied" on trusted code
Check that your username is in the trusted-users list in config.yml. Usernames are case-sensitive.
โ Script blocked when it shouldn't be
Check the dangerous-patterns list. You may need to adjust patterns if you have legitimate use cases.
โ Cache not clearing
Ensure auto-cleanup is enabled in config, or manually run /cjf clear-cache
โ Compilation errors
Check that your Java syntax is correct. CoderJavaFixer only adds security, not compilation fixes.
โ ๏ธ Important Notes
For Server Admins: While CoderJavaFixer adds security, it's not a complete sandbox. Never run untrusted Java scripts from unknown sources. Always review code before execution.