也许你认为在Mc中爆破只能是TNT的艺术,但可惜我们不能用TNT来完全模仿出FPS射击中的爆破。现在,在1.8版本中终于酝酿出了完全效果、相同原理的爆破系统,本教程可谓地图制作者,尤其是FPS射击爱好者的福音。

下载地址(可以利用Mce转存、或研究体验)

展示:
http://v.youku.com/v_show/id_XNzA0NTU1OTQ4.html


原理:


这是主要处理部分,命令方块比较多,将给大家详细讲解。

前端输入区


主要目的:探测玩家是否有安放C4的动作,并输入信号。

首先一个命令方块脉冲(←点击“脉冲”进入教程)连接蓝色
蓝色:
  1. /testfor @p[388,8,381,r=0] {SelectedItemSlot:4,Inventory:[{Slot:4b,id:"minecraft:firework_charge",tag:{display:{Name:"C4"}}}]}
复制代码
命令讲解:探测某方位(地图中红色地毯处,也就是C4安放点)那个方块位置的最近玩家、且手里拿着在5号物品栏(模仿背包中的C4为止)的名为C4的烟火之星。
若探测是,则输出黄色


黄色:绿色放置一个红石块

绿色开启脉冲,激活安包区


主要目的:显示安包时间、刷出实体C4
绿色下面:
  1. /xp 8l @p
复制代码
命令讲解:给予最近(因为前面已经探测到了最近玩家持有C4,不用增加判据)玩家8级经验。

脉冲长度5刻,模拟大概1秒

白色:
  1. /xp -1l @p
复制代码
命令讲解:(每秒)减少最近玩家1级经验。
于是制作了一个经验条显示器。

灰色组:
  1. /effect @p 2 2 255 true
复制代码
命令讲解:(每秒)给予玩家长度2秒,等级255(无法移动)并隐藏颗粒物的缓慢效果。
  1. /testfor @p[l=0]
复制代码
命令讲解:探测玩家等级0,若是则输出。



深灰组:
  1. /summon Item 388 8 381 {Item:{id:firework_charge,Count:1},PickupDelay:1000000000,Age:-32768}
