本帖最后由 PotatoMaster101 于 2014-7-19 10:20 编辑

大家好。今天教大家如何制作矿石探测器。就是当玩家手上拿了一个东西后,会出现积分板,告诉玩家地下有多少矿石,还告诉玩家是什么矿石。



这个机器比较简单,主要是使用了新的{CommandStats},或者直接/stats。


首先,我们需要一个探测玩家手里有没有拿着一个探测器。本人这里使用的探测器,是一个地狱星,有自定义名字和介。



像其他的指令方块作品,都要有脉冲来激活。这里本人使用指令方块高速脉冲。

第一,就是要一个积分板变量。本人这里使用"Hold"名字的积分板,dummy变量。所以,第一个指令方块就是清空玩家的Hold积分板,分数变成0。指令:
  1. /scoreboard players set @a Hold 0
复制代码
这个Hold变量就是探测玩家有没有拿物品。如果拿了,那就把积分变成1,没拿就是0。之后,就是探测玩家又没有拿物品的指令方块了。一共有9个,因为玩家有9个物品栏。指令是:

  1. /scoreboard players set @a Hold 1
  2. {SelectedItemSlot:0,Inventory:[{id:"minecraft:nether_star",Damage:0s,Count:1b,Slot:0b,tag:{display:{Name:"Ore Detector",Lore:["Finds any ore"]}}}]}
复制代码
  1. /scoreboard players set @a Hold 1
  2. {SelectedItemSlot:1,Inventory:[{id:"minecraft:nether_star",Damage:0s,Count:1b,Slot:1b,tag:{display:{Name:"Ore Detector",Lore:["Finds any ore"]}}}]}
复制代码
大家看见,唯一有改动的就是{SelectedItemSlot}和{Inventory}内的Item。这2NBT后面的数字都相同,分别是0-8。玩家手拿第一个就是0,然后第二个就是1,以此类推。(此类型指令还有7个,就不一一的列出了)。之后里面的“
{id:"minecraft:nether_star",Damage:0s,Count:1b,Slot:1b,tag:{display:{Name:"Ore Detector",Lore:["Finds any ore"]}}}”,就是探测的物品。这里是一个名字叫“Ore Detector”的地狱星,并且介绍是"Finds any ore"。玩家要探测其他东西那就自行改下。

注意:顺序一定要是先清空,然后再探测,否则就无法探测得到了

之后,下一步就是另外一个机器。这个机器可有可无,主要是美观使用。主要就是当玩家手拿物品后,屏幕左边会出现积分板,玩家没有手拿物品,那就不会出现。这个主要是使用积分板的teams做的。

首先,我们要创建一个teams。指令是:
  1. /scoreboard teams add Gold
复制代码
这条指令,就是积分板里加一个名字叫“Gold”的Team(队伍)。这个名字大家可以自己改动,之后我们要把这个Team的颜色改掉,好让指令方块可以探测得到。指令是:

  1. /scoreboard teams option Gold color gold
复制代码
这条指令把刚才的“Gold”的队伍改成金色。当然,不一定要是金色,玩家打进指令后再颜色的地方按Tab,就会出现积分板所有的颜色。队伍创建完毕后,还要一个显示的指令。也就是一条让所有在金色颜色队伍内的玩家,可以看到积分板的矿石探测。指令是:

  1. /scoreboard objectives setdisplay sidebar.team.gold Underground
复制代码
这条指令把一个叫“Underground”的变量显示给所有金色队伍的人员看。其他没有队伍的玩家或者不同队伍的玩家是无法看到的。之后这个Underground积分板,之后是用来探测矿物用的。


之后就要做一个机器了。刚才做的是,一旦有玩家在Gold队伍里面,就会看见积分板。所以我们需要一个装置:一旦玩家手拿物品,那就会进入Gold队伍,没拿那就会退出Gold队伍。指令分别是:
  1. /execute @a[score_Hold_min=1] ~ ~ ~ /scoreboard teams join Gold @a[r=0]
复制代码
这条指令探测所有的“Hold”积分板为最起码1的玩家,然后把他们加入到Gold队伍。后面的[r=0],也就是精准的选择那个玩家,而不是其他旁边的一些玩家。Hold积分板刚才说了,就是把拿着物品的玩家积分设成1。所以,拿了物品后,那个玩家就进入了Gold队伍,可以看到积分板了。之后,还要一个退出的指令。当玩家没有拿物品,那就会退出这个Gold队伍,导致看不见。指令是:

  1. /execute @a[score_Hold=0] ~ ~ ~ /scoreboard teams leave Gold @a
