猫史档案馆


【BOX3】建筑复制与旋转建筑

用户:Box3_是小黄人呀Box3_是小黄人呀查看:10 回复:13 评论:10 创建时间:2023-06-29T12:26:13


建筑复制不用多说,有岛民已经写过了,如下

代码如下(原作者可没有给直接复制哦)

async function copyvox(sx,ex,sy,ey,sz,ez) {
    console.error('./*-----------*/;');
    world.say('-----')
    world.say('tppeing...')
    var ts = [];
    for (var x =sx; x <= ex; x++) {
        for (var y = sy; y <= ey; y++) {
            for (var z = sz; z <= ez; z++) {
                if(voxels.getVoxelId(x,y,z)==0) continue  //排除空气;
                ts.unshift([x - sx,y - sy,z - sz,voxels.getVoxel(x,y,z)]) //添加数据
            }
        }
    };
    await sleep(1000);
    world.say('finally!');
    console.log(`const ts=${JSON.stringify(ts)};`);
}

copyvox (nuber, number, number, number, number, number)

原作者没有考虑到旋转码问题,其实将

voxels.getVoxel

改成

voxels.getVoxelId

即可

 

那旋转建筑呢?

我们在数学中学过 平面坐标系,可以以上知识得到

center_image

只要将下面一行代码

voxels.setVoxelId(zx.x + ts[i][0], zx.y + ts[i][1], zx.z + ts[i][2], ts[i][3])
改下符号即可,比如90°
voxels.setVoxelId(zx.x + ts[i][0], zx.y + ts[i][1], zx.z - ts[i][2], ts[i][3])

 

 

 

你以为旋转建筑就此完结?

不不不!不不不!

我通过VOXEL 模型加密法 完成了以下代码

/*-----------------------------------------区域建筑速建------------------------------------------------------*/
function decrypt (ts) {
    ts = ts.join(",").split(",")
    ts_1 = []
    for (var i = 12,b=0; i <= ts.length;i += 2) {
        for (var a = 0;a <= ts[i];a ++) {
        ts_1[b] = ts[i+1]
        b ++
    }} return (ts_1)
}
function copybuild (sx,ex,sy,ey,sz,ez) {
    copybuildlist = []
    duplicate = 0
    copybuildlist.push (ex-sx + 1,0,0,0,ey-sy + 1,0,0,0,ez-sz + 1,0,0,0)
    for(var x = sx; x <= ex;x++) {
    for(var y = sy; y <= ey;y++) {
    for(var z = sz; z <= ez;z++) {
        var xyz = [x,y,z]
        if (!duplicate) {
            duplicate = [0,voxels.getVoxelId(x,y,z)]
        } else if (duplicate[1] == voxels.getVoxelId(x,y,z)) {
            duplicate[0] ++
        } else {
            copybuildlist.push (duplicate)
            duplicate = [0,voxels.getVoxelId(x,y,z)]
            if (duplicate[1] == 0) {
                duplicate[0] = 0
            }
        }
    }}} 
    if (duplicate[1] == voxels.getVoxelId(xyz[0],xyz[1],xyz[2])) {
        copybuildlist.push (duplicate)
    } else {
        copybuildlist.push (duplicate)
        copybuildlist.push (0,voxels.getVoxelId(xyz[0],xyz[1],xyz[2]))
    }
    return (copybuildlist)
}
async function building (xyz,ts,rotate,spacing,repeat,repeatdirection,repeatspacing,Deleteoriginal,Deletegeneration,ifsave,ifreport) {    //xyz坐标,rotate旋转,spacing[x,y,z]间距  批量:repeat重复,repeatdirection方向,repeatspacing间距   Deleteoriginal是否删除原建筑,Deletegeneration是否删除生成区域方块,ifsave是否生成建筑坐标报告,ifreport是否生成报告
    const ts_1 = decrypt(ts)
    const buildingbig = [ts[0],ts[4],ts[8]]
    ts = ts.join(",").split(",")
    for (var a = 1; a <= repeat;a ++) {
        for(var x = 0,i = 0; x < ts[0];x++) {
            for(var y = 0; y < ts[4];y++) {
                for(var z = 0; z < ts[8];z++) {
                    await sleep (100)
                        voxels.setVoxelId (xyz[0] + eval(rotate[0]) * rotate[3] * [spacing[0] + 1],xyz[1] + eval(rotate[1]) * rotate[4] * [spacing[1] + 1],xyz[2] + eval(rotate[2]) * rotate[5] * [spacing[2] + 1],ts_1[i])
                        i ++
        }}} 
        xyz[repeatdirection[0]] += [buildingbig[repeatdirection[0]] * [spacing[repeatdirection[0]] + 1] + repeatspacing - 1] * repeatdirection[1]// eval将字符串转换为变量名
    } world.say ("完成")
}
building ([150,19,150],copybuild(140,142,9,11,148,150),['x','y','z',1,1,-1],[1,1,1],3,[1,-1],2,1,1,1,1)

 

 

那什么是模型加密法?怎么加密呢?

我们下载模型文件,转.txt,得到center_image

上面估计是4块调色板的存档,而"ENCODEVOXELS" 方块密码  就是模型方块的存档

通过研究发现

前12位,模型大小,以000隔开
后面对应方块,遍历按什么顺序暂时跳过,以两个数表示,第一个代表重复多少次,但-1,后一位代表着在调色盘的位置
剩余的不多说     此算法不仅可以缩短建筑的存档,还可 建筑与旧版模型互转!!! 可吸收旧版编辑器的功能,大大减少建筑时间!!!     插件【WorldBOX3】已经在编码中center_image center_image大致UI如上   代码有点懵)招人帮忙写) 招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~   (稿件被卡了一次,所以随意了点)      


回复

上一页1 页 / 共 1下一页
Box3_是小黄人呀Box3_是小黄人呀

非常好,排版全没)

点赞1


评论


Box3_是小黄人呀Box3_是小黄人呀

codepromax 还有源代码复制 功能emotion_编程猫_紧张

点赞0


评论


被遗忘的屑被遗忘的屑

emotion_编程猫_加油

点赞0


评论


YDS尹子YDS尹子

模型转换器要被抢饭碗力(悲

 

点赞0


评论


萌新大佬萌新大佬

你是否听说过jsdoc(

点赞0


评论


萌新大佬萌新大佬

https://shequ.codemao.cn/community/461181

点赞0


评论


Box3_是小黄人呀Box3_是小黄人呀

emotion_编程猫_翻白眼结构方块 似乎不能满足大部分建筑玩家,我在想要不要试试 MC 创世神模组(显然我没玩过)

点赞0


评论


依云大帝统治论坛依云大帝统治论坛

牛,。逼我,。喵,编程大蛇,膜拜

点赞0


评论


1086DRRalsei1086DRRalsei

报错

点赞0


评论


145a145a

nb

点赞0


评论


WitheredWonderWitheredWonder

6.

点赞0


评论


Box3_是小黄人呀Box3_是小黄人呀

emotion_编程猫_紧张暑假时,试了一下模型转模型,非复杂模型可以搞定,但一复杂模型就开始乱码

项目 暂时不会关心(这一学期,寒假再说)

项目搞定后,可以搞定,模型与建筑的互转,以及地图画,使用模型编辑器快速建筑等等

 

ChatAI的发展,现在有个想法:让AI完成超高精度超完善的场景生成(PRO版、包括方块、包括模型拼接)

似乎…)

 

 

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

想起我之前做空岛战争的时候也写了同样功能的代码为了复制建筑)

点赞0


评论