UNPKG

@tomsith/node-red-contrib-minecraft

Version:
761 lines (693 loc) 28 kB
<!-- minecraft.html --> <script type="text/html" data-template-name="serverconfig"> <div class="form-row"> <label for="node-config-input-host"><i class="fa fa-globe"></i> Host</label> <input type="text" id="node-config-input-host" placeholder="localhost"> </div> <div class="form-row"> <label for="node-config-input-rconPort"><i class="fa fa-random"></i> RCON Port</label> <input type="text" id="node-config-input-rconPort" placeholder="25575"> </div> <div class="form-row"> <label for="node-config-input-rconPassword"><i class="fa fa-lock"></i> RCON Password</label> <input type="password" id="node-config-input-rconPassword"> </div> </script> <script type="text/html" data-template-name="rcon"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-command"><i class="fa fa-terminal"></i> Default Command</label> <input type="text" id="node-input-command" placeholder="list"> </div> </script> <script type="text/html" data-template-name="serverinfo"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> </script> <script type="text/html" data-template-name="playerinfo"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-infoType"><i class="fa fa-info"></i> Info Type</label> <select id="node-input-infoType"> <option value="health">Health</option> <option value="position">Position</option> <option value="inventory">Inventory</option> <option value="experience">Experience</option> <option value="gamemode">Game Mode</option> <option value="food">Food Level</option> <option value="effects">Active Effects</option> <option value="score">Scoreboard</option> </select> </div> <div class="form-row"> <label for="node-input-player"><i class="fa fa-user"></i> Default Player</label> <input type="text" id="node-input-player" placeholder="@p"> </div> </script> <script type="text/html" data-template-name="playermanage"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-tasks"></i> Action</label> <select id="node-input-action"> <option value="kick">Kick</option> <option value="ban">Ban</option> <option value="pardon">Pardon</option> <option value="gamemode">Change Gamemode</option> <option value="tp">Teleport</option> <option value="give">Give Item</option> <option value="clear">Clear Inventory</option> <option value="kill">Kill</option> <option value="xp">Give XP</option> </select> </div> <div class="form-row"> <label for="node-input-gamemode"><i class="fa fa-gamepad"></i> Default Gamemode</label> <select id="node-input-gamemode"> <option value="survival">Survival</option> <option value="creative">Creative</option> <option value="adventure">Adventure</option> <option value="spectator">Spectator</option> </select> </div> </script> <script type="text/html" data-template-name="world"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-globe"></i> Action</label> <select id="node-input-action"> <option value="time">Set Time</option> <option value="weather">Set Weather</option> <option value="difficulty">Set Difficulty</option> <option value="gamerule">Set Gamerule</option> <option value="worldborder">Set World Border</option> <option value="setworldspawn">Set World Spawn</option> </select> </div> </script> <script type="text/html" data-template-name="block"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-cube"></i> Action</label> <select id="node-input-action"> <option value="set">Set Block</option> <option value="fill">Fill Area</option> <option value="clone">Clone Area</option> <option value="info">Get Block Info</option> </select> </div> </script> <script type="text/html" data-template-name="entity"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-bug"></i> Action</label> <select id="node-input-action"> <option value="spawn">Spawn Entity</option> <option value="kill">Kill Entity</option> <option value="count">Count Entities</option> <option value="info">Get Entity Info</option> <option value="modify">Modify Entity</option> </select> </div> </script> <script type="text/html" data-template-name="servermanage"> <div class="form-row"> <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> <input type="text" id="node-input-name" placeholder="Name"> </div> <div class="form-row"> <label for="node-input-server"><i class="fa fa-server"></i> Server</label> <input type="text" id="node-input-server"> </div> <div class="form-row"> <label for="node-input-action"><i class="fa fa-cogs"></i> Action</label> <select id="node-input-action"> <option value="save-all">Save World</option> <option value="save-off">Disable Saving</option> <option value="save-on">Enable Saving</option> <option value="stop">Stop Server</option> <option value="whitelist">Manage Whitelist</option> <option value="op">Op Player</option> <option value="deop">Deop Player</option> <option value="broadcast">Broadcast Message</option> </select> </div> </script> <!-- Help Documentation --> <script type="text/html" data-help-name="serverconfig"> <p>Configuration node for Minecraft server connection settings. Required by all other Minecraft nodes.</p> <h3>Properties</h3> <dl class="message-properties"> <dt>Host <span class="property-type">string</span></dt> <dd>IP address or hostname of your Minecraft server (e.g., "localhost" or "mc.example.com")</dd> <dt>RCON Port <span class="property-type">number</span></dt> <dd>Port number for RCON connection (default: 25575)</dd> <dt>RCON Password <span class="property-type">string</span></dt> <dd>Password matching your server.properties rcon.password setting</dd> </dl> <h3>Configuration</h3> <p>In your server.properties file, ensure:</p> <pre>enable-rcon=true rcon.port=25575 rcon.password=yourpassword</pre> </script> <script type="text/html" data-help-name="rcon"> <p>Executes raw RCON commands on your Minecraft server. Use this for direct command execution.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> The Minecraft command to execute. <br/><br/> Common commands: <ul> <li><code>list</code> - Shows online players</li> <li><code>seed</code> - Shows world seed</li> <li><code>help</code> - Lists available commands</li> <li><code>time query daytime</code> - Gets current time</li> </ul> </dd> </dl> <h3>Outputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd>Server's response to the command</dd> </dl> <h3>Examples</h3> <pre>msg.payload = "give @p diamond 64"; msg.payload = "weather clear"; msg.payload = "time set day";</pre> </script> <script type="text/html" data-help-name="serverinfo"> <p>Retrieves current server status including player count, version, and online players.</p> <h3>Outputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">object</span></dt> <dd> Server status object containing: <ul> <li><b>online</b>: Number of players online</li> <li><b>max</b>: Maximum player capacity</li> <li><b>version</b>: Server version (e.g., "1.19.2")</li> <li><b>players</b>: Array of online players, each with: <ul> <li>name: Player username</li> <li>id: Player UUID</li> </ul> </li> </ul> </dd> </dl> <h3>Example Output</h3> <pre>{ "online": 3, "max": 20, "version": "1.19.2", "players": [ {"name": "Steve", "id": "..."}, {"name": "Alex", "id": "..."} ] }</pre> </script> <script type="text/html" data-help-name="playerinfo"> <p>Retrieves detailed information about specific players.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd>Player name or selector (e.g., "Steve" or "@p")</dd> <dt class="optional">infoType <span class="property-type">string</span></dt> <dd> Type of information to retrieve: <ul> <li><b>health</b>: Current health points (0-20)</li> <li><b>position</b>: XYZ coordinates</li> <li><b>inventory</b>: Complete inventory contents</li> <li><b>experience</b>: XP level and progress</li> <li><b>gamemode</b>: Current game mode</li> <li><b>food</b>: Food level (0-20)</li> <li><b>effects</b>: Active potion effects</li> <li><b>score</b>: Scoreboard scores</li> </ul> </dd> </dl> <h3>Outputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">object</span></dt> <dd> <ul> <li><b>raw</b>: Raw server response</li> <li><b>value</b>: Parsed value (type depends on query)</li> <li><b>player</b>: Player name/selector used</li> <li><b>type</b>: Info type queried</li> </ul> </dd> </dl> <h3>Example Outputs</h3> <pre>// Health query { "raw": "Steve has 20 health", "value": 20, "player": "Steve", "type": "health" } // Position query { "raw": "Position: [100.5, 64.0, -200.5]", "value": [100.5, 64.0, -200.5], "player": "@p", "type": "position" }</pre> </script> <script type="text/html" data-help-name="playermanage"> <p>Manages player actions and properties. Handles commands for player interaction.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> Value format depends on action: <ul> <li><b>kick</b>: Player name (optional reason after |) <br><code>Steve|Breaking rules</code> </li> <li><b>ban</b>: Player name (optional reason after |) <br><code>Steve|Griefing</code> </li> <li><b>pardon</b>: Player name <br><code>Steve</code> </li> <li><b>gamemode</b>: Player name and mode <br><code>Steve|creative</code> </li> <li><b>tp</b>: Player name and coordinates/target <br><code>Steve|100 64 -200</code> or <code>Steve|Alex</code> </li> <li><b>give</b>: Player name and item details <br><code>Steve|diamond 64</code> <br><code>Steve|diamond_sword{Enchantments:[{id:"sharpness",lvl:5}]} 1</code> </li> <li><b>clear</b>: Player name (optional item after |) <br><code>Steve|diamond</code> </li> <li><b>kill</b>: Player name <br><code>Steve</code> </li> <li><b>xp</b>: Player name and amount <br><code>Steve|100L</code> (levels) or <code>Steve|1000</code> (points) </li> </ul> </dd> <dt class="optional">target <span class="property-type">string</span></dt> <dd>Alternative player target (overrides payload player)</dd> <dt class="optional">reason <span class="property-type">string</span></dt> <dd>Reason for kick/ban (overrides payload reason)</dd> </dl> <h3>Common Items for Give Command</h3> <ul> <li><b>Basic Items</b>: diamond, iron_ingot, gold_ingot, emerald</li> <li><b>Tools</b>: diamond_sword, diamond_pickaxe, diamond_axe</li> <li><b>Armor</b>: diamond_helmet, diamond_chestplate, diamond_leggings, diamond_boots</li> <li><b>Special</b>: enchanted_golden_apple, totem_of_undying, elytra</li> </ul> <h3>Examples</h3> <pre>// Give enchanted sword msg.payload = "Steve|diamond_sword{Enchantments:[{id:\"sharpness\",lvl:5}]} 1"; // Give named item msg.payload = "Steve|diamond_sword{display:{Name:'{\"text\":\"Excalibur\"}'}} 1"; // Give colored armor msg.payload = "Steve|leather_chestplate{display:{color:16711680}} 1"; // Teleport to coordinates msg.payload = "Steve|100 64 -200";</pre> </script> <script type="text/html" data-help-name="world"> <p>Controls world settings and environment. Manages time, weather, and world properties.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> Value depends on action: <ul> <li><b>time</b>: Time setting <br><code>day</code>, <code>night</code>, <code>noon</code>, or number (0-24000) </li> <li><b>weather</b>: Weather type <br><code>clear</code>, <code>rain</code>, <code>thunder</code> </li> <li><b>difficulty</b>: Game difficulty <br><code>peaceful</code>, <code>easy</code>, <code>normal</code>, <code>hard</code> </li> <li><b>gamerule</b>: Rule and value <br><code>doDaylightCycle true</code> <br><code>keepInventory true</code> </li> <li><b>worldborder</b>: Border size <br><code>1000</code> (diameter in blocks) </li> <li><b>setworldspawn</b>: Coordinates <br><code>100 64 -200</code> </li> </ul> </dd> </dl> <h3>Common Gamerules</h3> <ul> <li><code>doDaylightCycle</code>: Sun/moon movement</li> <li><code>keepInventory</code>: Keep items on death</li> <li><code>mobGriefing</code>: Mob block destruction</li> <li><code>doMobSpawning</code>: Natural mob spawns</li> <li><code>doWeatherCycle</code>: Weather changes</li> </ul> <h3>Examples</h3> <pre>// Set to permanent day msg.action = "gamerule"; msg.payload = "doDaylightCycle false"; // Then msg.action = "time"; msg.payload = "day"; // Set up safe spawn area msg.action = "worldborder"; msg.payload = "1000"; // Then msg.action = "difficulty"; msg.payload = "peaceful";</pre> </script> <script type="text/html" data-help-name="block"> <p>Manages blocks in the world. Place, fill, clone, or get block information.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> Value format uses | as separator: <ul> <li><b>set</b>: <code>coordinates|block[|data]</code> <br><code>0 64 0|stone</code> <br><code>0 64 0|chest{Items:[{id:"diamond",Count:64b,Slot:0b}]}</code> </li> <li><b>fill</b>: <code>start_coords|end_coords|block[|mode]</code> <br><code>0 64 0|10 64 10|stone</code> <br><code>0 64 0|10 64 10|air|replace diamond_ore</code> </li> <li><b>clone</b>: <code>source_start|source_end|destination</code> <br><code>0 64 0|10 74 10|20 64 20</code> </li> <li><b>info</b>: <code>coordinates</code> <br><code>0 64 0</code> </li> </ul> </dd> </dl> <h3>Fill Modes</h3> <ul> <li><code>replace</code>: Replace all blocks</li> <li><code>hollow</code>: Create hollow shape</li> <li><code>outline</code>: Create outline only</li> <li><code>destroy</code>: Drop block contents</li> </ul> <h3>Examples</h3> <pre>// Create a platform msg.action = "fill"; msg.payload = "0 64 0|10 64 10|stone"; // Create hollow cube msg.action = "fill"; msg.payload = "0 64 0|10 74 10|stone|hollow"; // Place chest with items msg.action = "set"; msg.payload = "0 64 0|chest{Items:[{id:\"diamond\",Count:64b,Slot:0b}]}";</pre> </script> <script type="text/html" data-help-name="entity"> <p>Manages entities in the world. Spawn, modify, or remove entities.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> Value format uses | as separator: <ul> <li><b>spawn</b>: <code>entity|coordinates|nbt</code> <br><code>zombie|~ ~2 ~|{CustomName:"\"Boss\"",Glowing:1b}</code> </li> <li><b>kill</b>: <code>selector</code> <br><code>@e[type=zombie,distance=..10]</code> </li> <li><b>count</b>: <code>selector</code> <br><code>@e[type=creeper]</code> </li> <li><b>info</b>: <code>selector</code> <br><code>@e[type=zombie,limit=1]</code> </li> <li><b>modify</b>: <code>selector|nbt_data</code> <br><code>@e[type=zombie,limit=1]|{NoAI:1b}</code> </li> </ul> </dd> </dl> <h3>Common Entity Types</h3> <ul> <li><b>Hostile</b>: zombie, skeleton, creeper, spider</li> <li><b>Passive</b>: cow, sheep, pig, chicken</li> <li><b>Special</b>: armor_stand, item, experience_orb</li> <li><b>Projectiles</b>: arrow, snowball, fireball</li> </ul> <h3>Common NBT Tags</h3> <ul> <li><code>CustomName</code>: Entity name</li> <li><code>NoAI</code>: Disable AI</li> <li><code>Invulnerable</code>: Can't be damaged</li> <li><code>Silent</code>: No sounds</li> <li><code>Glowing</code>: Glowing outline</li> </ul> <h3>Examples</h3> <pre>// Spawn named, glowing zombie msg.action = "spawn"; msg.payload = "zombie|~ ~2 ~|{CustomName:\"\"Boss\"\",Glowing:1b}"; // Kill all creepers within 10 blocks msg.action = "kill"; msg.payload = "@e[type=creeper,distance=..10]"; // Make zombie immobile msg.action = "modify"; msg.payload = "@e[type=zombie,limit=1]|{NoAI:1b,Invulnerable:1b}";</pre> </script> <script type="text/html" data-help-name="servermanage"> <p>Manages server operations and administration tasks.</p> <h3>Inputs</h3> <dl class="message-properties"> <dt>payload <span class="property-type">string</span></dt> <dd> Value depends on action: <ul> <li><b>save-all</b>: No payload needed</li> <li><b>save-off</b>: No payload needed</li> <li><b>save-on</b>: No payload needed</li> <li><b>stop</b>: No payload needed</li> <li><b>whitelist</b>: <code>add|remove|list</code> and player name <br><code>add Steve</code> </li> <li><b>op</b>: Player name <br><code>Steve</code> </li> <li><b>deop</b>: Player name <br><code>Steve</code> </li> <li><b>broadcast</b>: Message text <br><code>Server restarting in 5 minutes!</code> </li> </ul> </dd> </dl> <h3>Examples</h3> <pre>// Save world msg.action = "save-all"; // Add to whitelist msg.action = "whitelist"; msg.payload = "add Steve"; // Broadcast message msg.action = "broadcast"; msg.payload = "Welcome to the server!";</pre> <h3>Common Use Cases</h3> <ul> <li>Scheduled world saves</li> <li>Automated backup preparation</li> <li>Server maintenance notifications</li> <li>Whitelist management</li> <li>Operator status management</li> </ul> </script> <script type="text/javascript"> RED.nodes.registerType('serverconfig', { category: 'config', defaults: { host: { value: "localhost", required: true }, rconPort: { value: 25575, required: true, validate: RED.validators.number() }, rconPassword: { value: "", required: true } }, label: function() { return this.host + ":" + this.rconPort; } }); RED.nodes.registerType('rcon', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, command: { value: "" } }, inputs: 1, outputs: 1, icon: "file.png", label: function() { return this.name || "rcon"; } }); RED.nodes.registerType('serverinfo', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true } }, inputs: 1, outputs: 1, icon: "status.png", label: function() { return this.name || "server info"; } }); RED.nodes.registerType('servermanage', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, action: { value: "save-all" } }, inputs: 1, outputs: 1, icon: "server.png", label: function() { return this.name || "server manage"; } }); RED.nodes.registerType('playerinfo', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, infoType: { value: "health" }, player: { value: "@p" } }, inputs: 1, outputs: 1, icon: "user.png", label: function() { return this.name || "player info"; } }); RED.nodes.registerType('playermanage', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, action: { value: "kick" }, gamemode: { value: "survival" } }, inputs: 1, outputs: 1, icon: "user-cog.png", label: function() { return this.name || "player manage"; } }); RED.nodes.registerType('world', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, action: { value: "time" } }, inputs: 1, outputs: 1, icon: "globe.png", label: function() { return this.name || "world"; } }); RED.nodes.registerType('block', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, action: { value: "set" } }, inputs: 1, outputs: 1, icon: "cube.png", label: function() { return this.name || "block"; } }); RED.nodes.registerType('entity', { category: 'minecraft', color: '#a6bbcf', defaults: { name: { value: "" }, server: { type: "serverconfig", required: true }, action: { value: "spawn" } }, inputs: 1, outputs: 1, icon: "bug.png", label: function() { return this.name || "entity"; } }); </script>