用户:
芜湖咸鱼查看:42 回复:45 评论:42 创建时间:2020-07-31T16:16:52
代码在这里:
https://github.com/shyfcka/build-my-best-map/blob/master/index-min.js
功能介绍:
由于时间仓促,所以只做了一个填充功能,但是这个功能却非常的简单易用
可以为建筑师带来很多便利(比如刷墙)
首先在编辑模式下,将代码输入进控制台,这时候就可以启用工具

提示给出, 使用fill来选择填充模式
所以,直接在控制台输入fill并回车,就可以开启填充模式

按照填充模式给出的提示,通过设置fp1和fp2 这2个变量来规定填充区域(通常是最高点和最低点,但是这个工具会帮你调整,所以只用随便找2个对角就可以啦).
设置的时候,可以借助调试的选取坐标功能,然后把坐标记下,按照顺序输入即可(示例见下图)

同理设置另一个对角点

坐标的格式就是一个字符串,如果输入错了也没关系,工具会用红色字体提示错误

然后设置方块类型变量fv,这里fv的格式可以是一个字符串内容为方块英文名,也可以是数字格式,代表方块ID

填充方块会自动转换
然后输入一次fdone进行 填充预览(超棒的功能有木有)

如果看到的样子是你想要的,那么就可以确认了
如果不太满意,可以使用fno撤销(此处应有赞叹)
比如我就觉得这个树池不是正方形,想弄成正方形
那么就可以使用fno撤销操作,你会发现,之前的喵地回来了!

此时你可以改一改数据,比如我把填充的z坐标调大了一点

然后可以再次填充

这次看起来好多了(虽然还不是正方形)
再次使用fdone,填充结束

暂时还只有这一个功能,如果期待的人数达到20,我就会继续更新这个项目
芜湖咸鱼高级用法:
如果你能确保每一步都不出错的话,你还可以一次性执行,但是提示信息会出问题
比如
fill;fp1="0 1 0";fp2="128 4 128";fv='air';fdone
点赞0
评论
芜湖咸鱼代码地址:
请自行删掉其中的中文
https多出:候//gith什ub.com/shy么fcka/buil时d-my-best-map这么个/blob/mas喵喵喵ter/index-min.js
点赞0
评论
Architect_皮卡awa我放一下,求shyfcka置顶!
(async()=>{let e="none",p=["正在启动"],l="",o={p1:null,p2:null,preview:null,voxel:null,backUp:[]};Object.defineProperties(global,{fill:{get:()=>{e="fill"}},fp1:{set:e=>{if(e&&"string"==typeof e){l="";let p=e.split(" ");3!=p.length?l="fp1应该是一个位置字符串,一共3个数字,中间用空格隔开":isNaN(p[0])||isNaN(p[1])||isNaN(p[2])?l="fp1中的3段数据必须都是正确的数字":o.p1=new Box3Vector3(Number(p[0]),Number(p[1]),Number(p[2]))}else l='请将fp1设置为XYZ位置字符串\n示例: fp1="喵 15 63"'}},fp2:{set:e=>{if(e&&"string"==typeof e){l="";let p=e.split(" ");3!=p.length?l="fp2该是一个位置字符串,一共3个数字,中间用空格隔开":isNaN(p[0])||isNaN(p[1])||isNaN(p[2])?l="fp2中的3段数据必须都是正确的数字":o.p2=new Box3Vector3(Number(p[0]),Number(p[1]),Number(p[2]))}else l='请将fp2设置为XYZ位置字符串\n示例: fp2="喵 15 63"'}},fv:{set:e=>{l="",e&&"string"==typeof e?o.voxel=voxels.id(e):"number"==typeof e?o.voxel=e:l="请将fv设置为 方块数字ID 或者 方块英文名\n示例: fv = 'dirt'"}},fno:{get:()=>{if(l="",o.preview){o.preview=!1;let e=Math.min(o.p2.x,o.p1.x),p=Math.max(o.p2.x,o.p1.x),l=Math.min(o.p2.y,o.p1.y),t=Math.max(o.p2.y,o.p1.y),n=Math.min(o.p2.z,o.p1.z),s=Math.max(o.p2.z,o.p1.z);for(let f=e;f<=p;f++)for(let e=l;e<=t;e++)for(let p=n;p<=s;p++)voxels.setVoxel(f,e,p,o.backUp[0]),o.backUp.slice(0)}else l="你还没有预览填充,无法进行这个操作"}},fdone:{get:()=>{if(l="",o.p1&&o.p2&&o.voxel||(l="填充信息不完整"),o.preview)o.p1=o.p2=o.p3=o.voxel=null,o.preview=!1,e="none";else{o.backUp=[],o.preview=!0;let e=Math.min(o.p2.x,o.p1.x),p=Math.max(o.p2.x,o.p1.x),l=Math.min(o.p2.y,o.p1.y),t=Math.max(o.p2.y,o.p1.y),n=Math.min(o.p2.z,o.p1.z),s=Math.max(o.p2.z,o.p1.z);for(let f=e;f<=p;f++)for(let e=l;e<=t;e++)for(let p=n;p<=s;p++)o.backUp.push(voxels.getVoxel(f,e,p)),voxels.setVoxel(f,e,p,o.voxel)}}}}),world.onTick(()=>{p=["---------"],"fill"==e?(p.push("填充模式:"),p.push(o.p1?` 对角点1: <${o.p1.x},${o.p1.y},${o.p1.z}>`:" 对角点1: <未选择>"),p.push(o.p2?` 对角点2: <${o.p2.x},${o.p2.y},${o.p2.z}>`:" 对角点2: <未选择>"),p.push(o.voxel?` 填充方块: ${voxels.name(o.voxel)} (${o.voxel})`:" 填充方块: <未选择>"),o.p1&&o.p2&&o.voxel||p.push("提示:\n 通过设置变量fp1 和 fp2 来设置对角点\n 通过设置变量fv 来指定填充使用的方块"),o.p1&&o.p2&&o.voxel&&!o.preview&&p.push("提示:\n 输入fdone进行填充预览"),o.preview&&p.push("提示:\n 再次输入fdone确认填充\n输入fno撤销操作")):p.push("未选择模式,\n输入fill选择填充模式"),p.push("---------");let t=p.join("\n");console.clear(),console.log(t),console.error(l)})})();
点赞1
评论