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