pe_commander
本帖最后由 pe_commander 于 2022-2-11 21:07 编辑

一、情景引入
  众所周知,一个世界是只有一个龙蛋的,只有首先到达末地并击杀末影龙的玩家才能获得这一稀世珍宝。
  而自从末地被史蒂夫和亚历克斯们发现,抢夺龙蛋的战争就开始了。
  无数的亚历克斯失败于这场战争,无数的史蒂夫回到了他们的重生点。
  (&#@¥%......)← 此处省略一万字

    因此,为了防止世界被破坏,为了保护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反......正派角色:

     腐竹!

     管理员!

    我们是穿梭在服务器中的权限狗!黑洞,黑色的龙蛋正等着我们!

二、流程设计
  根据杀龙过程中龙窝的状态,检测可以分为4个阶段:
(1)平常的状态。这一步检测四个末影水晶,检测到了就进入下一阶段;

图注:平平常常

(2)传送门的水晶发出光束的过程。这一步的传送门方块是消失了的,过程可能会失败(打破水晶),不过无论成败都会使四个水晶消失,于是检测不到4个水晶就进入下一阶段;

图注:复活中...

(3)一个用来判断有没有召唤成功的阶段。根据成功时传送门方块仍是消失的,失败时传送门方块会重新出现,可设计两个对龙窝表面的检测:
   检测空气,成功则回到阶段1;
   检测传送门方块,成功则进入下一阶段;

图注:阶段3中,召唤成功的龙窝。可以看到传送门方块是消失的

(4)打龙阶段。龙被打死后传送门方块会重新出现,于是检测传送门方块,检测到了就进行屠龙成功的处理,并回到阶段1。

三、方块实现
1. 提示
  a. 装置设在龙窝地下,用tickingarea设置常加载;
  b. 连锁方块无说明均为始终开启、有条件;
  c. 循环方块的延迟均可以设为0以上,楼主试验时用的是20。

2. 数据项说明
  a. 计分项
    Dragon
       cAmount:当前龙窝上处于召唤位置的水晶数量(crystal amount);
       stage:第二部分提到的,挑战龙的阶段。
  b. 标签
    dragon_killer:杀死龙的玩家会带上这个标签;
    egg_gived:已经获得过龙蛋的玩家会带上这个标签;

3. 指令
每段代表一个命令方块链,段与段间用空格分隔,链首的是循环方块,其后的是连锁方块。
  a. 水晶计数器
   在阶段1、2执行:scoreboard players test stage Dragon 1 2
   计数输出清零:scoreboard players set cAmount Dragon 0
   位置1:testfor @e[type=ender_crystal,x=0,y=61,z=-3,dx=0,dy=0,dz=0]
   位置2:testfor @e[type=ender_crystal,x=0,y=61,z=3,dx=0,dy=0,dz=0]
   位置3:testfor @e[type=ender_crystal,x=3,y=61,z=0,dx=0,dy=0,dz=0]
   位置4:testfor @e[type=ender_crystal,x=-3,y=61,z=0,dx=0,dy=0,dz=0]
   计数输出置4:scoreboard players set cAmount Dragon 4

  stage 1
  若水晶数量为4,进入下一阶段。连锁方块均为有条件的
   在阶段1执行:scoreboard players test stage Dragon 1 1
   接收计数器结果:scoreboard players test cAmount Dragon 4 4
   进入下一阶段:scoreboard players set stage Dragon 2

  stage 2
  水晶数量归零后,进入下一阶段。连锁方块均为有条件的
   在阶段2执行:scoreboard players test stage Dragon 2 2
   接收计数器结果:scoreboard players test cAmount Dragon 0 0
   进入下一阶段:scoreboard players set stage Dragon 3

  stage 3
  检测到传送门方块时,回阶段1,检测到空气时,进入下一阶段。连锁方块均为有条件的
   检测到传送门方块
    在阶段3执行:scoreboard players test stage Dragon 3 3
    检测传送门:testforblock 1 60 0 end_portal
    回到stage0:scoreboard players set stage Dragon 0
   检测到空气
    在阶段3执行:scoreboard players test stage Dragon 3 3
    检测空气:testforblock 1 60 0 air
    进入下一阶段:scoreboard players set stage Dragon 4

  stage 4
   检测到传送门方块时,将标签dragon_killer添加到处于末地的所有玩家,回到阶段0
   在阶段4执行:scoreboard players test stage Dragon 4 4
   检测传送门方块:testforblock 1 60 0 end_portal
   回到stage 1:scoreboard players set stage Dragon 1
   添加屠龙者标签:tag @a[rm=0] add dragon_killer
   (无条件)广播挑战结果:tellraw @a {"rawtext":[{"text":"末影龙被 "},{"selector":"@a[rm=0,tag=dragon_killer]"},{"text":" 击杀"}]}
   (无条件)显示屠龙信息:tellraw @a[tag=dragon_killer,rm=0] {"rawtext":[{"text":"你打败了末影龙!"}]}

  后续处理:
   给龙蛋:give @a[tag=dragon_killer,tag=!egg_gived] dragon_egg
   添加给了蛋的标签:tag @a[tag=dragon_killer] add egg_gived
   (无条件)删除屠龙者标签:tag @a[tag=dragon_killer] remove dragon_killer


摆好的样子:




四、后记
  在服务器中,这个装置经历了多次实战考验,进行过多次优化,才成为现在的较为稳定的版本。若以后还有新的改动,将在这里记录。





星河皓月丶
2-5 您在本版发布的非种子分享类主题中必须含有至少一张图片和必要的文字内容,违者主题移动至回收区,帖主修改后可私信版主移回。

根据版规 2-5,帖内须添加至少一张图片
尽量于24小时内完成

pe_commander
璀璨星河丶 发表于 2022-2-11 19:29
根据版规 2-5,帖内须添加至少一张图片
尽量于24小时内完成

补好了=w=

brealid
支持!虽然只是朋友一起玩的服,但这样的装置还是很有必要(尤其是坑龙蛋的拔刀剑模组)

pe_commander
brealid 发表于 2022-2-11 21:25
支持!虽然只是朋友一起玩的服,但这样的装置还是很有必要(尤其是坑龙蛋的拔刀剑模组) ...

谢谢资瓷!
不过我这是基岩版的命令方块啊,java也能用的吗w(゚Д゚)w

brealid
pe_commander 发表于 2022-2-12 00:07
谢谢资瓷!
不过我这是基岩版的命令方块啊,java也能用的吗w(゚Д゚)w

java,基岩的命令好像是互通的吧,回头我准备试试

800805
brealid 发表于 2022-2-12 08:13
java,基岩的命令好像是互通的吧,回头我准备试试

有些不是的,具体请查wiki

MingTao
我去。。。有点复杂啊

ZLDeathwh1
太好啦,马上让腐竹安排上

第一页 上一页 下一页 最后一页