Minecraft(我的世界)中文论坛
标题: MC1.8:指令方块冰冻之箭展示
作者: PotatoMaster101 时间: 2014-10-18 12:33
标题: MC1.8:指令方块冰冻之箭展示
本帖最后由 PotatoMaster101 于 2014-10-18 17:47 编辑
大家好。今天无聊是本人做了一个冰冻之箭小作品。这个作品十分简单,弓箭射生物后会冰冻起来。
截图:


------------原理/运行------------
这个机器十分的简单。主要还是有积分版来完成。首先需要创建积分版:
- /scoreboard objectives add UseBow stat.useItem.minecraft.bow
复制代码 UseBow积分版,如果玩家使用了弓箭,那积分就+1。
- /scoreboard objectives add IsFrozArrow dummy
复制代码 IsForzArrow积分版,如果是使用冰冻之弓射出去的箭,那么哪个箭就会有这个积分。
- /scoreboard objectives add SelecBow dummy
复制代码 SelecBow积分版,探测玩家是否手拿冰冻只弓。
- /scoreboard objectives add ArrowInG dummy
复制代码 ArrowInG积分版,地图里的每个射出去的箭都会有这个积分。如果箭在天上飞,积分为0,落地后,积分为1。
- /scoreboard objectives add RightMob dummy
复制代码 RightMob积分版,探测落地箭旁边的生物。
之后还要一个指令方块拿到弓箭。指令:
- /give @p minecraft:bow 1 0
- {display:{Name:"Frozen",Lore:["PotatoMaster101's Secret Weapon"]},ench:[{id:51,lvl:999}],Unbreakable:1b,HideFlags:63}
复制代码 给玩家一个叫“Frozen”的弓。

