用户:
MR_Wolf查看:0 回复:0 评论:0 创建时间:2024-01-12T13:34:26
先点赞后复制
讲解一下原理 获取的坐标是为了更方便复制的位置
范围就是避免将其余东西复制进去
玩家输入后两者相减
再到复制的地图输入新的坐标[]然后复制
亲测有效[]禁止驳回
world.onChat(({ entity: e, message: m }) => {if(e.isPlayer){if (m === '菜单')e.data()}});
world.onPress(({ entity: e, button: b }) => {if (b === 'action1') e.data();});
GameEntity.prototype.data = async function () {
let e = this, data = [];
let sel = await e.dlgSel(e.player.name, '尊敬的使用者你好\n请选择功能', ['建筑复制', '建筑制造']);
if (sel) {
let v = sel.value;
if (v === '建筑制造') {
let d = JSON.parse(await e.dlgInput(v, '请输入建筑复制的数据'));
let pos = JSON.parse(await e.dlgInput(v, '起始坐标\n实例: {"x":1,"y":1,"z":1}(打括号也需要[]作者用parse方法和GameVector3弄的自己看着办吧)\n注:不符合要求会导致速建出问题'));
pos = new GameVector3(pos.x, pos.y, pos.z);
if (d && pos) {
let len = Object.keys(d).length;
for (let num = 0; num < len; num++) {
let data = d[num];
voxels.setVoxel((pos.x - data[0]), (pos.y - data[1]), (pos.z - data[2]), data[3]);
if (num % 50 === 0) {
await sleep(2);
e.player.cancelDialogs();
e.dlgMsg(v, `建造进度: ${num}/${len}`);
}
}
e.player.cancelDialogs();
await e.dlgMsg(v, '建造成功');
}
} else if (v === '建筑复制') {
let a = await e.dlgInput(v, 'x轴的大小\n用/隔开\n注:坐标由小到大,不符合要求会导致速建出问题');
let b = await e.dlgInput(v, 'y轴的大小\n用/隔开\n注:坐标由小到大,不符合要求会导致速建出问题');
let c = await e.dlgInput(v, 'z轴的大小\n用/隔开\n注:坐标由小到大,不符合要求会导致速建出问题');
let pos = JSON.parse(await e.dlgInput(v, '起始坐标\n实例: {"x":1,"y":1,"z":1}(打括号也需要[]作者用parse方法和GameVector3弄的自己看着办吧)\n注:不符合要求会导致速建出问题'));
pos = new GameVector3(pos.x, pos.y, pos.z);
if (!a || !b || !c || !pos) return;
let posx = a.split('/'), posy = b.split('/'), posz = c.split('/');
let data = [], len = (posx[1] - posx[0]) * (posy[1] - posy[0]) * (posz[1] * posz[0]);
for (let x = posx[0]; x <= posx[1]; x++) {
for (let z = posz[0]; z <= posz[1]; z++) {
for (let y = posy[0]; y <= posy[1]; y++) {
let vox = voxels.getVoxel(x, y, z);
if (vox) data.push(`[${pos.x - x},${pos.y - y},${pos.z - z},${vox}]`);
}
}
e.player.cancelDialogs();
e.dlgMsg(v, `复制进度: ${Object.keys(data).length}/${len}`);
await sleep(10);
}
e.player.cancelDialogs();
e.player.directMessage('复制完成!!!\n请将其复制进建筑制造');
await e.dlgSel(null, '['+data+']', ['复制好了']);
}
}
};
/**定义内容 */
GameEntity.prototype.dlgMsg = async function (title, content, hasArrow) {
let sel = await this.player.dialog({
type: 'text',
title,
content,
hasArrow,
});
return sel;
};
GameEntity.prototype.dlgInput = async function (title, content) {
let sel = await this.player.dialog({
type: 'input',
title,
content,
});
return sel;
};
GameEntity.prototype.dlgSel = async function (title, content, options) {
let sel = await this.player.dialog({
type: 'select',
title,
content,
options,
});
return sel || '';
};
点赞!!!收藏!!!转发!!!评论!!!