GUI 模板(templates/*.yml)
模板文件位于:plugins/AIOShop/templates/
商店通过 gui-template: "<模板ID>" 引用(模板 ID = 文件名不含 .yml)。
模板决定:
- GUI 大小与商品展示槽位
- 商品 Lore 的拼接规则(含价格、限购、状态等)
- 自定义按钮(关闭、刷新、执行命令、装饰品)
首次启动会释放示例模板到
templates/。
1) 基础字段
name: "普通商店模板"
description: "最简单的基础模板"
category: "general"
size: 54
title: "&2&l%shop_name%"
item-slots: [10, 11, 12, 13, 14, 15, 16]
size必须是9的倍数且不超过54title支持占位符(见下文)
2) 空位与失效商品展示
empty:
name: "&7空位"
material: GRAY_STAINED_GLASS_PANE
lore:
- "&f该位置当前没有商品"
unknown:
name: "&c商品已下架"
material: RED_STAINED_GLASS_PANE
lore:
- "&c该商品信息已失效"
3) 商品 Lore 模板 items-lore
items-lore 是一个字符串列表,支持“特殊占位符行”:
%description%:替换为商店商品的description(可多行)%base_lore%:替换为展示物品的原始 Lore(可多行)%price_display%:按formats.price生成价格行%limit_display%:按formats.limit生成购买限制行%sell_limit_display%:按formats.sell_limit生成出售限制行%status_display%:按formats.status生成状态行
示例:
items-lore:
- "%description%"
- "%base_lore%"
- ""
- "%price_display%"
- "%limit_display%"
- "%sell_limit_display%"
- "%status_display%"
4) 格式化 formats
模板会根据上下文选择对应键(不存在则回退到 default)。
formats:
price:
buy_and_sell: "&7价格: &a买入 %buy_price% %buy_currency_name% &7| &c卖出 %sell_price% %sell_currency_name%"
buy_only: "&7价格: &a买入 %buy_price% %buy_currency_name%"
sell_only: "&7价格: &c卖出 %sell_price% %sell_currency_name%"
buy_with_discount: "&7原价: &m%original_price% %buy_currency_name%&r &7| &6折扣价: &a%buy_price% %buy_currency_name% &e(--%discount_percent%%)"
not_tradeable: "&7价格: &8不可交易"
default: "&7价格: &f未配置"
limit:
limited: "&e%limit_display_name%: &c%purchased_amount%&7/&a%limit_amount%"
unlimited: ""
default: ""
sell_limit:
limited: "&e%sell_limit_display_name%: &c%sold_amount%&7/&a%sell_limit_amount%"
unlimited: ""
default: ""
status:
available: "&a✓ 可以购买"
not_available: "&c✗ %cant_purchase_reason%"
default: ""
5) 自定义按钮 custom-items
custom-items:
close:
name: "&c&l关闭"
material: BARRIER
slots: [49]
action: "CLOSE"
refresh:
name: "&a&l⟳ 刷新商店"
material: EMERALD
slots: [49]
action: "REFRESH"
run_command:
name: "&e执行命令"
material: COMMAND_BLOCK
slots: [0]
action: "COMMAND"
command: "say %player% opened %shop_name%"
action 可用值(大小写不敏感):
CLOSEREFRESH(只对随机商店有效;会消耗刷新点数)COMMAND(由玩家执行command)NULL(装饰品,仅点击音效)
6) 占位符(你能在模板里用什么)
模板文本分两类:
- 标题/自定义按钮:使用 GUI 上下文占位符 + PAPI 占位符
- 商品 Lore:使用“商品上下文占位符”(下表)+ PAPI 占位符
6.1 GUI 上下文占位符(标题/自定义按钮)
在 title 和 custom-items 的 name/lore/command 中可用:
%player%%shop_name%%shop_id%%refresh_points%(仅随机商店时为实际值,否则为 0)%template_id%%template_name%
同时支持 PlaceholderAPI(例如 %vault_eco_balance% 等)。
6.2 商品上下文占位符(商品 Lore)
以下占位符由插件在渲染每个商品时提供(大小写不敏感):
- 基础:
%player%、%shop_name%、%item_name% - 描述:
%description%、%base_lore% - 买入:
%has_buy_price%、%buy_price%、%buy_currency%、%buy_currency_name% - 卖出:
%has_sell_price%、%sell_price%、%sell_currency%、%sell_currency_name% - 收购条件:
%has_sell_condition%、%sell_condition_name%、%sell_condition_technical% - 额外卖出奖励:
%has_extra_sell_rewards%、%extra_rewards_count% - 折扣:
%has_discount%、%original_price%、%discount_percent% - 购买限制:
%has_limit%、%limit_display_name%、%limit_amount%、%purchased_amount%、%remaining_amount% - 出售限制:
%has_sell_limit%、%sell_limit_display_name%、%sell_limit_amount%、%sold_amount%、%remaining_sell_amount% - 状态:
%can_purchase%、%cant_purchase_reason%、%can_sell%、%cant_sell_reason%
7) 修改后如何生效
编辑 plugins/AIOShop/templates/*.yml 后执行:
/as reload