更新于:

2.3 商店

所有商店文件都存储在 shops 文件夹下。

商店文件

示例商店文件在此:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
settings:
menu: 'example-shop-menu'
buy-more: true
shop-name: '食物商店'

items:
A:
display-name: "苹果"
price-mode: ANY
product-mode: ALL
products:
1:
material: APPLE
amount: 1
buy-prices:
1:
economy-plugin: Vault
amount: 200
placeholder: '{amount} 枚金币'
start-apply: 0
2:
economy-plugin: PlayerPoints
amount: 10
placeholder: '{amount} 点券'
start-apply: 5
sell-prices:
1:
economy-plugin: Vault
amount: 50
placeholder: '{amount} 枚金币'
2:
economy-plugin: PlayerPoints
amount: 1
start-apply: 5
placeholder: '{amount} 点券'
buy-actions:
- 'player_command: say %player% 购买了一个苹果!'
- 'announcement: &7%player% 购买了一个苹果!'
B:
display-item:
material: BREAD
display-name: "面包"
price-mode: ANY
product-mode: ALL
add-lore:
- '@a&e平民价: {buy-price}'
- '@b&e回收价: {sell-price}'
products:
1:
material: BREAD
amount: 1
buy-prices:
1:
economy-plugin: Vault
amount: 200
placeholder: '{amount} 枚金币'
start-apply: 0
2:
economy-plugin: PlayerPoints
amount: 10
placeholder: '{amount} 点券'
start-apply: 5
sell-prices:
1:
economy-plugin: Vault
amount: 50
placeholder: '{amount} 枚金币'
2:
economy-plugin: PlayerPoints
amount: 1
start-apply: 5
placeholder: '{amount} 点券'
buy-actions:
- 'player_command: say %player% 购买了一个面包!'
- 'announcement: &7%player% 购买了一个面包!'
buy-limits:
global: 100
default: 10
test-condition: 20
buy-limits-conditions:
test-condition:
- 'permission: test.permission'
buy-limits-reset-mode: 'TIMED'
buy-limits-reset-time: '00:00:00'

