box3速建代码介绍-123+填充

console.clear();
const admin = ['tater'];/*在此添加名称*/
var message_in_num_123 = {
'zero': { num: 0 },
'one': { num: 0 },
'two': { num: 0 },
'three': { num: 0 },
'add': { num: 0 },
'T': { num: 0 },
'A': { num: 0 },
'E': { num: 0 },
'H': { num: 0 },
'R': { num: 0 },
'N': { num: 0 },
};
const message_in_123 = Object.keys(message_in_num_123);
function getget1_123(message, entity) {
let shape = voxels.shape;
let data = [-1, -1, -1, -1, -1, -1];
let voxel_on = [0, 0];
let voxel_in = [0, 0];
for (var x = 0; x <= shape.x; x++) {
for (var y = 0; y <= shape.y; y++) {
for (var z = 0; z <= shape.z; z++) {
if (voxels.getVoxelId(x, y, z) === voxels.id(message)) {
if (data[0] == -1) {
data[0] = x;
data[1] = y;
data[2] = z;
voxel_on[0] = voxels.getVoxel(x, y + entity.pos_123, z);
voxel_in[0] = voxels.getVoxel(x, y + entity.pos_123 + 1, z);
}
else {
data[3] = x;
data[4] = y;
data[5] = z;
voxel_on[1] = voxels.getVoxel(x, y + entity.pos_123, z);
voxel_in[1] = voxels.getVoxel(x, y + entity.pos_123 + 1, z);
break;
}
}
}
}
}
return [data, voxel_on, voxel_in];
}
function getget2_123(message, entity) {
let shape = voxels.shape;
let va = [];
for (let x = 0; x <= shape.x; x++) {
for (let y = 0; y <= shape.y; y++) {
for (let z = 0; z <= shape.z; z++) {
if (voxels.getVoxelId(x, y, z) == voxels.id(message)) {
va.push(x, y, z, voxels.getVoxelId(x, y + entity.pos_123, z));
}
}
}
}
return va;
}
function sphere_123(vox, cx, cy, cz, radius) {
for (let x = cx - radius; x <= cx + radius; x++) {
for (let y = cy - radius; y <= cy + radius; y++) {
for (let z = cz - radius; z <= cz + radius; z++) {
let dx = x - cx; let dy = y - cy; let dz = z - cz;
if (Math.round(Math.sqrt(dx * dx + dy * dy + dz * dz)) <= radius) {
voxels.setVoxel(x, y, z, vox);
}
}
}
}
}
function cylinder_123(vox, cx, cy, cz, radius, height) {
for (let x = cx - radius; x <= cx + radius; x++) {
for (let z = cz - radius; z <= cz + radius; z++) {
let dx = x - cx; let dz = z - cz;
if (Math.round(Math.sqrt(dx * dx + dz * dz)) <= radius) {
for (let y = cy; y < cy + height; y++) {
voxels.setVoxel(x, y, z, vox);
}
}
}
}
}
async function start_time_123(entity) {
let shape = voxels.shape;
message_in_num_123 = {
'zero': { num: 0 },
'one': { num: 0 },
'two': { num: 0 },
'three': { num: 0 },
'add': { num: 0 },
'T': { num: 0 },
'A': { num: 0 },
'E': { num: 0 },
'H': { num: 0 },
'R': { num: 0 },
'N': { num: 0 },
};
for (let x = 0; x <= shape.x; x++) {
for (let y = 0; y <= shape.y; y++) {
for (let z = 0; z <= shape.z; z++) {
if (message_in_123.includes(voxels.name(voxels.getVoxel(x, y, z)))) {
message_in_num_123[voxels.name(voxels.getVoxel(x, y, z))].num++;
}
}
}
await sleep(0.01);
}
for (let key in message_in_123) {
if (message_in_num_123[message_in_123[key]].num == 0) continue;
console.log(message_in_123[key] + ':' + message_in_num_123[message_in_123[key]].num);
}
entity.player.directMessage('启动完成');
return;
}
const Fill_123 = {
'BLO': {/*方块*/
Fill_Block: async function (message, entity) {
let data = getget1_123(message, entity)[0];
let voxel_on = getget1_123(message, entity)[1];
if (data[3] === -1) return;
for (let x1 = (data[0] <= data[3] ? data[0] : data[3]); x1 <= (data[0] >= data[3] ? data[0] : data[3]); x1++) {
for (let y1 = (data[1] <= data[4] ? data[1] : data[4]); y1 <= (data[1] >= data[4] ? data[1] : data[4]); y1++) {
for (let z1 = (data[2] <= data[5] ? data[2] : data[5]); z1 <= (data[2] >= data[5] ? data[2] : data[5]); z1++) {
voxels.setVoxelId(x1, y1, z1, (voxel_on[0] == 0 ? voxel_on[1] : voxel_on[0]));
}
}
await sleep(0.01);
}
entity.player.directMessage('方块填充完毕')
}
},
'FIN': {/*查找*/
Fill_Block: async function (message, entity) {
let shape = voxels.shape;
let number = 0;
for (let x = 0; x <= shape.x; x++) {
for (let y = 0; y <= shape.y; y++) {
for (let z = 0; z <= shape.z; z++) {
if (voxels.getVoxelId(x, y, z) == voxels.id(message)) {
number++
}
}
}
}
entity.player.directMessage(` ${message} 方块有 ${number} 个`)
}
},
'CIR': {/*圆*/
Fill_Block: async function (message, entity) {
let va = getget2_123(message, entity);
for (let x1 = 0; x1 < va.length; x1 += 4) {
sphere_123(va[x1 + 3], va[x1], va[x1 + 1], va[x1 + 2], entity.rad_123);
await sleep(0.01);
}
entity.player.directMessage(`圆建造完成,累计 ${va.length / 4} 个`)
}
},
'TAL': {/*圆柱*/
Fill_Block: async function (message, entity) {
let va = getget2_123(message, entity);
for (let x1 = 0; x1 < va.length; x1 += 4) {
cylinder_123(va[x1 + 3], va[x1], va[x1 + 1], va[x1 + 2], entity.rad_123, entity.hei_123);
await sleep(0.001);
}
entity.player.directMessage(`圆柱建造完成,累计 ${va.length / 4} 个`)
}
},
'REP': {/*方块替换*/
Fill_Block: async function (message, entity) {
let data = getget1_123(message, entity)[0];
let voxel_on = getget1_123(message, entity)[1];
let voxel_in = getget1_123(message, entity)[2];
if (data[3] === -1) return;
for (let x1 = (data[0] <= data[3] ? data[0] : data[3]); x1 <= (data[0] >= data[3] ? data[0] : data[3]); x1++) {
for (let y1 = (data[1] <= data[4] ? data[1] : data[4]); y1 <= (data[1] >= data[4] ? data[1] : data[4]); y1++) {
for (let z1 = (data[2] <= data[5] ? data[2] : data[5]); z1 <= (data[2] >= data[5] ? data[2] : data[5]); z1++) {
if (voxels.getVoxel(x1, y1, z1) == (voxel_in[0] == 0 ? voxel_in[1] : voxel_in[0])) {
voxels.setVoxelId(x1, y1, z1, (voxel_on[0] == 0 ? voxel_on[1] : voxel_on[0]));
}
}
}
await sleep(0.001);
}
entity.player.directMessage('方块替换完毕')
}
},
};
function init_123(entity) {
entity.pos_123 = 1;
entity.rad_123 = 1;
entity.hei_123 = 1;
entity.player.directMessage('123+已自动初始化');
};
world.onChat(async ({ entity, message }) => {
if (!admin.includes(entity.player.name)) return;
if (!entity.pos_123) { await init_123(entity); }
let message_new = message.split(';');
for (let a = 0; a < message_new.length; a++) {
let c = message_new[a].split(/\s+/);
if (c[0] !== 'A') { return; }
switch (c[1]) {
case 'INT':
console.clear();
console.log(
`名称:123+填充\n
作者:tater\n
鸣谢:屑阿鱼 三角函数 Nelson 及其他试用、提供技术支持者\n
用法:\n
(注意空格)(程序可用分号间隔)(BLO请注意关注地图指定方块数量)\n
0.A STA\n
可用方块:\n${message_in_123}\n
(没错程序要从0开始数owo)可查看地图被占用方块数\n
显示在控制台,显示为 可用方块名+此方块数量\n
1.A BLO 方块名称\n
如A BLO add\n
填充两个方块形成的长方体/正方体\n
只需在其中一个方块的POS位置放置要填充的方块即可(不放为清除)\n
2.A FIN 方块名称\n
查找方块有多少个,不限制方块名称\n
3.A CIR 方块名称\n
速建球,半径为RAD\n
只需要放置一个方块,可同时速建多个\n
4.A TAL 方块名称\n
速建圆柱,半径为RAD,高度为HEI\n
只需要放置一个方块,可同时速建多个\n
5.A REP 方块替换\n
类似BLO的放置方法,但需要在其中一个方块的POS位置上放置两个方块\n
从下往上为替换方块、被替换方块(不放为清除)\n
6.A POS RAD HEI\n
例如:\n
A POS 1\n
A RAD 1\n
A HEI 1\n
默认值:1\n
7.clear\n
清空控制台\n
留言:如想要其他速建或给出建议请私聊(Q在总群能搜索到)\n
谢谢@@`,
);
continue;
case 'STA':
await start_time_123(entity); continue;
case 'FIN':
await Fill_123[c[1]].Fill_Block(c[2], entity); continue;
case 'POS':
entity.pos_123 = parseInt(c[2]);
if (!entity.pos_123 || entity.pos_123 == 0) {
entity.pos_123 = 1;
} entity.player.directMessage(`已将pos设置为 ${entity.pos_123}`);
continue;
case 'RAD':
entity.rad_123 = parseInt(c[2]);
if (!entity.rad_123 || entity.rad_123 == 0) {
entity.rad_123 = 1;
} entity.player.directMessage(`已将rad设置为 ${entity.rad_123}`);
continue;
case 'HEI':
entity.hei_123 = parseInt(c[2]);
if (!entity.hei_123 || entity.hei_123 == 0) {
entity.hei_123 = 1;
} entity.player.directMessage(`已将hei设置为 ${entity.hei_123}`);
continue;
case 'clear':
console.clear();
continue;
default:
await Fill_123[c[1]].Fill_Block(c[2], entity);
continue;
}
}
})