在制作地图时需要一些触发命令的装置,让玩家无需自己去输入放置命令来触发。本教程介绍几种触发命令的方式。
自定义命令类[]
trigger+scoreboard[]
使用trigger需要将记分板变量交给玩家使用,所以需要重复不断地给予玩家更改记分板变量的权限。
- 第一步:记分板相关准备
- 创建记分板变量
/scoreboard objectives add <自定义变量名> trigger
。应当指出的是这里的准则不是dummy而是trigger。 - 放置三个命令方块,循环型命令方块指向连锁型命令方块1,连锁型命令方块1指向连锁型命令方块2。
- 在循环型命令方块中输入
/scoreboard players enable (@p|@a) <自定义变量名>
,选择器可以按需选择。这条命令让指定玩家能修改某个变量的值。 - 在连锁型命令方块1里打上
/execute if entity @a[scores={<自定义变量名>=<数值>}] run <需要执行的命令>
。 - 最后,在连锁型命令方块2里输入
/scoreboard players set @a <自定义变量名> 0
。
- 第二步:使用与检测
- 提示玩家输入
/trigger <自定义变量名> set <数值>
。 - 输入完毕后,
<需要执行的命令>
应该会自动执行。
主动交互类[]
clear+空地图[]
这种方法的原理是让玩家打开空地图,然后高频连接清空已绘制地图的命令方块,比较器连接并触发电路,同时在电路中安排返还空地图的命令。但是存在局限性,所以一般用于一些小游戏中。 相关命令:
雪球抛掷+scoreboard[]
- 输入命令
/scoreboard objectives add <变量名> minecraft.used:minecraft.snowball
,即可统计雪球抛出的次数。 - 通过
/execute as @a[scores={<变量名>=1..}]
触发电路,然后用scoreboard相关命令复原记分板值。
检测方块状态[]
有些机关,通过检测方块状态触发命令。
- 检测拉杆状态:
/execute if block <x> <y> <z> lever[powered=true]
[仅Java版]或 /testforblock <x> <y> <z> lever <数据值>
[仅基岩版]。 - 在基岩版中,如检测朝向z轴正向的拉杆,数据值填入11,则当拉杆被拉下,在外观上看没有电路,也能触发机关。
- 检测展示框的旋转状态也可以。详见物品展示框。
告示牌点击[]
这里提供一份模板,使用到了JSON文本。
/setblock ~ ~1 ~ minecraft:oak_sign{Text1:'{"clickEvent":{"action":"run_command","value":"/say 1"},"text":"点击执行"}',Text2:'{"clickEvent":{"action":"run_command","value":"/say 2"},"text":""}',Text3:'{"clickEvent":{"action":"run_command","value":"/say 3"},"text":""}',Text4:'{"clickEvent":{"action":"run_command","value":"/say 4"},"text":""}'}
注意:
minecraft:oak_sign
是立着的告示牌。要使用墙上的告示牌,请使用minecraft:oak_wall_sign
。- 也可以通过
/data merge block
修改告示牌内容。 - 由于告示牌的文本只有四行,且一个JSON文本中只能执行一条命令,所以一个告示牌最多只能执行4条命令。
被动探测类[]
漏斗低频+范围检测到实体[]
搭建一个朝向连通的漏斗组,并在里面放入物品,用比较器连通其中一个漏斗,就制作好了漏斗低频。
在Java版中,使用/execute if entity @a[distance=..<距离>]
。在基岩版中,使用/execute @a[r=<距离>] ~ ~ ~
。检测附近的玩家,即可实现一些被动触发的机关。
善用红石元件[]
陷阱箱,绊线与绊线钩都是用于机关设计的,善用他们可以省去很多搭建电路的麻烦。
参见[]
|