红石电路吧 关注:32,257贴子:153,470

【教程】如何利用1.7的新指令在地图中做出逆天的效果

只看楼主收藏回复

1.7已经出了一段时间了,但是很多人都不熟悉新增加的逆天指令,现在还没有一个系统的教程。为了让地图党作出更好的地图,我决定发这个教程来让人们知道这些指令的详细用法。
也许你看到一堆英文、括号就觉得头晕,其实这些东西都很简单,如果去尝试的话你是会成功的。
(繁华也发了一个帖子介绍1.7的新指令,也可以参考http://tieba.baidu.com/p/2610241613 但是其中有些指令他没有做出最简形式)
我知道不发图你们是不会来的,这里就介绍一下某些逆天东西的效果(指令会给你,新人可以直接用。如果想知道指令为什么这么写,请看后面的教程)

生成一个悬浮在空中的恶魂火球,打一下就飞出去,碰到方块就会爆炸
/summon Fireball ~ ~ ~ {ExplosionPower:200,direction:[]}

如此壮观的景象就是它造成的

轻松自定义村民交易
summon Villager ~ ~1 ~ {Offers:{Recipes:[{maxUses:999,buy:{id:1,Count:1},sell:{id:1,Count:2,Damage:1,tag:{ench:[{id:1,lvl:99}],display:{Name:a}}}},{maxUses:999,buy:{id:2,Count:1},sell:{id:2,Count:2,Damage:1,tag:{ench:[{id:2,lvl:99}],display:{Name:b}}}}]},CustomNameVisible:1,CustomName:"名字"}
(如果命令比较长,请放入命令方块再执行)
大威力苦力怕,你值得拥有(爆炸半径100格,小心电脑卡死)

summon Creeper ~ ~1 ~ {ExplosionRadius:100,powered:1}
生成一根柱子
summon FallingSand ~5 ~4 ~ {TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1}}}}}
一个小黑,拿着基岩,而且头戴矿车
/summon Minecart ~ ~ ~ {Riding:{id:Enderman,carried:7}}

骑上矿车,然后调到下雨模式,小黑会带着你乱跑

这是一段文字
我点了一下黄色字,给我了64个钻石块(“尝试中文”是游戏名)
tellraw @a {text:"你好",color:red,extra:[{text:" 想成为高富帅吗?",color:yellow,clickEvent:{action:run_command,value:"/give @p 57 64"}}]}
当然,可以做到的东西不止于此。本帖将涉及到1.7新增各种指令的用法以及scoreboard的改变和他们在地图中的应用实例。


