KaleidoscopePlugin Docs Help

Example - 示例

入门

本文将通过一个简单的 JavaScript 示例,展示如何使用 Kaleidoscope 自带的 JS 插件功能。该示例代码演示了如何获取玩家信息、操作方块、以及发送 HTTP 请求等操作。

// 让我们通过以下代码来学习BuildTool自带的js插件功能吧! var localPlayer = Entity.getLocalPlayer(); var nameTag = Entity.getEntityName(localPlayer); var pos = Entity.getEntityPos(localPlayer); var typeId = Entity.getEntityType(localPlayer); if (localPlayer != null) { print("我叫:" + nameTag + ",我在世界的 x:" + pos[0] + ",y:" + pos[1] + ",z:" + pos[2] + ",我的实体类型为" + typeId); }; var playerList = Entity.getPlayerList(); var entityList = Entity.getEntityList(); print("当前世界中共有:" + playerList.length + "个玩家"); print("当前世界中共有:" + entityList.length + "个实体"); function onBuild(x, y, z) { var content = "当前点击了 " + x + " " + y + " " + z + "的方块 "; var json = JSON.stringify({ type: "form", title: "提示", content: content, buttons: [ { text: "setBlock" }, { text: "fill" }, { text: "destroy" } ] }); Helper.addForm(666, json); } function onFormRet(id, ret) { if (id == 666) { index = parseInt(ret); print('当前选择的是第' + index + '个选项'); switch (index) { case 0: Helper.executeCommand("/setblock " + x + " " + y + " " + z + " grass"); break; case 1: Helper.executeCommand("/fill " + (x + 5) + " " + (y + 5) + " " + (z + 5) + " " + (x - 5) + " " + (y - 5) + " " + (z - 5) + " grass"); break; case 2: Helper.executeCommand("/fill " + (x + 5) + " " + (y + 5) + " " + (z + 5) + " " + (x - 5) + " " + (y - 5) + " " + (z - 5) + " air 0 destroy"); break; } } } function httpGet(url) { try { var result = [], data = "", reader = new java.io.BufferedReader(new java.io.InputStreamReader(java.net.URL(url).openConnection().getInputStream(), "UTF-8")); while ((data = reader.readLine()) != null) { result.push(data); }; reader.close(); return result.join("\n"); } catch (exception) { // 错误处理 } }; function runThread(func) { var thread = new java.lang.Thread(new java.lang.Runnable({ run: func })); thread.start(); return thread; } runThread(function () { var data = httpGet("http://www.baidu.com"); print(data); });

二分法查坐标

