跳到主要内容

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 的倍数且不超过 54
  • title 支持占位符(见下文)

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 可用值(大小写不敏感):

  • CLOSE
  • REFRESH(只对随机商店有效;会消耗刷新点数)
  • COMMAND(由玩家执行 command
  • NULL(装饰品,仅点击音效)

6) 占位符(你能在模板里用什么)

模板文本分两类:

  1. 标题/自定义按钮:使用 GUI 上下文占位符 + PAPI 占位符
  2. 商品 Lore:使用“商品上下文占位符”(下表)+ PAPI 占位符

6.1 GUI 上下文占位符(标题/自定义按钮)

titlecustom-itemsname/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