【网易基岩版】全自动创建二维地皮教程
大家看到这个专栏应该已经知道全自动地皮是什么概念了吧 那么我们直接切入正题 一维地皮与二维的区别在于 前者是一条射线不断延伸 后者以某种规律将地皮以平面的方式分布 那么说到平面,我们要先了解分布的规律
以这张图片为例开讲 图中红色小框表示每一块地皮 横轴表示横坐标 纵轴表示纵坐标 蓝色数字表示生成顺序
观察生成顺序,可以看出我的思路为从左下样板地皮开始一层层向外包裹 观察横纵坐标的变化,我们可以得出三种情况 ①纵坐标为0,横纵坐标交换,纵坐标加1 ②纵坐标大于横坐标,横坐标加1 ③纵坐标小于等于横坐标,纵坐标减1直到减为0,再次进行①的计算
这三种情况在我的世界中可以用计分板的operation子命令实现,初始坐标为(0,0),添加标签开始计算 在计算完成之后用二分法传送玩家到指定位置生成地皮,横纵坐标各二分一轮,传送的距离取决于地皮的大小,例如我的样板地皮为33x33,那么传送距离就是33格 传送的起始点均为样板地皮的中心点 传送完毕清除标签
下面为指令部分
创建积分项x,x1,x2,z,z1,z2 x2,z2用于计算,x1,z1用于情况讨论,x,z用于储存 生成盔甲架命名为dp 情况1部分: execute @a[tag=ks] ~~~ scoreboard players operation @e[name=dp,scores={z=0}] x >< @e[name=dp,scores={z=0}] z execute @a[tag=ks] ~~~ scoreboard players add @e[name=dp] z 1 execute @e[name=dp] ~~~ tellraw @a {"rawtext":[{"text":"目前坐标"},{"score":{"objective":"x","name":"@s"}},{"text":","},{"score":{"objective":"z","name":"@s"}}]} execute @a[tag=ks] ~~~ scoreboard players operation @a[tag=ks] x = @e[name=dp] x execute @a[tag=ks] ~~~ scoreboard players operation @a[tag=ks] z = @e[name=dp] z execute @a[tag=ks] ~~~ tag @s add ks1 execute @a[tag=ks] ~~~ tag @s remove ks 情况2和情况3部分: execute @a[tag=ks] ~~~ scoreboard players operation @e[name=dp,scores={z=!0}] z1 = @e[name=dp,scores={z=!0}] z execute @a[tag=ks] ~~~ scoreboard players operation @e[name=dp,scores={z=!0}] x1 = @e[name=dp,scores={z=!0}] x execute @a[tag=ks] ~~~ scoreboard players operation @e[name=dp,scores={z=!0}] z1 -= @e[name=dp,scores={z=!0}] x1 execute @a[tag=ks] ~~~ scoreboard players add @e[name=dp,scores={z1=..0}] z -1 execute @e[name=dp] ~~~ tellraw @a {"rawtext":[{"text":"目前坐标"},{"score":{"objective":"x","name":"@s"}},{"text":","},{"score":{"objective":"z","name":"@s"}}]} execute @a[tag=ks] ~~~ scoreboard players add @e[name=dp,scores={z1=1..}] x 1 execute @e[name=dp] ~~~ tellraw @a {"rawtext":[{"text":"目前坐标"},{"score":{"objective":"x","name":"@s"}},{"text":","},{"score":{"objective":"z","name":"@s"}}]} execute @a[tag=ks] ~~~ scoreboard players operation @a[tag=ks] x = @e[name=dp] x execute @a[tag=ks] ~~~ scoreboard players operation @a[tag=ks] z = @e[name=dp] z execute @a[tag=ks] ~~~ tag @s add ks1 execute @a[tag=ks] ~~~ tag @s remove ks 二分计算部分 先将x,z分数赋值为x2,z2。以x2,z2的分数用来计算。tp到样板地皮中心(每个人都不同,勿照抄,后面二分传送距离为分数乘边长,例如我的地皮边长为33,256x33=8448): execute @a[tag=ks1] ~~~ tp @a[tag=ks1] -30 1 30 x轴: execute @a[tag=ks1,scores={x2=256..}] ~~~ tp @a[tag=ks1,scores={x2=256..}] ~8448~~ execute @a[tag=ks1,scores={x2=256..}] ~~~ scoreboard players remove @a[tag=ks1,scores={x2=256..}] x2 256 execute @a[tag=ks1,scores={x2=128..}] ~~~ tp @a[tag=ks1,scores={x2=128..}] ~4224~~ execute @a[tag=ks1,scores={x2=128..}] ~~~ scoreboard players remove @a[tag=ks1,scores={x2=128..}] x2 128 ……(依次为x=128-63-32-16-8-4-2-1) execute @a[tag=ks1,scores={x2=1..}] ~~~ tp @a[tag=ks1,scores={x2=1..}] ~33~~ execute @a[tag=ks1,scores={x2=1..}] ~~~ scoreboard players remove @a[tag=ks1,scores={x=1..}] x2 1 z轴同理 创建地皮部分(按照地皮大小调整): execute @a[tag=ks1] ~~~ structure load dp ~-16 ~-5 ~-16 execute @a[tag=ks1] ~~~ playsound random.levelup @s execute @a[tag=ks1] ~~~ title @s title §a§l计算完成! execute @a[tag=ks1] ~~~ fill ~-25 ~ ~-25 ~25 ~ ~25 air 0 replace structure_block execute @a[tag=ks1] ~~~ tag @s remove ks1
至此指令完成。 补充1: 重置指令: execute @e[name=dp] ~~~ scoreboard players set @s x 0 execute @e[name=dp] ~~~ scoreboard players set @s z 0 execute @e[name=dp] ~~~ scoreboard players set @s x1 0 execute @e[name=dp] ~~~ scoreboard players set @s z1 0 开始计算: tag @a[目标选择器] add ks 补充2: 二分法在游戏里的意思即为将一个数字分为2^n之和,用于坐标和距离互相转化等应用 站内有关于二分的详细教程,讲的都比我好
谢谢各位的观看!看完不要忘记给个三连哦,这对我非常重要!(σ≧︎▽︎≦︎)σ。