教程/自定义命令触发
在制作地图时需要一些触发命令的装置,让玩家无需自己去输入放置命令来触发。本教程介绍几种触发命令的方式。
目录
自定义命令类[编辑 | 编辑源代码]
gamerule+stats+scoreboard [仅Java版1.13前][编辑 | 编辑源代码]
使用gamerule作为自定义命令,玩家使用时输入/gamerule 自定义规则名 检测时对应的数值
- 第一步:自定义游戏规则
- 确定好自定义的规则名后,直接输入
/gamerule 自定义规则名 任意数字
。
- 第二步:记分板相关准备
- 首先输入
/scoreboard objectives add 自定义变量名 dummy
,用来储存等会传过来的值
- 接下来有两种办法储存变量的值。
- 用虚拟实体,输入
/scoreboard players set 虚拟实体名 自定义变量名 0
。这个虚拟实体只提供名字,不会被kill影响。 - 用盔甲架,先在电路区域放置好盔甲架并把盔甲架命名,接着输入
/scoreboard players set @e[name=盔甲架名字] 自定义变量名 0
- 用虚拟实体,输入
- 第三步:用stats将gamerule的值输入记分板
- 放置一个命令方块,输入命令
gamerule 自定义规则名
。这个命令将查询当前规则的值。 - 打开F3调试界面,记下这个命令方块的坐标,输入
/stats block x坐标 y坐标 z坐标 set QueryResult 虚拟实体名或盔甲架名 自定义变量名
。这条命令将把命令方块gamerule查询到的值返回到记分板上。 - 激活重复命令方块,使其不断刷新查询的值。此时stats建立的连接将把查询到的值返回记分板。
- 第四步:电路检测记分板值并触发命令
- 提示玩家输入
gamerule 自定义规则名 数值
,数值为你想检测的数值。
- 检测时:
- 如果用盔甲架,高频接入execute,配合选择器的记分板分数探测(@e[score_自定义变量名_min=数值])会方便一些,如果检测的值成立则用fill/setblock红石块等方法触发电路。
- 如果用虚拟实体,高频接入命令
/scoreboard players test 虚拟实体名或盔甲架名 自定义变量名 数值
,数值为你想检测的数值,后接比较器输出信号。在1.9后可以用条件制约的方块而避免比较器延迟。
- 如果需要复位,就在命令电路中对自定义规则的值设成0。
此命令组在1.13及以后的版本失效,因为stats和scoreboard players test以及自定义游戏规则的移除。
- 示例
/gamerule bomb 0
,使用/gamerule bomb
查询可以看到bomb = 0
的提示。/scoreboard objectives add vbomb dummy
/scoreboard players set fakename vbomb 0
。- 两条命令先设置名为vbomb的变量,再给fakename这个虚拟实体设置vbomb变量的值为0。
- 将
gamerule bomb
放入位于<200,50,-100>的命令方块中。用高频电路连接。 - 输入
/stats block 200 50 -100 set QueryResult fakename vbomb
。 - 高频连接
/scoreboard players test fakename vbomb 1 1
,用比较器连接好命令电路。 - 提示玩家输入
/gamerule bomb 1
开始某样操作。 - 在命令电路中放置
/gamerule bomb 0
的命令方块。完成。
trigger+scoreboard[编辑 | 编辑源代码]
使用trigger需要将记分板变量交给玩家使用,所以需要先使用高频或低频电路给予玩家更改记分板变量的权力。
- 第一步:记分板相关准备
- 创建记分板变量
scoreboard objectives add 自定义变量名 trigger
。应当指出的是这里的准则不是dummy而是trigger。 - 高频接入
scoreboard players enable @p或@a 自定义变量名
,选择器可以按需选择。这条命令让指定玩家能修改某个变量的值。
- 第二步:使用与检测
- 提示玩家输入
trigger 自定义变量名 set 数值
。 - 最后在命令方块里打上
/execute if entity @a[score={"自定义变量名"=...] ...
主动交互类[编辑 | 编辑源代码]
clear+空地图[编辑 | 编辑源代码]
这种方法的原理是让玩家打开空地图,然后高频连接clear地图的命令方块,比较器连接并触发电路,同时在电路中安排返还空地图的命令。 但是存在局限性,所以一般用于一些小游戏中。
相关命令:/clear @p filled_map
与/give @p map
雪球抛掷+scoreboard相关判据[编辑 | 编辑源代码]
输入命令/scoreboard objectives add 变量名 stat.useItem.minecraft.snowball
,即可统计雪球抛出的次数。
通过/execute if entity @a[score={变量名=...}]
触发电路,然后用scoreboard相关命令复原记分板值。
testforblock检测方块状态 [仅基岩版][编辑 | 编辑源代码]
有些机关,通过检测方块状态触发命令。
检测拉杆状态:testforblock x y z lever 相关数据值
,如检测朝向z轴正向的拉杆,填入11,则当拉杆被拉下,在外观上看没有电路,也能触发机关。
检测展示框的旋转状态也可以。详见物品展示框。
告示牌点击[编辑 | 编辑源代码]
这里提供一份模板,使用到了JSON文本。
命令中standing_sign是立着的告示牌,wall_sign是墙上的告示牌,随需要选择。也可以通过/data merge block
修改告示牌内容。
/setblock x y z minecraft:standing_sign或minecraft:wall_sign replace {Text1:"{\"clickEvent\":{\"action\":\"run_command\",\"value\":\"''第一条命令''\"},text:\"''提示信息''\"}", Text2:"{\"clickEvent\":{\"action\":\"run_command\",\"value\":\"''第二条命令''\"}}", Text3:"{\"clickEvent\":{\"action\":\"run_command\",\"value\":\"''第三条命令''\"}}", Text4:"{\"clickEvent\":{\"action:run_command\",\"value\":\"''第四条命令''\"}}"}
被动探测类[编辑 | 编辑源代码]
漏斗低频+范围检测到实体[编辑 | 编辑源代码]
搭建一个朝向连通的漏斗组,并在里面放入物品,用比较器连通其中一个漏斗,就制作好了漏斗低频。
/execute if entity
中比较器填入distance的项,检测附近的玩家,即可实现一些被动触发的机关(部分命令无法在目前基岩版实现,如记分板中目前只能使用dummy虚拟类型,触发可能因此受限)。
善用红石元件[编辑 | 编辑源代码]
陷阱箱,绊线与绊线钩都是用于机关设计的,善用他们可以省去很多搭建电路的麻烦。
新手教程 |
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
常规 |
| ||||||||||||
存储方案 | |||||||||||||
农场 |
| ||||||||||||
附魔与烧炼 | |||||||||||||
破坏方块 | |||||||||||||
红石 |
| ||||||||||||
服务器 |
| ||||||||||||
原创 |
| ||||||||||||
技术性 |
| ||||||||||||
过时教程 |