之后就是运行原理了。(以下机械都是有高速脉冲激活的)
第一步:探测玩家手上是否拿着正确的弓(Frozen)。如果拿着,那么把该玩家的SelecBow积分版设为1。指令:
- /scoreboard players set @a SelecBow 0
复制代码 以上指令清空玩家的SelecBow积分。
- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:0b}],SelectedItemSlot:0}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:4b}],SelectedItemSlot:4}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:7b}],SelectedItemSlot:7}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:2b}],SelectedItemSlot:2}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:3b}],SelectedItemSlot:3}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:8b}],SelectedItemSlot:8}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:1b}],SelectedItemSlot:1}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:5b}],SelectedItemSlot:5}
复制代码- /scoreboard players set @a SelecBow 1
- {Inventory:[{id:"minecraft:bow",Damage:0s,tag:{display:{Name:"Frozen"}},Slot:6b}],SelectedItemSlot:6}
复制代码 以上的9个指令方块分别给玩家手里拿着Frozen弓积分。因为玩家物品栏可以放9个物品,所以每个物品栏都要有自己的单独探测。以上9条指令分辨探测玩家的9个物品栏。
所以,如果玩家没拿,那他的积分始终是0,如果拿了,那就是1。
第二步:探测弓箭是在天上还是在地上。指令:- /scoreboard players set @e[type=Arrow] ArrowInG 0
- {inGround:0b}
复制代码- /scoreboard players set @e[type=Arrow] ArrowInG 1
- {inGround:1b}
复制代码 以上两条指令,分别把在空中的箭,ArrowInG设为0分。落地的箭(卡在方块里),ArrowInG设为1分。探测箭的状态。
第三步:主要的机械运行。这一步主要就是探测正确的弓箭,和弓箭对生物的影响。指令:
- /execute @a[score_SelecBow_min=1,score_UseBow_min=1] ~ ~ ~
- /execute @e[type=Arrow,r=3,score_ArrowInG=0] ~ ~ ~
- /scoreboard players set @e[type=Arrow,r=0] IsFrozArrow 1
复制代码 这条/execute指令套着一个/execute套着一个/scoreboard指令。主要是,如果玩家手拿正确的弓箭,并且射了一支箭(score_SelecBow_min=1,score_UseBow_min=1),那么就会把该玩家附近3格范围的所有在飞的箭(type=Arrow,r=3,score_ArrowInG=0),IsFrozArrow积分设为1(set @e[type=Arrow,r=0] IsFrozArrow 1)。这个用处就是让机器知道哪支箭是Frozen弓射出的。如果是普通的弓箭射出的,那么就不会被机器探测到。
之后就是探测正确的生物:
- /execute @e[type=Arrow,score_ArrowInG_min=1,score_IsFrozArrow_min=1] ~ ~ ~
- /execute @e[type=!Arrow,r=2] ~ ~ ~
- /scoreboard players set @e[r=0] RightMob 1
复制代码 探测已经落地了,而且是Frozen射出的箭(type=Arrow,score_ArrowInG_min=1,score_IsFrozArrow_min=1),然后再探测周围2格非弓箭的实体(type=!Arrow,r=2),把那些实体的RightMob积分设为1。这个用处就是如果箭落在了一个生物旁边,那么那个生物的RightMob就会变成1,RightMob为1的生物就是被选中的生物。(如果箭没落地,而打中了生物,那就没用了,目前MC没办法探测是否有箭在生物里)。
最后就是对RightMob积分为1的生物输出:
- /execute @e[score_RightMob_min=1,type=!Player] ~ ~ ~
- /setblock ~ ~ ~ minecraft:ice
复制代码 给正确的生物(score_RightMob_min=1,type=!Player),身体里放冰块(/setblock ~ ~ ~ minecraft:ice)。这个就是视觉效果,假装被冰了。
- /entitydata @e[score_RightMob_min=1]
- {NoAI:1b}
复制代码 把正确的生物的AI锁定掉(score_RightMob_min=1,{NoAI:1b})。没有AI的生物是不会动的,所以看起来被冰起来了。
第四步:清空机器,指令:
- /kill @e[type=Arrow,score_ArrowInG_min=1,score_IsFrozArrow_min=1]
复制代码- /scoreboard players reset * RightMob
复制代码 以上指令杀掉箭,清空RightMob积分版。
这就是整个机器,箭打到生物旁边后那个生物会冰起来。对玩家无效。之后,刚才说过,如果箭打到生物上,那就会没用,因为指令方块只能探测落得的箭,而无法探测打在生物上面的箭。但是有一个解决方法,就是使用/execute detect功能探测马上要落地的箭,然后冰冻下面的生物,但是本机器不会加入此装置。
(视频敬请期待)
(所有图片图床上传)
---百度云盘存档下载---(进去后先按绿色按钮开始机器。红色关闭机器,黄色杀掉生物)
(这个作品本人没加入清空UseBow,可能联机模式会出现BUG。玩家可以自行加入一个速度慢点的脉冲,清空UseBow积分版)
======END======
作者: dadiaobi 时间: 2014-10-18 12:40
大大你可以做一个冰火之箭,就是用两个这个机器,只不过,一个是冰,一个是岩浆,在冰和岩浆之间用空气代替,就行了,最后把他们的中继器的档数改一下就OK了
作者: 174--3Q 时间: 2014-10-18 12:53
好高端的样子,,
作者: PotatoMaster101 时间: 2014-10-18 15:55
我会告诉你我这个机器根本没用中续器或者比较起器吗
作者: 蓝小墨云 时间: 2014-10-18 16:13
哎哟 这挺牛的啦。就是寒冰的大招
作者: dadiaobi 时间: 2014-10-18 19:03
好吧。。。。。。。
作者: EternityTQ 时间: 2014-10-18 19:37
看起来好高端,但是为什么我看的时候图全挂了
作者: satgo1546 时间: 2014-10-18 20:57
国外有人已经做过了……
作者: 々Ricardo 时间: 2014-10-19 10:33
图挂了.........
作者: PotatoMaster101 时间: 2014-10-19 21:35
为什么我这里没挂。。
作者: lzs1234 时间: 2014-10-19 21:37
你最近一直没发帖今天突然怒发一贴= =
作者: QinZH 时间: 2014-10-24 20:17
我说图挂了你信吗{:10_533:}
作者: chyx 时间: 2014-11-2 18:20
我发现要是把一个direction:[]的小火球不停tp到雪球那里
execute @e[type=SmallFireball] ~ ~ ~ tp @e[type=SmallFireball,c=1] @e[type=Snowball,c=1]
等雪球打到方块或实体后小火球还会留在那里
可以不
作者: chyx 时间: 2014-11-2 18:20
1.8正式版
作者: PotatoMaster101 时间: 2014-11-2 21:29
凋零骷髅不也一样吗
作者: chyx 时间: 2014-11-2 23:30
听说凋零头坏了。我没试不知道还行不行
作者: C-青皮君 时间: 2014-11-3 00:17
一定要把怪物冻死,汝等好残忍
另附:神一样的签名图
作者: 1393716164 时间: 2014-11-5 13:42
寒冰箭————————》
作者: weipangde 时间: 2014-11-5 13:59
很高端我貌似看的有点云里雾里,对于小白这个还是比较吃力
作者: 1037536211 时间: 2014-12-12 12:31
这有什么用?
作者: gamemode4 时间: 2015-1-30 12:53
最好做一个闪电之弓
作者: Green_stone 时间: 2015-2-18 16:45
如此好的作品!只是看不懂计分板.
作者: linkun66666 时间: 2015-3-31 16:57
用命令怎么直接让玩家射出箭不用弓的
作者: 2012011179 时间: 2015-6-29 22:31
用SelectedItem标签检测不是更简单吗
作者: 472019579 时间: 2015-6-30 11:39
LZ图挂了!!
作者: 千城之殇 时间: 2015-6-30 13:38
看起来很不错呢。。
作者: 343362619 时间: 2017-8-16 18:27
联机如果我拿着普通弓,箭越过拿寒冰弓的玩家3格范围,我的箭也会变成寒冰箭吧
作者: 1933932899 时间: 2017-8-16 23:15
额
作者: 5dongdnng5 时间: 2017-8-17 22:38
66666666666666666666666666666
作者: 無名Five 时间: 2017-8-18 08:27
好高级,顶一下
作者: 343362619 时间: 2017-8-19 10:59
这个文章,我学到好多东西