用户:
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
即可
那旋转建筑呢?
我们在数学中学过 平面坐标系,可以以上知识得到

只要将下面一行代码
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,得到
上面估计是4块调色板的存档,而"ENCODEVOXELS" 方块密码 就是模型方块的存档
通过研究发现
前12位,模型大小,以000隔开
后面对应方块,遍历按什么顺序暂时跳过,以两个数表示,第一个代表重复多少次,但-1,后一位代表着在调色盘的位置
剩余的不多说
此算法不仅可以缩短建筑的存档,还可
建筑与旧版模型互转!!!
可吸收旧版编辑器的功能,大大减少建筑时间!!!
插件【WorldBOX3】已经在编码中
大致UI如上
代码有点懵)招人帮忙写)
招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~招人~
(稿件被卡了一次,所以随意了点)
Box3_是小黄人呀
暑假时,试了一下模型转模型,非复杂模型可以搞定,但一复杂模型就开始乱码
项目 暂时不会关心(这一学期,寒假再说)
项目搞定后,可以搞定,模型与建筑的互转,以及地图画,使用模型编辑器快速建筑等等
ChatAI的发展,现在有个想法:让AI完成超高精度超完善的场景生成(PRO版、包括方块、包括模型拼接)
似乎…)
点赞0
评论