1楼2013-12-28 14:41回复
    原帖http://tieba.baidu.com/p/2734096252?see_lz=1&pn=1


    2楼2013-12-28 14:41
    收起回复
      2025-08-29 16:50:07
      广告
      不感兴趣
      开通SVIP免广告
      一般来说,在指令栏(按“/”键出现的东西)输入的指令都可以在命令方块中使用。但是指令栏有字符限制,而命令方块中没有。
      1.7新增或改动的指令:
      1.summon 实体 id 坐标 {nbt信息}
      summon是召唤的意思,用于生成实体
      2.setblock 坐标 物品id 损坏度(附加值) 方块放置方式 {nbt信息}
      设定某地方块,一个指令只能设定一个方块
      3.testforblock 坐标 物品id 损坏度(附加值) {nbt信息}
      类似于testfor,检测某坐标有没有指定放开。请在命令方块后面放一个比较器来作为输出。
      4.tellraw 玩家 纯文本消息(可以是nbt信息)
      向玩家发送一条信息显示在下方
      5.give 玩家 物品 损坏度(附加值) {nbt信息}
      现在give指令可以给物品附加信息了
      nbt是什么?nbt是minecraft专用的一种文件格式。他的特点就是:以树形排列的标签储存信息。nbt表示就像这个图一样

      看上去有点像文件夹。一个文件夹下可以套文件夹。文件夹下是文件,每个文件都有名字和它所包含的信息。有的文件包含数字的信息,有些文件包含文字的信息。


      3楼2013-12-28 14:43
      收起回复
        双击一个标签就可以编辑他。
        另外,附加信息的方块,他的附加信息也是用nbt存储的。entities是实体,而tileentities就是带附加信息的方块
        “文件”分几种类型
        1.
        像这种的标签下面可以包含若干个标签,是“文件夹”,叫做tag_list。
        2.
        这种标签没有名称,叫tag_compound,常常一起出现在一个taglist下,每个tagcompound下都可以有别的标签
        3.
        这些是数据标签,都有名字,记录数字,但是上限和下限各不一样。有一种必须表示成小数的形式,要注意。
        4.
        这种叫tag_string,记录一段文字。
        下文中我管“文件”叫做“标签”


        5楼2013-12-28 14:44
        回复
          有时,某些标签不存在(这些标签在一定情况下会出现),而有些标签光从名字上无法判断他是干什么的。这个时候,查wiki就很必要了。
          可以查阅的有http://minecraft-zh.gamepedia.com/%E5%8C%BA%E5%9D%97%E6%A0%BC%E5%BC%8F
          还有http://minecraft-zh.gamepedia.com/Player.dat%E6%A0%BC%E5%BC%8F#.E7.89.A9.E5.93.81.E6.A0.BC.E5.BC.8F
          有些内容是英文的,但是谷歌翻译有翻译网站的功能,可以翻译它。

          通过查阅wiki,我们知道:
          1.Age是实体的成长阶段。当他为负数时,表示为离成长剩余的gametick数。
          2.Air是水下呼吸剩余时间
          3.CanPickUplLoot是能否拾取装备
          4.CustomName是实体名字
          5.CustomNameVisible是是否在实体头上显示名字
          6.DeathTime代表生物死亡后的gametick。用于控制死亡动画
          7.DropChances代表掉落装备几率
          8.Equiment是生物装备
          剩余的就不再说了。自己去wiki查吧

          Attributes里有一些tagcompound。每个tagcompound就代表一个属性。打开它,Name是该属性名字,而Base就是该属性的值
          现在,我们需要用指令生成一个生命值上限为2000的村民,那么指令是:
          summon Villager ~ ~1 ~
          {Attributes:[{Name:"generic.maxhealth",Base:2000.0}]}
          (在将文字复制的到命令方块里的时候,换行会自动消失)
          其中Villager是实体id,表示村民。关于实体id,wiki上也有。
          ~ ~1 ~是坐标,~1表示坐标值以命令方块坐标值+1,而~-1表示坐标值以命令方块坐标值-1。也就是说,村民生成在命令方块上方一格处
          下面有一个括号,这个括号下就是该生物的所有要表示的nbt标签了。里面有个Attributes,可以跟上图中的Attributes对应。Attributes的冒号后面有一对完整的方括号,这个方括号里面的内容就是Attributes标签里面的内容。方括号里还有一个括号,那对应的是上图中那个已经打开的tagcompound。中括号里面,有Base和Name,Name的冒号后面有一对完整的引号,引号里就是Name中的内容(有时不需要引号也可以,但是不能出现只有一个引号的情况)。Base的冒号后面就是Base标签的值。 Base是那种必须表示成小数的标签,所以2000要改成2000.0
          问题来了,为什么有的括号用方括号,有的括号用圆括号呢?
          使用方括号的地方,就是一个taglist中所有标签都是同种类型的标签,而且这些标签都没有名字,那么这个taglist就要用方括号了


          6楼2013-12-28 14:45
          回复
            如果你运行指令之后,没有刷出东西,怎么办?有这些可能:
            1.括号不完整。数一数总共几个左括号,总共几个右括号,两者数量必须相等
            2.使用的字符(例如逗号,冒号,括号等)有的是全角字符。全角字符无法被程序认识,必须要半角字符,全角字符一般占两个字节。
            全角、半角字符在这里切换
            当然具体出了什么错还是要从他弹出的一段话里找。
            如果刷出了东西,但是没有你设定的参数,有这些可能:
            1.标签大小写不对
            2.标签层级不对,具体格式请看我给出的wiki地址
            3.要表示成小数的数没表示成小数
            按住shift键然后按←、→键就可以在mc中选中文字

            @zhengzhi805 说 按Home键可以回到命令开始的部分,按End到最后的部分,这对命令过长时极其有用,尤其是在编写JSON时,墙裂建议使用外部编辑器(推荐Notepad++)来写NBT标签或JSON...PS:Ctrl+C 复制 Ctrl+V粘贴


            7楼2013-12-28 14:46
            收起回复

              一只僵尸,穿着装备,骑着村民,而且烧不死,是如何做到的呢?
              summon Zombie ~ ~1 ~ {Equipment:[{},{},{},{id:303},{}],ActiveEffects:[{Amblifier:126,Id:12,Duration:99999}],Riding:{id:Villager}}
              自从1.5更新以后,任何生物都可以骑任何生物。我们生成了一个僵尸,而村民的信息是在僵尸里面的Riding中的。Equipment是装备的意思。在Equipment中,有五个括号,分别是手、脚、腿、胸、头的装备。为了分清手脚腿胸头装备的顺序,我加入了一些空括号,他们是必不可少的。每一个装备就是一个物品。
              僵尸之所以烧不死,是因为他有抗火的药水效果,ActiveEffects中就是该实体的所有药水效果。因为每个药水效果都是一个tagcompound,所以一个实体可以同时有无限个药水效果。Amblifier是等级,Id是效果id(详见http://minecraft-zh.gamepedia.com/%E6%95%B0%E6%8D%AE%E5%80%BC),Duration是持续时间
              一个物品,有这些标签:
              1.slot 物品储存格编号
              2.id 物品id
              3.Damage 物品附加值,用于决定工具损坏度、羊毛颜色、药水类型等
              4.Count 物品数量
              5.tag 物品附加数据
              在give指令中,tag中内容是要表示的nbt内容,其余部分在指令的别的地方
              给一个指令的例子
              give @p 397 1 3 {SkullOwner:"Notch",ench:[{id:5,lvl:999}],display:{Name:"aaa",Lore:["a","b"]}}
              效果图
              这是397号物品-头颅。他的附加值是3,说明是玩家头颅。SkullOwner是头颅对应的正版玩家名,这个头是Notch的,所以放到地上就是
              ench里面是附魔,每个附魔是一个tagcompound。这一个附魔id是5,等级是999.(附魔id详见http://minecraft-zh.gamepedia.com/%E6%95%B0%E6%8D%AE%E5%80%BC)
              display中,Name是物品最上方的名字,Lore下是附注,可以有无限个附注所以也用中括号。
              关于有属性的物品
              give @p 293 1 0 {AttributeModifiers:[{Operation:0,Amount:100.0,UUIDLeast:1,UUIDMost:2,AttributeName:"generic.maxHealth",Name:1}]} (这个指令源于繁华)

              拿着它,最大生命值就加了100。这个指令中一个东西都不能少。特别是那个Name,如果缺少Name,鼠标放上去游戏就会崩溃


              8楼2013-12-28 14:47
              收起回复
                其它的物品属性,还有
                generic.movementSpeed:移动速度
                generic.attackDamage:攻击力
                generic.knockbackResistance:击退抗性


                9楼2013-12-28 14:47
                收起回复
                  2025-08-29 16:44:07
                  广告
                  不感兴趣
                  开通SVIP免广告
                  下面将讲两个逆天的方块显示效果

                  这是怎么回事?
                  其实是这样的:

                  summon Minecart ~ ~1 ~ {CustomDisplayTile:1,DisplayTile:1,DisplayOffset:64}
                  矿车中的方块没有显示在矿车里面,而是显示在矿车外面。通过移动矿车就可以移动这个方块。这个方块是可以穿过的,你不能破坏这个方块,让他消失只有让矿车消失
                  其中CustomDisplayTile是是否在矿车中显示自定义方块(必须有)
                  DisplayTile是方块id
                  DisplayOffset就是方块与矿车的y轴差距。如果是正的,那么方块显示在矿车上面。如果是负的,则显示在矿车下面。
                  (这里没有)DisplayData:显示方块的附加值
                  下面是一个更逆天的方块显示方法(同样是在任意地方显示方块,无法被破坏,没有碰撞箱,但是如果配置不好的话看起来会一闪一闪的)

                  这个装置的组成是这样的:

                  第一个命令方块的指令:summon FallingSand ~ ~1.5 ~1 {Time:0,Motion:[0.0,0.06,0.0]}
                  第二个的指令:summon FallingSand ~-2 ~1.5 ~1 {Time:0,Motion:[0.0,0.06,0.0]}
                  由于指令中没有Time:1,所以生成的掉落方块实体会在生成1gametick后被删除。用两个命令方块接连生成这个实体,可以做到显示虚拟方块的效果
                  不止可以显示沙子,加上TileID可以显示任意ID的方块
                  这个方法比第一种方法好在:显示的方块和实际方块一样大。用第一种方法显示的方块会变得小一些。
                  利用这个方法可以在墙上隐藏一个洞、制造一个陷阱等
                  那么,第一种方法就真的没有用了吗?
                  还是有用的,把它放在刷怪笼中可以显示微小方块,如果让方块显示得离刷怪笼更远一些,可以做到某些效果


                  11楼2013-12-28 14:48
                  回复
                    另外,命令方块矿车是一个大家不太熟悉的东西,要获得,就要使用指令give @p 422
                    命令方块矿车当行驶在激活的激活铁轨上时,会按一定速率执行它的命令

                    本帖1楼有一个生成柱子的指令:summon FallingSand ~5 ~4 ~ {TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1}}}}}
                    如果把它放进命令方块矿车,就可以生成一面墙。但是激活铁轨没有给矿车加速的功能,很快矿车就会卡在铁轨上。
                    这里涉及到一个bug:当多个矿车堆叠在一起时,矿车会永远保持动力
                    在天上使用这个指令:summon Minecart ~ ~-2 ~ {Riding:{id:Minecart,Riding:{id:Minecart}}}
                    然后把它推到铁轨上,它就开始无限运动了
                    那么,就用这个指令: (请在命令方块中使用)
                    summon Minecart ~ ~-1 ~ {Riding:{id:Minecart,Riding:{id:MinecartCommandBlock,Command:"summon FallingSand ~5 ~4 ~ {TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1,Riding:{id:FallingSand,TileID:1,Time:1}}}}}"}}}

                    然后,就生成了一面墙


                    12楼2013-12-28 14:49
                    收起回复
                      如果想用大量setblock命令方块生成一个大型建筑呢?有一个滤镜可以实现
                      首先,下载sethbiling的setblocksecture滤镜:http://sethbling.com/setblockstructure
                      (如果没翻墙的话看不了其中的视频。不过下面我会演示一遍如何操作)

                      这是xisumavoid的某个附魔装置

                      打开mcedit,选中它

                      左边设置成这样,然后按filter按钮

                      然后在旁边选中一片空白区域

                      这样设置,然后按filter按钮

                      看,出现了什么!

                      出现了这个(请给绿色羊毛上放一个按钮)

                      随意破坏这个装置

                      按下按钮,一切都恢复了


                      13楼2013-12-28 14:50
                      收起回复
                        下面我讲一下tellraw
                        说起tellraw,就要讲到一个网站了:http://ezekielelin.com/minecraft/tellraw/
                        这个网站可以帮助你制造一个json信息
                        网站界面是这样的
                        点击add text添加一段文本

                        Text就是文本内容,右边那个是颜色,Bold是是否加粗文字,Italic是是否倾斜,Underlined是是否加下划线,下面的自己试验即可
                        Click Event是点击这段文字后发生的事(按t键后,用鼠标点击文字)

                        Run Command是执行命令(如果在这里使用相对坐标,那么基准就是玩家坐标)
                        Suggest Command是在指令栏中输入一个命令,貌似很鸡肋
                        Open URl就是打开一个网页

                        hoverevent就是鼠标放上去发生的事。
                        show text是显示一段文字,就像这样
                        Show item是显示一个物品,就像这样,如果有附魔或者名称、附注也可以显示出来
                        Show Achievement貌似是显示一个计分板分数

                        做好之后,这里会显示命令,复制然后使用即可
                        如果要去掉一个文本段,点左边的叉号就可以了


                        15楼2013-12-28 14:51
                        收起回复
                          下面讲scoreboard
                          这里说一下scoreboard的一般使用方法:tab键与空格键结合。tab键可以自动补全指令,例如你输入sco,按下tab键,就变成scoreboard了。
                          有了scoreboard,按一下空格,再按一下tab键,就会出现下部分可以填的内容。此时按tab键会在这三者之间切换


                          到了这个时候,按tab键没反应怎么办?其实在这个时候,你应该输入创建的分数的名字
                          这个时候,出现了一堆可以选择的东西。1.7添加了许多计分板可以统计的东西

                          基本格式有
                          stat.mineBlock.方块id
                          stat.useItem.物品id
                          stat.craftItem.物品id
                          stat.killEntity.实体id
                          stat.breakItem.物品id
                          其它特殊的可以统计的东西,在我刚才给的网站上有






                          16楼2013-12-28 14:51
                          回复
                            这是sethbiling的一个pvp地图:PizzaSpleef

                            下载:http://sethbling.com/PizzaSpleef


                            18楼2013-12-28 14:52
                            收起回复
                              2025-08-29 16:38:07
                              广告
                              不感兴趣
                              开通SVIP免广告
                              上面那个显示虚拟方块也可以用刷怪笼做到
                              刷怪笼生成指令:setblock ~ ~1 ~ 52 0 replace {MinSpawnDelay:1,MaxSpawnDelay:3,SpawnCount:4,RequiredPlayerRange:16,Delay:1,MaxNearbyEntities:6,SpawnRange:4,SpawnData:{UUIDLeast:-5115182707123958906,FallHurtAmount:2.0,Motion:[0.0,0.04,0.0],OnGround:0,UUIDMost:4191661717765638824,DropItem:1,Dimension:0,Air:0,在这里添加虚拟方块坐标(Pos:[......]),Data:0,Tile:12,PortalCooldown:0,HurtEntities:0,Fire:-1,FallDistance:0.0399999991059,TileID:12,Rotation:[0.0,0.0],Invulnerable:0,EntityId:"FallingSand",FallHurtMax:40},SpawnPotentials:[{Weight:1,Type:"FallingSand",Properties:{UUIDLeast:-5115182707123958906,FallHurtAmount:2.0,Motion:[0.0,0.04,0.0],OnGround:0,UUIDMost:4191661717765638824,DropItem:1,Dimension:0,Air:0,在这里添加虚拟方块坐标(Pos:[......]),Data:0,Tile:12,PortalCooldown:0,HurtEntities:0,Fire:-1,FallDistance:0.0399999991059,TileID:12,Rotation:[0.0,0.0],Invulnerable:0,EntityId:"FallingSand",FallHurtMax:40}}],EntityId:"FallingSand"}
                              注意,“在这里添加虚拟方块坐标(Pos:[......])”要按格式换成坐标


                              19楼2013-12-28 14:53
                              回复