猫史档案馆


123+填充速建(更新)

用户:tatertater查看:0 回复:1 评论:0 创建时间:2023-07-16T18:27:00


速建代码

改了下已知bug

用法看视频

代码以下面为主,是新修改的

暂时没严重bug(别乱用)

*除非出重喵ug,不再改

新速建代码下周发,视频末尾有预告

123+只适用于官方给定大小(选择大小的)地图

非选择地图大小可选方块无法使用等Ct填充

代码如下:

/*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 },
};
var ability_123 = ['STA', 'FIN', 'POS', 'RAD', 'BLO', 'CIR', 'TAL', 'REP', 'clear', 'INT'];
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') { continue; }
        if (!ability_123.includes(c[1])) { entity.player.directMessage('wrong'); console.warn(`Warn: ${c[1]} is not defined`); continue; }
        switch (c[1]) {
            case 'INT':
                console.clear();
                console.log(
                    `名称:123+填充\n
                    作者:tater\n
                    鸣谢:屑阿鱼 三角函数 Nelson 及其他试用、提供技术支持者\n
                    介绍:\n
                    适用于官方 给 定 大 小 的地图速建\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;
        }
    }
})


回复

上一页1 页 / 共 1下一页
NelsonNelson

ddd

点赞0


评论