Learning Path
Choose your learning path based on your experience and goals. Each path is designed to take you from where you are to where you want to be.
Choose Your Path
Section titled “Choose Your Path”New to modding? Start here! JavaScript Developer
Know JS? Fast track! Java Mod Developer
Already know Hytale modding?
Jump to specific projects Reference / Quick Access
Know what you need?
Direct links to docs
Path 1: Complete Beginner
Section titled “Path 1: Complete Beginner”Perfect for: First time modding, basic programming knowledge
Goal: Create your own working server mods with confidence
Foundations
Section titled “Foundations”Setup & First Mod
Section titled “Setup & First Mod”- Install SimpleScripting
- Understand folder structure
- Your First Mod Tutorial - BUILD THIS!
- Understand the mod manifest
Exercise: Create a /greet command that says “Hello [player]!”
You’ll know: How to create, edit, and reload mods
Commands
Section titled “Commands”- Commands API reference
- Tutorial: Commands with Arguments (coming soon)
- Study: welcome-rewards example (focus on
/playtimecommand)
Exercise: Create /heal and /feed commands
You’ll know: How to get command arguments and validate input
Events
Section titled “Events”- Events API reference
- Run
events.knownEvents()to see all events - Study: welcome-rewards example (focus on join/leave events)
Exercise: Make a mod that logs when players chat
You’ll know: How to listen to game events
Database Basics
Section titled “Database Basics”- Database API reference
- Study: welcome-rewards database code
- Tutorial: Persistent Data (coming soon)
Exercise: Create a /note <text> command that saves notes per player
You’ll know: How to save and load data
Intermediate Skills
Section titled “Intermediate Skills”Players & Worlds
Section titled “Players & Worlds”- Players & Worlds API
- UI & Messages - Make colorful messages
- Study: welcome-rewards starter kit code
Exercise: Create /broadcast <message> with colors
You’ll know: How to find players and send formatted messages
Timers & Automation
Section titled “Timers & Automation”Exercise: Create a mod that announces “Server restart in X” every 10 minutes
You’ll know: How to schedule repeating tasks
ECS Basics
Section titled “ECS Basics”Exercise: Create /tphere <player> to teleport someone to you
You’ll know: How to work with entity positions
Final Project
Section titled “Final Project”Build a complete feature:
Pick one:
- Quest System: Track player quests with database, give rewards on completion
- Event System: Scheduled mini-games or competitions
- Leaderboard System: Track player stats and display rankings
Use:
- Commands
- Events
- Database
- UI messages
- One example mod as reference
You’ll know: How to combine all concepts into a working system!
What’s Next?
Section titled “What’s Next?”- Explore Advanced Topics
- Study example mods in detail
- Join the community and share your mods!
Path 2: JavaScript Developer
Section titled “Path 2: JavaScript Developer”Perfect for: Already comfortable with JavaScript
Goal: Translate JS skills to Hytale mods quickly
Crash Course
Section titled “Crash Course”Skip the basics, focus on differences:
- Installation - Quick setup
- Mod Layout - File structure
- Your First Mod - 10-minute walkthrough
- API Overview - What’s available
Key Differences from Node.js/Browser:
- No npm/package.json - direct
.jsfiles - Use
require('./file.js')for local modules only - Global APIs instead of imports:
commands,events,db, etc. - ES5 syntax (no arrow functions, destructuring, async/await)
Exercise: Quick Test: Create /ping command
API Deep Dive
Section titled “API Deep Dive”Study the APIs you’ll use most:
Mental Model:
// You write:function onEnable() { commands.register('test', handler); events.on('playerready', handler); db.execute('CREATE TABLE...');}
// Mods are isolated - each gets own:// - Database (SQLite)// - Rhino JavaScript context// - Command/event registrationsExercise: Quick Test: Build a /coin command with database to track flips
Production Patterns
Section titled “Production Patterns”- Modules & Shared Services
- simple-stats example - See require() usage
- ECS Overview - Optional but powerful
Code Organization Pattern:
var utils = require('./utils.js');var commands = require('./commands.js');
function onEnable() { commands.registerAll();}
// commands.jsmodule.exports = { registerAll: function() { commands.register('help', helpCommand); commands.register('stats', statsCommand); }};Exercise: Build This: Multi-file mod with command router pattern
You’re Done!
Section titled “You’re Done!”You now know:
- ✅ How to create and structure mods
- ✅ All major APIs (commands, events, DB, players)
- ✅ Code organization with require()
- ✅ Production patterns from examples
Next: Pick a project from “I Want To Build…” and go!
Path 3: Java Mod Developer
Section titled “Path 3: Java Mod Developer”Perfect for: Already developing Hytale mods in Java
Time commitment: 1 day (concepts only)
Goal: Understand how SimpleScripting complements Java mods
What You Need to Know
Section titled “What You Need to Know”SimpleScripting is NOT a replacement for Java mods. It’s complementary.
| Feature | Java Mod | SimpleScripting |
|---|---|---|
| Custom blocks/items | Java only | Not supported: Cannot define |
| Assets (models, textures) | Java only | Not supported: Cannot define |
| Server logic | Java | JavaScript |
| Commands | Java | JavaScript |
| Events | Java | JavaScript |
| Database | Manual | Built-in SQLite |
| Rapid iteration | Recompile | Edit & reload |
Crash Course
Section titled “Crash Course”- Introduction - Design Philosophy
- API Overview - How wrappers work
- welcome-rewards example - See full implementation
- Extensions System - Important! How to extend JS from Java
Key Concept - Wrapper Architecture:
// Java side (what you build)public class MyExtension implements SimpleScriptingExtension { @Override public void onRegister(ExtensionContext context) { // Register your Java API for JS mods to use context.registerGlobalApi("myapi", (modId, runtime, logger) -> new MyJavaApi(logger) ); }}
// JavaScript side (what mod developers use)function onEnable() { var result = myapi.doSomething("test"); // Your Java method}When to Use Each
Section titled “When to Use Each”Use Java When:
- Defining assets (blocks, items, models, UI files)
- Core gameplay mechanics
- Performance-critical operations
- Deep engine integration needed
Use SimpleScripting (JS) When:
- Server automation/logic
- Custom commands/events
- Rapid prototyping
- Non-developers need to customize
Use Both:
- Java defines the items/blocks/assets
- JS defines the gameplay logic using those assets
Practical Example: Shop System
Section titled “Practical Example: Shop System”// Java mod: Defines shop block, UI assetspublic class ShopBlockMod extends JavaPlugin { // Register shop block, UI files}// JS mod: Shop logic/economy/transactionsfunction onEnable() { commands.register('shop', function(ctx) { // Open shop UI using Java-defined assets // Handle purchase logic in JS if (economy.withdraw(uuid, price)) { // Give item (defined in Java) } });}Creating Extensions
Section titled “Creating Extensions”If you want JS mods to use your Java plugin:
- Read: Extension System Guide
- Study: EconomySS source code
- Implement:
SimpleScriptingExtensioninterface
I Want To Build…
Section titled “I Want To Build…”Jump directly to project-specific guides:
Economy/Shop System
Section titled “Economy/Shop System”Requirements: EconomySS extension plugin + economy provider (VaultUnlocked/EliteEssentials)
Study:
Pattern:
// 1. Check economy availabilityif (!economy.isAvailable()) return;
// 2. Get prices from DBvar price = db.queryOne('SELECT price FROM items WHERE id = ?', [itemId]).price;
// 3. Validate and transactif (economy.withdraw(uuid, price)) { // Give item}Teleportation System (Homes/Warps)
Section titled “Teleportation System (Homes/Warps)”Study:
Pattern:
// Save locationvar pos = ecs.getPosition(player);db.execute('INSERT INTO homes VALUES (?, ?, ?, ?)', [name, pos.x, pos.y, pos.z]);
// Teleport to locationvar home = db.queryOne('SELECT * FROM homes WHERE name = ?', [name]);ecs.teleport(player, [home.x, home.y, home.z], [0, 0, 0]);Statistics/Leaderboards
Section titled “Statistics/Leaderboards”Study:
Pattern:
// Track statdb.execute('UPDATE stats SET kills = kills + 1 WHERE player = ?', [name]);
// Leaderboardvar top = db.query('SELECT player, kills FROM stats ORDER BY kills DESC LIMIT 10');Mini-Games/Events
Section titled “Mini-Games/Events”Study:
Pattern:
var gameActive = false;var participants = [];
commands.register('startgame', function() { gameActive = true; players.broadcast("Game starting in 30 seconds!");
server.runLater(30000, function() { // Start game logic });});Reward Systems (Daily/Playtime)
Section titled “Reward Systems (Daily/Playtime)”Study:
Pattern:
events.on('playerready', function(event) { var lastClaim = db.queryOne('SELECT last_daily FROM rewards WHERE player = ?', [name]); var today = new Date().toDateString();
if (lastClaim.last_daily !== today) { // Give daily reward db.execute('UPDATE rewards SET last_daily = ? WHERE player = ?', [today, name]); }});Custom Commands Suite
Section titled “Custom Commands Suite”Study:
Pattern:
// Multiple related commandscommands.register('heal', healCommand, { description: "Heal yourself" });commands.register('feed', feedCommand, { description: "Feed yourself" });commands.register('fly', flyCommand, { description: "Toggle fly" });
// Or subcommand routingcommands.register('admin', function(ctx) { var sub = ctx.args()[0]; if (sub === 'heal') healCommand(ctx); else if (sub === 'tp') tpCommand(ctx);});Reference / Quick Access
Section titled “Reference / Quick Access”I know what I need, take me there:
Core Concepts
Section titled “Core Concepts”- Commands & Events
- Database (SQLite)
- Players & Worlds
- Inventory & Items
- Server, Net & Assets
- UI & Messages
- Economy (extension)
- Extensions System
Advanced
Section titled “Advanced”Advanced Topics
Section titled “Advanced Topics”Once you’ve mastered the basics:
Cross-Mod Communication
Section titled “Cross-Mod Communication”Extension Development
Section titled “Extension Development”- Creating Extensions
- Provide TypeScript definitions
- Bundle example mods with extensions
Performance Optimization
Section titled “Performance Optimization”- Database indexing
- Caching strategies
- Efficient event handlers
- Batch operations
Production Best Practices
Section titled “Production Best Practices”- Error handling patterns
- Migration strategies
- Testing approaches
- Version management
Need Help?
Section titled “Need Help?”- Stuck? Check the FAQ
- Errors? See Troubleshooting
- Examples? Study example mods
- Community: Join discussions on GitHub
Ready to start? Pick your path above and begin building!