buttons:
a:
display-item:
material: arrow
name: '&c上一页'
lore:
- '&7点击翻到上一页!'
actions:
- 'shop_menu: crops'
```

### **设置**
- menu: 商店的菜单名称,也就是菜单的文件名称;**可选,如果这个选项删除,则该商店无法打开,只能通过 quickbuy quicksell 指令等手段购买里面的商品
- buy-more: 该商店中的商品是否能打开增量购买菜单;**可选,各个商品的配置中也有这个选项,因此这个选项也是可以删除的。如果未设置该选项,商品里也没有 `buy-more` 选项,则默认开启
- shop-name: 商店的显示名称,会被内置变量 `{shop-name}` 使用。

### **物品**
物品即为商店中的商品,商品可以不是物品,也可以是虚拟物品,例如 100 点其他经济插件的货币。
在上面的示例中,A B 就是商品的 ID,如果你需要在菜单中显示这个商品,则商品的 ID **必须** 是一个字符,因为它们需要在商店的 `layout` 选项中使用。(a-z,A-Z,0-9 等,已经大于原版箱子 54 格的所需了)否则, 你可以随心所欲的设置商品的 ID,只是它们将不能再显示到商店菜单中了。
- display-item: 展示在商店菜单中的物品,使用物品语句,可以与玩家实际获得的物品不同。对虚拟物品,你必须在这里设置 `display-item` 选项,否则它们就无法在商店菜单中显示。对于真实物品,你必须设置 `config.yml` 文件中的 `display-item` 下的 `auto-set-first-product` `true` 以允许你删除这个选项,启用后,若 `display-item` 未设置,那么出售的第一个真实物品将会被当做图标。该部分配置会使用到物品格式的配置;
- display-item.modify-lore: 是否自动修改物品描述,自动添加商品价格等信息;**可选参数(默认为 true)**
- display-name: 设置商品的显示名称,该名称会在基岩版 FormUI、内置变量 `{product}` 和增量购买菜单中使用;
- add-lore: 为该商品单独设置自动修改额外物品描述的格式,**可选参数。**
- buy-more: 设置该商品是否可以打开增量购买菜单,**可选参数。**
- price-mode: 价格的模式,支持 `ANY、ALL、CLASSIC_ANY CLASSIC_ALL` 参数;**可选参数**
- product-mode: 商品的模式,可填入的参数与上述相同。**可选参数。**
products: 作为商品的物品。支持物品语句和经济语句(分别见上述章节);**可选参数。若未设置,玩家在购买/出售后不会获得任何东西,适用于命令商店。**
- buy-prices: 商品的购买价格。支持物品语句和经济语句(分别见上述章节);**可选参数,若未设置则不能购买。**
- buy-prices.start-apply: 设置价格增加的起始购买次数;**可选参数。默认为 0。**
- buy-prices.end-apply: 设置价格增加的最终购买次数;**可选参数。默认不限制。**
- buy-prices.apply: 应用价格的购买次数,格式为:`[1,2,3,4]`;**可选参数**
- buy-prices.placeholder: 在内置变量 `{price}` 中的价格显示格式;**默认使用语言文件中的格式。**
- buy-price.conditions: 若要使用这个价格购买物品,则玩家必须到达的条件;
- sell-prices: 商品的出手价格。支持物品格式和经济格式(分别见上述章节);**可选参数,若未设置则不能出售。**
- buy-actions: 购买商品后执行的一系列动作。见“动作”章节获取更多信息;**可选参数**
- sell-actions: 出售商品后执行的一系列动作。见“动作”章节获取更多信息;**可选参数**
- buy-conditions: 玩家购买该商品所需达到的条件。见“条件”章节获取更多信息;**可选参数**
- sell-conditions: 玩家出售该商品所需达到的条件。见“条件”章节获取更多信息;**可选参数**
- buy-limits: 设置购买或出售的最大次数;**可选参数。若未设置,商品购买次数不作限制。**
- buy-limits.global: 全局购买限制;**可选参数。**
- buy-limits.default: 若玩家未到达下述的任意条件,他们就会使用该限制;**若设置了 buy-limits,则该项为必需参数。**
- buy-limits.<条件 ID>: 达到该要求的玩家将会使用该限制。可在“条件”章节找到对应的格式。例如:

```yml
buy-limits:
default: 10
vip: 20
buy-limits-conditions:
vip:
- 'permission: test.permission'
  • buy-limits-reset-mode: 可填入的参数有 TIMERTIMED。若 buy-limits 部分配置存在且该选项未设置,我们将会使用你在 config.yml 中的默认值;若设置 buy-limits 选项则为必需参数。
  • buy-limits-reset-time: 见上,格式为 XX:XX:XX。若 buy-limits 部分配置存在且该选项不存在,我们会使用 config.yml 中的默认值; TIMER 代表间隔重置、TIMED 代表每日定时重置。 例如,你将重置时间设置为 15:00:00,现在时间为 2023-09-04 12:00:00 在 TIMER 模式下,重置时间为 15 小时后,即 2023-09-05 03:00:00。 在 TIMED 模式下,将会在 2023-09-04 15:00:00 进行重置。
  • sell-limits: 与 buy-limits 设置相同,但是是为出售使用的;
  • buy-cooldown-mode: 设置商品的冷却模式;可选参数
  • buy-cooldown-time: 设置商品的冷却时间。可选参数

四种价格/商品模式

如图所示,简单而言,带有 CLASSIC 前缀的模式和不带的模式价格计算方式不一 样。前者是乘法,后者是加法。例如你要购买 5 个面包,面包单价是 10 元,那 么前者是 5+5+5+5+5+...+5,后者是 5x10。前者因为是相加关系,每次相加的 数字可以不一样,后者因为是相乘关系,相乘过程中数字无法发生变动。:

Pasted image 20240126171737.png

按钮

商店中同样可以插入菜单中的按钮(buttons)选项,功能完全一致。