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

  1. Download Coder.jar from the Releases page
  2. Place the JAR in your /plugins/ folder
  3. Restart your server to generate folder structure
  4. 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

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

  1. Download CodeDSL-1.3.4.jar from the Addons page
  2. Place the JAR in your /plugins/ folder
  3. Restart your server
  4. 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

  1. Download CoderJSLoader-1.0.0.jar from the Addons page
  2. Place the JAR in your server's /plugins/ folder
  3. Restart your server
  4. 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

  1. Download CoderJavaFixer.jar from the Addons page
  2. Place the JAR in your /plugins/ folder (after Coder plugin)
  3. Restart your server
  4. Configuration file generated: /plugins/CoderJavaFixer/config.yml

๐Ÿ›ก๏ธ Security Features

Blocked System Calls

CoderJavaFixer automatically blocks:

  • Runtime.exec() - Arbitrary command execution
  • ProcessBuilder - Process creation
  • System.exit() - Server shutdown
  • File.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.