minecraft吧 关注:2,544,539贴子:31,819,903
  • 28回复贴,共1

[教程]两个命令方块实现服务器可用的防盗门

只看楼主收藏回复

私人财产神圣不可侵犯,在游戏中同样如此。为了让玩家有自己一片栖身之地,有的服务器会通过坐标限制非区域主人不能进入某个区域。但这样有点不符合少干预、少禁止和多样性原则。所以我根据自己的需求设计了这个防盗门。具体教程如下:


1楼2019-07-08 12:13回复
    功能需求:当主人靠近门时打开,离开门时关闭。
    实现思路:
    1:用 @贴吧用户_00000e8🐾 判断栅栏所在的<坐标A>是否有实体,//这里用了栅栏而不是铁门,后续会说明原因
    2:若以上 成立,判断主人是否在<坐标A> ,
    3: 若以上 成立,用setblock 命令将<坐标A> 的实体换为空气方块。


    2楼2019-07-08 12:23
    收起回复
      第一个命令方块的命令:
      例如<坐标A>为 (14,13,16)
      /execute as @e[x=14,y=13,z=16,dx=0,dy=0,dz=0] as @s[name=<玩家姓名>] run setblock 14 13 16 空气方块 replace
      重点讲解:
      1 . as @e[x=14,y=13,z=16,dx=0,dy=0,dz=0] : 选中在坐标 (14,13,16) 中的所有实体,用于后面的 @s 的二次筛选。
      2. as @s[name=<玩家姓名>] : 在上步中的 @e范围内再次选择名字为 <玩家姓名> 的玩家。也就是判断某玩家是否在指定坐标内。
      简而言之,上面两步实现了 判断 某玩家 是否在 指定坐标内,即与主人的栅栏重合,如果重合,将栅栏替换为指定方块:
      3. setblock 14 13 16 空气方块 replace
      重点讲解:
      将坐标 (14,13,16) 中的方块替换为指定方块,这里为空气方块。


      3楼2019-07-08 12:41
      收起回复
        这时你会发现:当玩家通过后栅栏不会回来了。为了让栅栏回来,我们:
        再写个命令,当玩家离开 <指定坐标> 后将 <指定坐标> 的空气方块替换为栅栏。
        如果你和我想的一样,那么你想对了。问题是,这里有 一个重难点,如何判断玩家不再某个 <指定坐标> 呢?
        这里就用到 unless 命令了:
        /execute unless entity @a[x=14,y=13,z=16,dx=0,dy=0,dz=0,name=MengKE] run setblock 14 13 16 minecraft:birch_fence replace
        重点讲解:
        1. unless entity @a[x=14,y=13,z=16,dx=0,dy=0,dz=0,name=玩家姓名]
        unless 的作用是 如果找不到目标则执行,在这里是:如果在指定坐标 (14,13,16) 找不到名为 玩家姓名 的玩家,则。。。
        2, run setblock 14 13 16 minecraft:birch_fence replace
        看三楼


        4楼2019-07-08 12:56
        回复
          所以你还是没有解释为什么一定用栅栏


          IP属地:美国来自Android客户端5楼2019-07-08 15:36
          回复
            我问个问题,你觉得服务器会允许你用命令方块吗


            IP属地:安徽来自Android客户端6楼2019-07-08 15:40
            收起回复
              终于下课了,继续


              7楼2019-07-08 16:18
              回复
                我来说说制作过程中遇到的问题:
                1:为什么要用栅栏?用铁活板门或铁门行不行?
                答:可以是可以,思路为:有玩家靠近打开门或活板门,没有则关闭。
                但是,但是,但是:这样你会发现你进去以后没法出去了,因为你会被栅栏或门永远挡在里面。因为打开的门的碰撞体积在方块一个面的最边缘,你无法从这个方向与方块重合。
                而栅栏的体积是小于一个方块的体积的,so


                8楼2019-07-08 16:27
                收起回复
                  接下来的讲解我画个图解释。
                  2:如果你有了一个房子,但是有恶意玩家卡你的体积重叠插队进门怎么办?
                  答:这时就需要双保险了。
                  1)弄两个栅栏,如下:
                  不过这会产生一个新的问题,见下楼,嘻嘻


                  9楼2019-07-08 16:40
                  回复
                    因为光杆栅栏和两个连着的栅栏是不一样的,呃,有点糊涂
                    这么说,假设 两个连着的栅栏 为 A
                    单个光杆栅栏为 B
                    并不能想当然的认为: A = B + B。因为中间还多了两个横杆,所以 A = (B + c) + (B + c),
                    B 与 (B + c) 是两个不同的模型。
                    如果你在一个 B 旁边生成另一个 B,系统会自动替换为 (B+ c)(两个 B 全部替换),而命令方块会又生成一个 B
                    系统继续替换,命令方块继续生成。如此,如此,会造成死循环。不过照样能用,只要你不觉得命令提示消息烦就行。


                    10楼2019-07-08 16:57
                    收起回复
                      光杆栅栏 B
                      两个连在一起的栏杆 (A) ,注意中间的两个横杆 (B + c)


                      11楼2019-07-08 17:00
                      回复
                        评价:
                        没有封装,占地较大,实用性较低,美观性不足,技术性不高。
                        说实话没有领地我就不能把旁边的栅栏或者墙挖开了直接进去?
                        而如果有领地,要这东西又有何用?
                        就算是对于网易纯净租赁服冒险模式来说,使用起来也不方便,还得OP人工安装。
                        (不是找茬)


                        IP属地:贵州来自Android客户端12楼2019-07-08 17:32
                        收起回复
                          看了题目进来却有些失望。做教程是好事,但一定要实用美观,希望下次楼主可以有更有水平和质量的教程


                          IP属地:美国来自Android客户端13楼2019-07-08 18:05
                          收起回复
                            是的哦,人均小吧主哦
                            一般而言,为了追求美观,cbers都会采用marker取代你这种重复率极高的cb


                            IP属地:广东来自Android客户端14楼2019-07-08 22:53
                            回复