复制代码
命令讲解:在下包处(红色地毯处)生成一个无法捡起的烟火之星。(无法捡起物品的教程
  1. /clear @p firework_charge 0 1 {display:{Name:"C4"}}
复制代码
命令讲解:清除玩家物品栏里的C4
在“前端输入区”红色处防止一个红石块,一个命令方块把红色羊毛设为空气,且激活:
  1. /scoreboard players set @e[type=Item,c=-1] firework 1
复制代码
命令讲解:给最近物品的firework计分板分数设为1。
首先我们需要一个实体计分板firework来探测:
  1. /scoreboard objectives add firework dummy firework
复制代码
这样做的主要目的是execute无法直接添加NBT标签,只能通过这样增加判据。

黑色组:
开启爆炸计时区、拆弹区、关闭安包区。

爆炸计时区


主要目的:显示爆炸倒计时、爆炸特效及重置。

当红色下面得到红石块输入后,激活三个命令方块:
按照先后信号顺序实现上下后左右
所以下面是:
  1. /scoreboard objectives add C4DetonatingTime dummy C4DetonatingTime
复制代码
命令讲解:创建名为“C4引爆时间”的计分板。
接着左右:
  1. /scoreboard objectives setdisplay sidebar C4DetonatingTime
复制代码
命令讲解:把这个计分板设置到侧边栏。
  1. /scoreboard players set @a C4DetonatingTime 30
复制代码
命令讲解:分数设为30(模拟30秒)



接着仍然也是激活一个5刻(长度1秒)的脉冲,连接黄色:
  1. /scoreboard players remove @a C4DetonatingTime 1
复制代码
命令讲解:(每秒)给这个计分板减1.

也连接蓝色:
  1. /testfor @a[score_C4DetonatingTime=0]
复制代码
命令讲解:探测全部玩家分数0,若是,则输出信号



绿色组(负责爆炸特效):
  1. /execute @e[type=Item,score_firework_min=1] ~ ~ ~ kill @e[type=!FallingSand,r=10]
复制代码
命令讲解:杀死所有在firework分数为1的物品周围10个方块单位的实体(除了掉落沙是因为周围有一个命令方块脉冲,同时也清除了C4)
  1. /playsound ambient.weather.thunder @a ~ ~ ~ 1 1 1
复制代码
命令讲解:给所有人播放打雷的音效。
  1. /execute @e[type=Item,score_firework_min=1] ~ ~ ~ /particle largeexplode ~ ~ ~ 10 10 10 0.001 2000
复制代码
命令讲解:在firework分数为1的物品处生成一个范围10,时间0.001,颗粒数量2000的大型烟雾
  1. /scoreboard objectives remove C4DetonatingTime
复制代码
命令讲解:删除倒计时计分板。



棕色(负责重置):
关闭爆炸倒计时、关闭拆包探测、关闭拆包倒计时、重置经验(若拆包失败及时清除倒计时)。


紫色:在拆包区另外讲解。

拆包区


主要负责拆包倒计时、重置。

首先我们来看一下警匪判据:
  1. /scoreboard objectives add ispolice dummy
复制代码
命令讲解:创建一个判断警匪的计分板。
若选择警察:
  1. /scoreboard players set @p ispolice 1
复制代码
则设为1
若选择土匪:
  1. /scoreboard players set @p ispolice 0
复制代码
  1. /give @p firework_charge 1 0 {slot:4b,display:{Name:"C4"}}
复制代码
设为0,并且给个C4。

所以若拆包,就探测这个人是否为警察。
拆包探测区:


红色:
  1. /execute @e[type=Item,score_firework_min=1] ~ ~ ~ execute @p[score_ispolice_min=1,r=0] ~ ~ ~ playsound random.successful_hit @p[sore_ispolice_min=1] ~ ~ ~ 1 1 1
复制代码
命令讲解:探测firework为1的物品(C4)接触到警察就播放ding的音效,并输出黄色

黄色:激活拆包倒计时
  1. /xp 8l @p[score_ispolice_min=1]
复制代码
给警察8级经验


倒计时区:


激活5刻(长度1秒)脉冲。激活蓝色组:
  1. /xp -1l @p[score_ispolice_min=1]
复制代码
命令讲解:(每秒)减去警察1级经验

  1. /effect @p[score_ispolice_min=1] 2 2 255 true
复制代码
命令讲解:
(每秒)给予警察长度2秒,等级255(无法移动)并隐藏颗粒物的缓慢效果。
绿色:
  1. /testfor @p[score_ispolice_min=1,l=0]
复制代码
命令讲解:探测警察等级0,若是,则输出信号。



输出棕色:
  1. /scoreboard objectives remove C4DetonatingTime
复制代码
命令讲解:移除爆炸倒计时计分板

  1. /kill @e[type=Item,score_firework_min=1]
复制代码
命令讲解:清除C4

并且关闭爆炸倒计时、关闭拆包探测、关闭拆包倒计时

最后两个紫色一起讲:
若C4爆炸,则
匪:
  1. /tellraw @a[score_ispolice=0] {text:"Explosion C4 successfully!",color:red,bold:true}
复制代码
警:
  1. /tellraw @a@a[score_ispolice_min=1] {text:"C4 has exploded",color:gray,bold:true}
复制代码
若拆包成功,则:
警:
  1. /tellraw @a[score_ispolice_min=1] {text:"Demolition C4 successfully!",color:red,bold:true}
复制代码
匪:
  1. /tellraw @a[score_ispolice=0] {text:"C4 has been defused",color:gray,bold:true}
复制代码
最后希望大家能从此帖中增长下命令知识!                                 -来自CBL                    by 2b

@cyqsimon @songfeitong @tyson @我的世界sun123 @PotatoMaster101 @ghyzhi10086
[groupid=546]Command Block Logic[/groupid]