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
??????????鳴謝:屑阿魚 三角函數(shù) Nelson 及其他試用、提供技術(shù)支持者\(yùn)n
??????????用法:\n
??????????(注意空格)(程序可用分號間隔)(BLO請注意關(guān)注地圖指定方塊數(shù)量)\n
??????????0.A STA\n
??????????可用方塊:\n${message_in_123}\n
??????????(沒錯程序要從0開始數(shù)owo)可查看地圖被占用方塊數(shù)\n
??????????顯示在控制臺,顯示為 可用方塊名+此方塊數(shù)量\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
??????????默認(rèn)值:1\n
??????????7.clear\n
??????????清空控制臺\n
??????????留言:如想要其他速建或給出建議請私聊(Q在總?cè)耗芩阉鞯?\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設(shè)置為 ${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設(shè)置為 ${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設(shè)置為 ${entity.hei_123}`);
????????continue;
??????case 'clear':
????????console.clear();
????????continue;
??????default:
????????await Fill_123[c[1]].Fill_Block(c[2], entity);
????????continue;
????}
??}
})