复制代码
如果是多人游戏可能需要多个队伍,每个玩家一个)。以上指令把没有拿物品的玩家退出队伍。


之后还需要一个显示的积分板,也就是Underground。玩家可以随便输入。所以先创建一个积分板:
  1. /scoreboard objectives add Underground dummy
复制代码
以上指令创建“Underground”积分板,拥有dummy变量。之后需要创建假名。有7个矿石,所以分别是:

  1. /scoreboard players set Diamond Underground 0
复制代码
  1. /scoreboard players set Gold Underground 0
复制代码
  1. /scoreboard players set Coal Underground 0
复制代码
  1. /scoreboard players set Iron Underground 0
复制代码
  1. /scoreboard players set Lapis Underground 0
复制代码
  1. /scoreboard players set Emerald Underground 0
复制代码
  1. /scoreboard players set Redstone Underground 0
复制代码
  1. /scoreboard players set Air Underground 0
复制代码
大家看见,上面有8条指令。第8条是探测空气用的,来告诉玩家下面有没有矿洞。


以上就是积分板系统了。之后就要使用/stats了。游戏里一共有7种矿石(不包括地狱石英矿),所以我们需要14个指令方块。2个指令方块控制一种矿石。首先,来控制

第一条指令是:
  1. /execute @a[score_Hold_min=1] ~ ~ ~ /fill ~ ~20 ~ ~ ~-30 ~ minecraft:jungle_stairs 0 replace minecraft:coal_ore 0
复制代码
这条指令,意思就是,探测所有拿着物品的玩家,然后把他们头上20格,脚下30格的所有煤矿,都换成台阶。本人使用台阶是因为台阶拥有很多Damage数值,因为每种不同的矿石都要有一个更换物品,所以用台阶就可以换掉所有的矿石,直接修改Damage数值就可以了。大家看见,煤矿本人用的是0的台阶。

之后事情还没完。因为这条指令只是把煤换成了拥有Damage为0的台阶,之后还要把台阶换回煤。指令是:
  1. /execute @a[score_Hold_min=1] ~ ~ ~ /fill ~ ~20 ~ ~ ~-30 ~ minecraft:coal_ore 0 replace minecraft:jungle_stairs 0
复制代码
这和刚才的一样,只不过是玩家头上20格,脚下30格的所有0台阶换成煤矿。之后就使用/stats了。在这个指令方块上面站着,然后输入指令:

  1. /stats block ~ ~-1 ~ set AffectedBlocks Coal Underground
复制代码
这条指令的意思就是,一旦指令方块有改动(把台阶换成煤矿),那么就会用积分板显示换了多少次。所以,这样可以直接知道玩家附近有多少个煤矿。(激活顺序是首先煤块换台阶,然后台阶换煤块。这个推荐放到指令方块高速脉冲,这样子看不见变换的过程。)以上的/stats,Coal就是假名Coal,然后Underground就是积分板名字。其他就不需要改了。


玩家会问,这么复杂做什么,直接把煤块换成煤块不就好了?答案是不行,因为/fill的replace功能和/setblock的一样。所以,如果是同一种方块,/fill并不会替换。所以我们要先替换成其他方块,然后再替换回来。


之后就都是一样了。只要改下替换ID就可以了。比如:(/stats每个把台阶替换矿的指令方块都要弄一下。)
  1. /execute @a[score_Hold_min=1] ~ ~ ~ /fill ~ ~20 ~ ~ ~-30 ~ minecraft:jungle_stairs 1 replace minecraft:iron_ore 0
复制代码
  1. /execute @a[score_Hold_min=1] ~ ~ ~ /fill ~ ~20 ~ ~ ~-30 ~ minecraft:iron_ore 0 replace minecraft:jungle_stairs 1
复制代码
把铁矿替换成拥有Damage 1的台阶,然后再替换回来。一直重复到空气,那么这个部分就做完了。玩家只要自行加入其他的矿物,然后替换成其他Damage数值的台阶就可以了


这个机器一个缺点是,如果玩家在低于30格(y<30),那么机器就会坏掉。因为/fill或者/setblock无法替换虚空内的方块。所以积分板只会显示0,无法进行探测。

另附:百度云存档下载地址

视频:
http://v.youku.com/v_show/id_XNzQxMzk4MzQw.html

==========END===========