var ctx = null; try { ctx = System.getContext(); print("运行环境:BUSJ"); } catch(e) { ctx = com.mojang.minecraftpe.MainActivity.currentMainActivity.get(); print("运行环境:ModPE"); } var isOpen = true; var player = { name: '', maxX: 30000000, midX: 0, minX: -30000000, maxY: 320, midY: 0, minY: -64, maxZ: 30000000, midZ: 0, minZ: -30000000, isplayer: true, Xfirstsend: true, Yfirstsend: true, Zfirstsend: true, inworld: false }; var mode = { findmode: 0, time: 0, teleport: 0, teleporttime: 0 }; var family = ['','player','mob','inanimate','item']; function SendFindCommand(x,y,z,dx,dy,dz) { if (!mode.findmode) { var cmd = "w @s @e[x=" + x + ",y=" + y + ",z=" + z + ",dx=" + dx + ",dy=" + dy + ",dz=" + dz + "]"; Helper.executeCommand(cmd); } else if (mode.findmode === 4) { var cmd = "w @s @e[type=" + family[mode.findmode] + ",x=" + x + ",y=" + y + ",z=" + z + ",dx=" + dx + ",dy=" + dy + ",dz=" + dz + "]"; Helper.executeCommand(cmd); } else { var cmd = "w @s @e[family=" + family[mode.findmode] + ",x=" + x + ",y=" + y + ",z=" + z + ",dx=" + dx + ",dy=" + dy + ",dz=" + dz + "]"; Helper.executeCommand(cmd); } } function GetDistance(max,min) { if (max - min <= 1) { max = 300; min = 100; } return Math.floor(Math.abs(max - min) * -1); } function Binary(isplayer,axis) { if (axis === 'x') { if (isplayer) { if (player.midX < 0 && !player.Xfirstsend) { player.maxX = player.midX; }else if (player.midX >= 0 && !player.Xfirstsend) { player.maxX = player.midX; } if (player.Xfirstsend) player.Xfirstsend = false; player.isplayer = true; player.midX = player.minX + Math.floor(((player.maxX - player.minX) / 2 )); SendFindCommand(player.midX,player.maxY,player.maxZ,GetDistance(player.midX,player.minX),GetDistance(player.maxY,player.minY),GetDistance(player.maxZ,player.minZ)); }else { if (player.midX < 0 && !player.Xfirstsend) { player.minX = player.midX; }else if (player.midX >= 0 && !player.Xfirstsend) { player.minX = player.midX; } player.isplayer = false; player.midX = player.midX + Math.floor(((player.maxX - player.midX) / 2 )); SendFindCommand(player.midX,player.maxY,player.maxZ,GetDistance(player.midX,player.minX),GetDistance(player.maxY,player.minY),GetDistance(player.maxZ,player.minZ)); } }else if (axis === 'y') { if (isplayer) { if (player.midY < 0 && !player.Yfirstsend) { player.maxY = player.midY; }else if (player.midY >= 0 && !player.Yfirstsend) { player.maxY = player.midY; } if (player.Yfirstsend) player.Yfirstsend = false; player.isplayer = true; player.midY = player.minY + Math.floor(((player.maxY - player.minY) / 2 )); SendFindCommand(player.maxX + 100 ,player.midY,player.maxZ,GetDistance(player.maxX,player.minX),GetDistance(player.midY,player.minY),GetDistance(player.maxZ,player.minZ)); }else { if (player.midY < 0 && !player.Yfirstsend) { player.minY = player.midY; }else if (player.midY >= 0 && !player.Yfirstsend) { player.minY = player.midY; } player.isplayer = false; player.midY = player.midY + Math.floor(((player.maxY - player.midY) / 2 )); SendFindCommand(player.maxX + 100 ,player.midY,player.maxZ,GetDistance(player.maxX,player.minX),GetDistance(player.midY,player.minY),GetDistance(player.maxZ,player.minZ)); } }else if (axis === 'z') { if (isplayer) { if (player.midZ < 0 && !player.Zfirstsend) { player.maxZ = player.midZ; }else if (player.midZ >= 0 && !player.Zfirstsend) { player.maxZ = player.midZ; } if (player.Zfirstsend) player.Zfirstsend = false; player.isplayer = true; player.midZ = player.minZ + Math.floor(((player.maxZ - player.minZ) / 2 )); SendFindCommand(player.maxX + 100 ,player.maxY + 100 ,player.midZ,GetDistance(player.maxX,player.minX),GetDistance(player.maxY,player.minY),GetDistance(player.midZ,player.minZ)); }else { if (player.midZ < 0 && !player.Zfirstsend) { player.minZ = player.midZ; }else if (player.midZ >= 0 && !player.Zfirstsend) { player.minZ = player.midZ; } player.isplayer = false; player.midZ = player.midZ + Math.floor(((player.maxZ - player.midZ) / 2 )); SendFindCommand(player.maxX + 100 ,player.maxY + 100 ,player.midZ,GetDistance(player.maxX,player.minX),GetDistance(player.maxY,player.minY),GetDistance(player.midZ,player.minZ)); } } } function onCommandOutput(type,args,ret) { if (!isOpen) { return; } var parsedObject = JSON.parse(args); var output = parsedObject.output; var parameters = output[0].Parameters; var message = output[0].message; var success = output[0].success; if (mode.time >= 100) { Helper.sendTip("错误,自动退出脚本"); isOpen = false; }else { mode.time ++; } if (player.maxX - player.minX <= 1 && player.maxZ - player.minZ <= 1 && player.maxZ - player.minZ <= 1 && player.inworld) { Helper.sendTip("§a[§6Success§a] §eName : §b" + player.name + " §eX : §b" + player.maxX + " §eY : §b" + player.maxY + " §eZ : §b" + player.maxZ); if (mode.teleport === 1) { Helper.sendTip("tp");//没实现 懒得写了 isOpen = false; }else if (mode.teleport === 2) { Player.teleportTo(player.maxX,player.maxY,player.maxZ) Helper.sendTip("tp"); isOpen = false; }else { isOpen = false; } }else if (player.inworld) { if (player.maxX - player.minX > 1) { Binary(parameters[1].includes(player.name),'x'); }else if (player.maxY - player.minY > 1) { Binary(parameters[1].includes(player.name),'y'); }else if (player.maxZ - player.minZ > 1) { Binary(parameters[1].includes(player.name),'z'); } } if (parameters[1].includes(player.name) && !player.inworld) { player.inworld = true; Binary(true,'x') }else if (!player.inworld) { if (message == 'commands.generic.permission.selector') { Helper.sendTip('§4[§4Warning§4] §e当前服务器无权限使用命令\n§4[§4Warning§4] §e脚本自动退出'); isOpen = false; }else { Helper.sendTip('§4[§4Warning§4] §e当前查找目标不在此维度\n§4[§4Warning§4] §e脚本自动退出'); isOpen = false; } } // Helper.sendTip("OK:" + args); } function onFormRet(id,ret) { if (!isOpen) { return; } if (id == 999) { var args = JSON.parse(ret); //Helper.sendTip("已经完成请求"+args); var playerlist = Entity.getPlayerList(); mode.findmode = args[1]; mode.teleport = args[3]; mode.teleporttime = args[4] * 1000; player.name = args[2]; if (args[2] == '') player.name = String(Entity.getEntityName(playerlist[args[0]])); if (!mode.findmode) { Helper.executeCommand('w @s @e[rm=0]'); }else if (mode.findmode == 4) { Helper.executeCommand("w @s @e[rm=0,type=" + family[mode.findmode] + "]"); }else{ Helper.executeCommand("w @s @e[rm=0,family=" + family[mode.findmode] + "]"); } Helper.sendTip("结束"); } } function Main() { var playerlist = Entity.getPlayerList(); var playercustom_form = []; // 初始化为空数组 for (var i = 0; i < playerlist.length; i++) { playercustom_form.push(String(Entity.getEntityName(playerlist[i]))); } //Helper.sendTip("已经完成请求:" + playercustom_form); var listcustom_form = { "type": "custom_form", "title": "查找玩家坐标", "content": [ { "type": "dropdown", "text": "选择玩家", "options": playercustom_form }, { "type": "dropdown", "text": "查找模式", "options": ["实体", "玩家", "生物", "非生物", "掉落物"] }, { "type": "input", "text": "目标名称", "default": "", "placeholder": "留空则会使用选择的玩家名称" }, { "type": "step_slider", "text": "传送方式", "steps": ["不传送", "原版命令", "插件命令"], "default": 0 }, { "type": "slider", "text": "n秒后传送", "min": 0, "max": 10, "step": 1, "default": 0 } ] }; //listcustom_form.content[0].options = playercustom_form; Helper.addForm(999,JSON.stringify(listcustom_form)); } Main()

伪装聊天

var ctx = null; try { ctx = System.getContext(); print("运行环境:BUSJ"); } catch(e) { ctx = com.mojang.minecraftpe.MainActivity.currentMainActivity.get(); print("运行环境:ModPE"); } var str = "§k§r\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"; function Main() { var playerlist = Entity.getPlayerList(); var playercustom_form = []; // 初始化为空数组 for (var i = 0; i < playerlist.length; i++) { playercustom_form.push(String(Entity.getEntityName(playerlist[i]))); } //Helper.sendTip("已经完成请求:" + playercustom_form); var listcustom_form = { "type": "custom_form", "title": "伪装玩家发言", "content": [ { "type": "dropdown", "text": "选择玩家", "options": playercustom_form }, { "type": "input", "text": "目标名称", "default": "", "placeholder": "留空则会使用选择的玩家名称" }, { "type": "input", "text": "发言内容", "default": "", "placeholder": "这里是发言内容" } ] }; //listcustom_form.content[0].options = playercustom_form; Helper.addForm(99,JSON.stringify(listcustom_form)); } function onFormRet(id,ret) { if (id == 99) { var args = JSON.parse(ret); Helper.sendTip("已经完成请求:" + args); var playerlist = Entity.getPlayerList(); var player=''; player = args[1]; var content = args[2]; if (args[1] == '') player = String(Entity.getEntityName(playerlist[args[0]])); Helper.executeCommand("tell @a " +str + "<"+player+"> " + content); } } // Main();

ES6语法介绍

// 定义 console.log 为 print 的别名 var console = { log: print }; // 使用 let 和 const 关键字 let variable = '这是一个用 let 声明的变量'; const constant = '这是一个用 const 声明的常量'; // 使用箭头函数 const add = (a, b) => a + b; // 使用模板字符串 const message = `变量的值是:${variable},常量的值是:${constant}`; // 使用解构赋值 const [first, second] = [1, 2]; // 使用默认参数值(不支持) //function greet(name = '世界') { // return `你好,${name}!`; //} //类(不支持) //class a { //} // 输出测试结果 let ni = `Hello, This is a multi-line string using backticks!`; console.log(ni); console.log(variable); console.log(constant); console.log(`1 + 2 = ${add(1, 2)}`); console.log(message); console.log(`第一个值:${first},第二个值:${second}`); //console.log(greet('Alice'));
Last modified: 15 三月 2025