本文将简单介绍如何使用scoreboard记分板指令来搭建一个简易的指令商店。
scoreboard基础语法
创建记分板:scoreboard objectives add <objective: string> dummy [displayName: string]
<objective: string>是记分板的名字,可以是中文、英文等。[displayName: string]是记分板的显示名字,如果未指定,默认为记分板的名字。
检测记分板:scoreboard players test <player: target> <objective: string> <min: wildcard int> [max: wildcard int]
检测目标分数是否在<min: wildcard int>(最小值)和<max: wildcard int>(最大值)之间。(不填默认为(2147483647))
增减计分板:scoreboard players add <player: target> <objective: string> <count: int>
<count: int>是你要增加减小的数值。若目标实体在记分项中不存在分数,则在增加前视为0分。若为负数,则将减去相应的分数。
将记分板显示出来:scoreboard objectives setdisplay <list|sidebar> [objective: string] [ascending|descending]
list是显示在游戏暂停界面的右边。sidebar的显示在侧边栏。list与sidebar可以填写ascending(从小到大排列)或descending(从大到小排列)
原理介绍
我们可以先创建一个记分板用来当作服务器的虚拟货币,并且将货币显示出来,这样玩家可以直接看到自己的货币数量。
商店部分我们可以先检测玩家的金币数量是否超过该物品的售价,然后减去该物品的售价,最后给予玩家物品。
指令实践
一、创建一个名为money的记分板用来当作货币
scoreboard objectives add money dummy
二、将记分板显示在侧边栏
scoreboard objectives setdisplay sidebar money descending
购买商店
三、放置一个脉冲命令方块、无条件、需要红石,写入一下指令检查玩家的金币数量,假定出售10金币的苹果。
scoreboard players test @p money 10
四、在后面接着放置一个命令方块,设置为连锁、有条件、始终开启。给玩家扣10金币数。
scoreboard players add @p money -10
五、在后面接着放置一个命令方块,设置为连锁、有条件、始终开启。给予玩家一个苹果。这里的apple可替换为其他物品。
give @p apple
命令方块摆放方向朝向一定要一致,可以在脉冲命令方块前放置一个方块,再放置一个按钮,这样玩家点击按钮就能触发命令方块。如下图所示:

出售商店
1、放置一个脉冲命令方块,无条件,需要红石。这条指令可以清除玩家身上的一个苹果。这里的apple可以替换为其他物品。这种方法只能一个个出售。
clear @p apple 0 1
2、放置一个连锁命令方块,有条件,保持开启。这条指令能给玩家增加10金币数。这样就实现了物品换钱。
scoreboard players add @p money 10
命令方块摆放方向朝向一定要一致,可以在脉冲命令方块前放置一个方块,再放置一个按钮,这样玩家点击按钮就能触发命令方块。
这样,一个用scoreboard的指令搭建的简易商店就做好了。
更多有关我的世界服务器金币的内容可参考这篇文章:我的世界金币系统
如果我的金币数量突破了21亿 我该如何将它运用到实际的货币系统中 让这21亿金币显示并可以运用
我尽量建议不要把玩家能获得到的金币数目弄的如此巨大。在我的世界原版里实现虚拟金币效果只能用scoreboard记分板。上面的文章介绍了一种显示金币的方法。其实想显示记分板数字的方法有很多,但对于还不是很了解指令的玩家来说,本文提到的方法比较简单。但这种方法会把玩家下线的数值显示出来,想去除玩家下线可以参考这篇文章https://mc.ziyueyoushang.com/minecraft-rental-server-gold-coin-system.html
在我的世界基岩版里也可以用execute检测记分板,这种方法其实优于本文介绍的方法,但本文的指令更简单一些。
execute as @p at @s if score @s money matches 100.. run scoreboard players add @s money -100
这条指令的意思是如果最近的玩家money记分板的数值大于100就扣除该玩家money记分板100点数值。