A visual block-based programming IDE for building structures in Minecraft using JavaScript. Drag blocks → generate JS → run in Minecraft with
/rs functionName.
JSMN IDE is a browser-based coding tool for the JSMN Spigot plugin — a Minecraft server plugin that lets players write and run JavaScript to build structures.
Built in the tradition of ScriptCraft by Walter Higgins, this IDE makes it accessible to beginners and children through Google Blockly — a drag-and-drop block editor — with an instant 3D preview powered by Three.js running entirely in the browser.
┌──────────────────────────────┐ ┌─────────────────────┐
│ Blockly Editor │────▶│ draw.js │
│ (drag & drop blocks) │ │ function draw() { │
│ │ │ drone.box( │
│ [function draw] │ │ "DIRT",2,2,2); │
│ [box DIRT 2×2×2] │ │ drone.up(2); │
│ [up 2] │ │ drone.box( │
│ [box DIAMOND 1×1×1] │ │ "DIAMOND_BLOCK"│
│ [end function] │ │ ,1,1,1); │
│ [preview function draw] │ │ }; │
│ │ │ draw(); │
│ │ │ player.send... │
└──────────────────────────────┘ └──────────┬──────────┘
│
┌──────────────────────────────┘
▼
┌────────────────────────┐ ┌─────────────────────┐
│ Three.js 3D Preview │ │ Minecraft Server │
│ (runs in browser, │ │ /rs draw │
│ no server needed) │ │ → builds in-game! │
└────────────────────────┘ └─────────────────────┘
- Blockly v12 — latest Google Blockly, loaded from CDN
- 30+ Minecraft materials — full Bukkit Material enum names (DIRT, QUARTZ_BLOCK, RED_WOOL, …)
- Live 3D preview — Three.js renderer runs the drone simulation entirely in the browser; no PHP or Node.js required
- Interactive camera — drag to orbit, scroll to zoom
- Local save/load — workspace saved as JSON, multiple files can be loaded and combined
- JSMN-compatible output — generates
drone.box("DIRT", 2, 2, 2)ready to drop into/plugins/jsmn/scripts/ - Legacy XML support — load old
.xmlfiles from the original webscriptcraft
Uses a self-signed certificate so browsers don't upgrade HTTP to HTTPS silently.
git clone https://github.com/cndrbrbr/webscriptcraft.git
cd webscriptcraft
# 1. Generate a self-signed SSL certificate (once)
bash setup-ssl.sh
# 2. Start the HTTPS server
python3 serve-https.py
# 3. Open in browser (accept the self-signed cert warning)
# https://localhost:4443 or https://<your-server-ip>:4443Browser will show a certificate warning — click Advanced → Proceed to continue. The cert is valid for 10 years. Regenerate it any time with
bash setup-ssl.sh.
cd webscriptcraft/openb3
python3 -m http.server 8080
# open http://localhost:8080Works locally but browsers may block access from other machines via plain HTTP.
# Generate cert first
bash setup-ssl.sh
# Install nginx config (adjust paths inside the file first)
sudo cp nginx/jsmn-ide.conf /etc/nginx/sites-available/jsmn-ide
sudo ln -s /etc/nginx/sites-available/jsmn-ide /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginxRequires PHP 7+ and a web server (Apache/Nginx).
/var/www/openb3/ ← point your web root here
Open the IDE. The left panel is your Blockly workspace, pre-loaded with a demo program.
| Category | Blocks available |
|---|---|
| JSMN Drone | function, end function, preview function, call, box, box0, move, move by var |
| Loops | repeat, while, for, for each |
| Logic | if/else, compare, and/or, not |
| Math | number, arithmetic, random, … |
| Variables | Blockly variables |
| Functions | Blockly procedure blocks |
Click ▶ 3D Vorschau — the drone simulation runs in your browser and renders a Three.js scene on the right.
- Left-drag — orbit the camera
- Right-drag — pan
- Scroll — zoom in/out
Click JavaScript ↓ — downloads a .js file named after your function (e.g. draw.js).
Copy it to your Minecraft server's scripts folder:
/plugins/jsmn/scripts/draw.js
The file already contains the function call and a completion message at the bottom:
draw();
player.sendMessage("Done!");JSMN executes it automatically when the script loads and notifies you in chat when the build is complete. You can also re-run it any time with:
/rs draw
| Button | Action |
|---|---|
| 💾 XML speichern | Downloads workspace as functionName.json |
| 📂 XML laden | Load a .json or .xml file — replaces current workspace |
| ➕ XML hinzuladen | Load one or more files — adds to current scene |
Tip: Use hinzuladen to combine multiple saved models — load a house, then add a garden, then preview them all together in 3D.
box [material] [width] [height] [depth]
Generates: drone.box("DIRT", 2, 3, 2);
box0 [material] W [width] H [height] D [depth]
Generates: drone.box0("GLASS", 5, 4, 5);
[direction] [amount]
Directions: up, down, fwd, back, left, right, turn
Generates: drone.up(3);
Wraps code in a named JavaScript function.
function [name]
...blocks...
end function
Marks the entry point of your program. Does two things:
- Tells the 3D preview which function to call
- Adds
functionName();at the end of the downloaded JS so JSMN runs it automatically
The downloaded file is also named after this function (e.g. draw.js).
Calls another function by name — useful for building with helper functions.
| Display Name | JSMN Name | Display Name | JSMN Name |
|---|---|---|---|
| Dirt | DIRT |
Quartz | QUARTZ_BLOCK |
| Grass | GRASS_BLOCK |
Sandstone | SANDSTONE |
| Stone | STONE |
Diorite | DIORITE |
| Cobblestone | COBBLESTONE |
Andesite | ANDESITE |
| Glass | GLASS |
Granite | GRANITE |
| Ice | ICE |
Snow | SNOW_BLOCK |
| Glowstone | GLOWSTONE |
Gravel | GRAVEL |
| Beacon | BEACON |
Obsidian | OBSIDIAN |
| Diamond | DIAMOND_BLOCK |
Emerald | EMERALD_BLOCK |
| Iron | IRON_BLOCK |
Gold | GOLD_BLOCK |
| Air | AIR |
Bedrock | BEDROCK |
| White Wool | WHITE_WOOL |
Red Wool | RED_WOOL |
| Orange Wool | ORANGE_WOOL |
Yellow Wool | YELLOW_WOOL |
| Lime Wool | LIME_WOOL |
Green Wool | GREEN_WOOL |
| Blue Wool | BLUE_WOOL |
Purple Wool | PURPLE_WOOL |
| Magenta Wool | MAGENTA_WOOL |
Pink Wool | PINK_WOOL |
webscriptcraft/
├── openb3/ # Web frontend (PHP optional)
│ ├── index.php # Main IDE page
│ ├── test.html # Static version (no PHP needed)
│ ├── blockly/
│ │ ├── webscript20220210.js # Custom Blockly block definitions
│ │ └── webscriptstubs20220210.js # Code generators (→ JSMN JS)
│ ├── data/ # Server-side saved XML projects
│ ├── save.php / load_file.php / loaddirxml.php # PHP save/load API
│ └── call3d.php # PHP → Node.js 3D pipeline (legacy)
│
└── x3do/ # Server-side 3D pipeline (Node.js, optional)
└── x3dsw/
├── ex2.js # Transforms generated JS for Node execution
├── Drones.js # Virtual drone simulator (Node.js)
├── Filex3.js # X3DOM HTML generator
└── blocks.js # Material name → texture PNG map
| Mode | How | Requires |
|---|---|---|
| Client-side (default) | Three.js in browser, DronePreview JS class | Nothing — works offline |
| Server-side (legacy) | PHP → Node.js → X3DOM HTML | PHP + Node.js on server |
Edit JSMN_MATERIALS array in openb3/blockly/webscript20220210.js:
var JSMN_MATERIALS = [
["Display Name", "BUKKIT_MATERIAL_NAME"],
...
];The material name must match a Bukkit Material enum value.
Also add it to BLOCK_COLORS in index.php (hex colour for 3D preview) and to blocks.js (texture PNG for server-side preview).
- Define the block in
webscript20220210.jsusingBlockly.Blocks['name'] = { init: function() { ... } } - Add its code generator in
webscriptstubs20220210.jsusingBlockly.JavaScript.forBlock['name'] = function(block) { ... } - Add it to the toolbox in
index.php
| Library | Version | Purpose |
|---|---|---|
| Blockly | 12.4.1 | Visual block editor |
| Three.js | r140 | Client-side 3D preview |
| Three.js OrbitControls | r140 | Camera mouse controls |
All loaded from CDN — no npm install needed.
- JSMN Plugin — the Spigot/Minecraft server plugin
- ScriptCraft — the original inspiration
- Blockly — Google's visual programming library
Apache License 2.0 — see LICENSE
(c) 2022 cndrbrbr