minecraft吧 关注:2,537,631贴子:31,746,213

【教程】原版命令方块模组教程

只看楼主收藏回复

相信不少人都知道原版命令方块模组,这类模组虽比不上forge模组功能强大,但有方便加载,无需forge等诸多优点。然而,国内关于原版命令方块模组的教程少之又少,今天我向大家分享我对原版命令方块模组的研究成果,希望大家喜欢。
ps:1.我希望这篇文章能有更多的人读的懂,所以废话比较多,有一定技术的人可以跳着看。
2.本文使用的游戏版本为Java版1.13,其它的版本请将命令中部分内容替换。
@OrOfeen 我在查找资料时看到了你的疑问(https://tieba.baidu.com/p/5824111643


IP属地:陕西1楼2018-08-14 15:19回复
    原版命令方块模组的实质,是使用一个命令方块完成多项指令。可惜的是,不说执行多项指令,仅仅放置多个不同种类的方块已经很让人头疼了,那么我们应该如何同时放置多块方块呢。
    这就需要利用到下落的沙子,玩过指令的很多人可能都知道,下落的沙子作为一个实体,可能不一定要是沙子,原版中,下落的铁砧、沙硕、龙蛋都属于下落的沙子。当我们玩起指令时,任何方块都可以成为下落的沙子了(我会告诉你“任何”是我的猜测吗)。


    IP属地:陕西2楼2018-08-14 15:19
    回复
      有人可能会问了,放置多个方块要下落的沙子有什么用呢?别急,将放置方块转为召唤下落的沙子,自然是要利用到下落的沙子作为实体的特性,这就需要我们知道一个叫Passengers的标签。
      顾名思义,Passengers指乘客,也就是骑乘的关系,比如蜘蛛骑士,就是蜘蛛的Passengers标签是一个骷髅,使用指令/summon minecraft:spider ~ ~ ~ {Passengers:[{id: skeleton}]}可在原地召唤一个蜘蛛骑士。


      IP属地:陕西3楼2018-08-14 15:19
      回复
        所以,我们的目标是召唤一排互相骑乘的下落的沙子,其中有一个是红石块,用这个红石块去激活其它的命令方块,实现多条指令重复执行。
        一种比较理想的方法是,用这个红石块激活一个激活铁轨,激活铁轨再激活上方的命令方块矿车。
        不要问任何理由,先将下面这段代码粘贴进一个命令方块中并激活。
        /summon minecraft:falling_block ~ ~1 ~ {BlockState:{Name:"minecraft:stone"},Time:1,Passengers:[{id:falling_block,BlockState:{Name:"minecraft:redstone_block"},Time:1,Passengers:[{id:falling_block,BlockState:{Name:"minecraft:activator_rail"},Time:1,Passengers:[{id:command_block_minecart,Command:"say 1"},{id:command_block_minecart,Command:"say 2"}]}]}]}
        效果:


        IP属地:陕西4楼2018-08-14 15:20
        回复
          可以看到,我们已经成功实现了一个命令方块执行多条指令,虽然我们看到命令在不断执行,我们将会稍后改进它。现在我们把指令展开来分析:
          /summon minecraft:falling_block ~ ~1 ~
          {BlockState:{Name:"minecraft:stone"},Time:1,Passengers:[
          {id:falling_block,BlockState:{Name:"minecraft:redstone_block"},Time:1,Passengers:[
          {id:falling_block,BlockState:{Name:"minecraft:activator_rail"},Time:1,Passengers:[
          {id:command_block_minecart,Command:"say 1"},
          {id:command_block_minecart,Command:"say 2"}
          ]}
          ]}
          ]}
          首先命令召唤了一个石头的下落方块,它的目的是将我们放置的命令方块与红石块隔开,防止命令二次触发。
          接着我们让一个红石块“骑”在石头上,当石头判定落地成为真正的方块时,红石块也会判定落在石头上成为方块。
          接着是激活铁轨,它会被红石块激活。
          激活铁轨的下落方块上并行骑着两个命令方块矿车,它们会被激活铁轨激活并执行其中的”say 1”和”say 2”两条指令。


          IP属地:陕西5楼2018-08-14 15:21
          回复
            那么我们怎么改进让它只执行一遍呢,根本方法是在执行完后将所有的方块和命令方块矿车全部移除。二话不说,先复制下面这段到命令方块中并执行:
            /summon minecraft:falling_block ~ ~1 ~{BlockState:{Name:"minecraft:stone"},Time:1,Passengers:[{id:falling_block,BlockState:{Name:"minecraft:redstone_block"},Time:1,Passengers:[{id:falling_block,BlockState:{Name:"minecraft:activator_rail"},Time:1,Passengers:[{id:command_block_minecart,Command:"say1"},{id:command_block_minecart,Command:"say2"},{id:command_block_minecart,Command:"setblock ~ ~ ~1command_block{Command:\"fill ~ ~-3 ~-1 ~ ~ ~ air\"}"},{id:command_block_minecart,Command:"setblock~ ~-1 ~1 redstone_block"},{id:command_block_minecart,Command:"kill @e[type=command_block_minecart,distance=..1]"}]}]}]}
            现象:聊天框出现1,2,随后所有放置的物体消失的无影无踪。


            IP属地:陕西7楼2018-08-14 15:22
            回复
              然后还是分析:
              /summon minecraft:falling_block ~ ~1 ~
              {BlockState:{Name:"minecraft:stone"},Time:1,Passengers:[
              {id:falling_block,BlockState:{Name:"minecraft:redstone_block"},Time:1,Passengers:[
              {id:falling_block,BlockState:{Name:"minecraft:activator_rail"},Time:1,Passengers:[
              {id:command_block_minecart,Command:"say 1"},
              {id:command_block_minecart,Command:"say 2"},
              {id:command_block_minecart,Command:"setblock ~ ~ ~1command_block{Command:\"fill ~ ~-3 ~-1 ~ ~ ~ air\"}"},
              {id:command_block_minecart,Command:"setblock ~ ~-1 ~1redstone_block"},
              {id:command_block_minecart,Command:"kill@e[type=command_block_minecart,distance=..1]"}
              ]}
              ]}
              ]}
              我们先理一理思路,清理应该分两个步骤,清理实体和清理方块,如果只使用命令方块矿车,那么清理掉一种东西以后注定清理不掉另一种东西(先清理方块会缺少红石块激活清理实体的命令方块矿车,先清理实体会把清理方块的命令方块矿车清理掉),所以我们需要把清理中的一个步骤“外包”给一个命令方块,让其在下一刻清理,本文先清理了实体后清理了方块:
              setblock ~ ~ ~1command_block{Command:"fill ~ ~-3 ~-1 ~ ~ ~ air”} //这一步放置了清理方块的命令方块
              setblock ~ ~-1 ~1 redstone_block //放置了红石块,清理方块的命令方块会在更新后执行
              kill@e[type=command_block_minecart,distance=..1] //清理已经召唤的命令方块矿车


              IP属地:陕西8楼2018-08-14 15:22
              回复
                拜见dalao■=


                IP属地:广东来自Android客户端9楼2018-08-14 15:23
                回复
                  常见问题:
                  为什么不使用函数功能?
                  函数功能同样也能实现一个命令方块多条指令,而且制作过程简单的多。论优势,命令方块模组最大的优势就是安装方便,它没有那么繁琐的操作存档目录的过程。
                  我该如何使用这篇教程?
                  如果你的版本是Java版1.13,将你的指令写在这个位置:
                  /summon minecraft:falling_block ~ ~1 ~
                  {BlockState:{Name:"minecraft:stone"},Time:1,Passengers:[
                  {id:falling_block,BlockState:{Name:"minecraft:redstone_block"},Time:1,Passengers:[
                  {id:falling_block,BlockState:{Name:"minecraft:activator_rail"},Time:1,Passengers:[
                  {id:command_block_minecart,Command:"你的指令1"},
                  {id:command_block_minecart,Command:"你的指令2"},
                  ……
                  {id:command_block_minecart,Command:"你的指令n"},
                  {id:command_block_minecart,Command:"你的指令n + 1"},
                  {id:command_block_minecart,Command:"setblock ~ ~ ~1command_block{Command:\"fill ~ ~-3 ~-1 ~ ~ ~ air\"}"},
                  {id:command_block_minecart,Command:"setblock ~ ~-1 ~1redstone_block"},
                  {id:command_block_minecart,Command:"kill @e[type=command_block_minecart,distance=..1]"}
                  ]}
                  ]}
                  ]}
                  如果不是,你可能需要改动命令中的部分细节(如“distance=..1”替换为“r=1”,“command_block_minecart”替换为“MinecartCommandBlock”等)。


                  IP属地:陕西10楼2018-08-14 15:23
                  回复
                    本篇教程到此结束,希望你的模组取得成功。
                    注:本文在MCBBS和百度贴吧上发布,转载请注明出处。
                    还没发MCBBS,先等我复制再放出地址。


                    IP属地:陕西11楼2018-08-14 15:24
                    回复(2)
                      有人的,
                      dd技术贴


                      IP属地:北京来自Android客户端12楼2018-08-14 15:53
                      回复
                        神奇的操作


                        IP属地:湖北来自Android客户端13楼2018-08-14 17:57
                        回复
                          dd


                          IP属地:山东来自Android客户端14楼2018-08-14 21:45
                          回复
                            有人的DD


                            来自Android客户端15楼2018-08-14 21:59
                            回复
                              楼主能研究下指定次数的循环吗?不要时钟脉冲那种,而且要连续执行循环那种。指定次数的循环就是比如执行say hello 100次这样。


                              IP属地:江苏来自Android客户端16楼2019-03-01 23:10
                              回复