【MCJE】如何使用命令完成物品交易
所谓交易,或者说以物易物,在其中一方看来,其实包含两个部分:消耗物品,得到物品
因此就容易联想到这两个命令:
/give 目标 物品{物品数据标签} 数量
/clear 目标 物品{物品数据标签} 最大清除数量
/give可以给“目标”指定数量的指定物品
而/clear可以清除“目标”指定数量的指定物品
在进行交易的玩家视角,这就分别相当于得到和消耗的两个效果
因此只需要这两条命令就可以实现完成交易这一效果
(注:你需要先获得该“特殊绿宝石”用于交易:聊天框输入/give @s minecraft:emerald{tag:["A"]} 64即可)
完成交易:
clear @p emerald{tag:["A"]} 40
give @p diamond_sword{} 1
//*这两条命令在执行完成交易时依次执行
//完成“用40个带有标签tag:["A"]的绿宝石兑换一把普通钻石剑”
但还有一个问题是,这只是完成交易的部分,而完成交易之前,还需要先确认是否能交易
在很古老的时代曾看过基岩版玩家用条件制约使give命令在clear能成功清除时才执行,这样已经做到了一半,也就是在能交易时,才能得到物品,但这个办法是不好的,它无论在什么时候都会进行消耗物品
而无论是在最新的java版还是在最新的基岩版,都已经可以做到更好的检测了,我以java版举例:
scoreboard objectives add score dummy
//*初始化计分项,在一个存档内只需要执行一次(直接聊天框手打一次)
execute store result score #Count score run clear @p emerald{tag:["A"]} 0
//将背包中拥有的特殊绿宝石数量覆盖到“分 数”中
execute if score #Count score matches 40.. run clear @p emerald{tag:["A"]} 40
execute if score #Count score matches 40.. run give @p diamond_sword{} 1
//如果“分数”大于等于40(即背包中有足够的特殊绿宝石)就扣除40个特殊绿宝石,并给予一把普通钻石剑
//*连锁执行,在进行交易时执行(用脉冲连锁连起来,用按钮等激活脉冲命令方块以进行一次购买)
原理:
clear命令执行完会返回一段数值,当清除了物品时会返回清除的数量,而当clear后面的最大清除数量为0时便会返回身上所有的符合条件的物品数量
这一个返回的数值,又可以用execute命令store result储存到一个指定的位置,而这个位置,又可以是一个计分板分数
因此,便能将身上所有的某物品的数量,覆盖到一个分数中去(也就是那个#Count score)
而分数的值,又可以用于条件判断
if score #Count score matches 40..的意思便是在数值大于等于40时才执行
仔细看会发现,最后两条命令“run”前面的内容是完全一致的,这一部分包括一个判断的条件:
分数大于等于40 即背包中的这种绿宝石大于等于40个 时 执行后面的部分
因为条件完全一致,因此它们后面部分的命令会在这个条件达成时同时(或者说依次)执行
再仔细看一下,被执行的“后面这一部分”,其实就是前面完成交易的命令
所以,这一整大部分,就已经包含了“是否能交易”以及执行“完成交易”这两份内容了
于是,便能完成最终的效果
对于很少接触过命令的人,这份教程或许会很难以理解,想要了解其中使用的命令的可以再到以下页面中探索:
使用的四种命令:
命令/give - Minecraft Wiki_BWIKI_哔哩哔哩 (biligame.com)
命令/clear - Minecraft Wiki_BWIKI_哔哩哔哩 (biligame.com)
命令/execute - Minecraft Wiki_BWIKI_哔哩哔哩 (biligame.com)
命令/scoreboard - Minecraft Wiki_BWIKI_哔哩哔哩 (biligame.com)
nbt相关内容:
教程/NBT命令标签 - Minecraft Wiki_BWIKI_哔哩哔哩 (biligame.com)