Skip to content

GUI 与客户端界面

GTDungeonTeam 有两层界面:

  • gui/:原版背包 GUI,所有服务器都能用。
  • client-ui/:PaiUI、AX、DragonCore、KongCore、Dialog 等客户端界面。

如果客户端 UI 不可用,插件会按配置回到原版 GUI。

选择默认界面

yaml
ui:
  default: vanilla
  prefer-client-ui: true

可选:

text
vanilla
paiui
ax
dragoncore
kongcore
dialog

prefer-client-ui: true 表示优先尝试客户端 UI。失败后走原版 GUI。

客户端 UI 路由

文件:

text
plugins/GTDungeonTeam/client-ui/providers.yml

默认顺序:

yaml
routing:
  fallback-order:
    - paiui
    - ax
    - kongcore
    - dragoncore
    - dialog
    - vanilla

每个引擎都有自己的 views

yaml
providers:
  paiui:
    views:
      main: "layout/gtdungeonteam/main.html"
      team: "layout/gtdungeonteam/main.html"
      auction: "layout/gtdungeonteam/main.html"

  ax:
    views:
      main: "gtdungeonteam_main"
      team: "gtdungeonteam_team"
      auction: "gtdungeonteam_auction"

PaiUI 默认使用单页 main.html,在页面内部切换视图,减少多 HTML 切换闪屏。

原版 GUI 文件

text
plugins/GTDungeonTeam/gui/
  main.yml
  team.yml
  invite.yml
  applications.yml
  requirements.yml
  auction.yml
  dungeons.yml
  dungeon-detail.yml
  rooms.yml
  room-detail.yml
  result.yml

每个文件一个页面。写法接近 TrMenu:

yaml
main:
  Title: "&8副本大厅 &7| &f<player>"
  Layout:
    - "#########"
    - "#   S   #"
    - "#       #"
    - "# T D I #"
    - "# A M R #"
    - "#########"
  Icons:
    S:
      Display:
        Material: DIAMOND_SWORD
        Name: "&c&l开始挑战"
        Lore:
          - "&7队伍: &f<team_name>"
          - "&7人数: &f<members>/<max_members>"
      Actions:
        - "start:"

Layout

Layout 一行 9 格。一页 6 行就是 54 格。

yaml
Layout:
  - "#########"
  - "#MMMMMMM#"
  - "#MMMMMMM#"
  - "#C#I#D#A#"
  - "#V#X#R#K#"
  - "L#######B"

每个字符对应 Icons 下的一个图标。
同一个字符出现多次,会放同一个图标。

Display

yaml
Display:
  Asset: team
  Material: CHEST
  Name: "&a队伍管理"
  Lore:
    - "&7队伍: &f<team_name>"
    - "&7人数: &f<members>/<max_members>"
  Glow: "<public>"
  ItemFlags:
    - HIDE_ENCHANTS
  CustomModelData: "{calc:10000+<members>}"
字段作用
Asset读取 assets/ 中的资源映射
Material原版材料
Name物品名
Lore物品说明
Glow是否发光,支持变量
ItemFlags物品 Flag
CustomModelData模型数据,支持公式

标题、物品名、Lore、Glow、CustomModelData 都会渲染变量。

Condition

yaml
Condition: "<is_leader>"

条件为 false 时不显示这个图标。

常用:

yaml
Condition: "<has_team>"
Condition: "!<has_team>"
Condition: "<is_leader>"

! 表示取反。

动态列表 Type

成员列表:

yaml
M:
  Type: member-list
  Display:
    Material: PAPER
    Name: "&f<member>"
    Lore:
      - "&7身份: &e<member_role>"
      - "&7在线: &f<member_online>"
      - "&7所在服: &f<member_server>"

常用动态类型:

Type用途
member-list队伍成员
dungeon-list副本列表
room-list公开房间
application-list入队申请
invite-list邀请候选玩家
requirement-template-list入队条件模板
damage-list结算伤害列表

动态列表的每个元素都有自己的上下文变量,例如 <member><dungeon_id><team><applicant>

点击动作

yaml
Actions:
  - "open:team"
Right-Click-Actions:
  - "team:toggle-random-distribution on"
Shift-Left-Click-Actions:
  - "team:req clear"

支持:

text
Actions
Click-Actions
Left-Click-Actions
Right-Click-Actions
Shift-Left-Click-Actions
Shift-Right-Click-Actions

不写具体点击类型时,默认点击走 Actions

内置动作

动作说明
open:<界面>打开界面
start:开始副本
team:<操作>队伍操作
room:<操作>房间操作
dungeon:<操作>副本操作
auction:<操作>竞拍操作
stamina:show显示体力
hud:sync同步 HUD
client-ui:refresh <界面>刷新客户端 UI
gtmd:<动作>调用 GTMobDrops 兼容动作
[message] 文本给玩家发消息
[console] 命令控制台执行命令
[player] 命令玩家执行命令
[close]关闭界面

示例:

yaml
Actions:
  - "team:create"
  - "[message] &a已尝试创建队伍。"

队伍动作

text
team:create
team:invite <玩家>
team:invite
team:accept
team:leave
team:toggle-public
team:toggle-apply
team:toggle-pvp
team:toggle-random-distribution
team:input-name
team:input-desc
team:applications
team:accept-application <玩家>
team:reject-application <玩家>
team:req input <模板>
team:req remove <模板>
team:req clear

input-nameinput-descreq input 在原版 GUI 下会读取聊天栏输入。客户端 UI 可以把输入框的值作为 input_value 发给插件。

副本动作

text
dungeon:open <副本ID>
dungeon:select <provider> <副本ID>
dungeon:select-opened
dungeon:start
dungeon:finish
dungeon:fail

大型服入口按钮推荐:

yaml
Actions:
  - "dungeon:open forest"

详情页确认按钮:

yaml
Actions:
  - "dungeon:select-opened"

房间动作

text
room:detail <队伍ID>
room:join <队伍ID>
room:join-viewed
room:quick

公开房间列表建议左键看详情,右键申请:

yaml
Left-Click-Actions:
  - "room:detail <team>"
Right-Click-Actions:
  - "room:join <team>"

竞拍动作

text
auction:info
auction:bid <金额>
auction:input-bid

客户端 UI 输入框提交时,可以把输入内容传成 input_value。原版 GUI 没有真正输入框,就走聊天输入。

资源图标 assets

GUI 里写:

yaml
Display:
  Asset: loot
  Material: HOPPER

资源文件:

text
plugins/GTDungeonTeam/assets/
  base.yml
  itemsadder.yml
  craftengine.yml
  oraxen.yml
  vanilla.yml

建议 GUI 里优先写稳定的 Asset,不同材质包在 assets/ 分开配置。这样以后从 ItemsAdder 换 Oraxen,不需要把所有 GUI 文件翻一遍。

PaiUI 文件

text
plugins/GTDungeonTeam/client-ui/paiui/webgui/gtdungeonteam/
  main.html
  ui.css
  ui.js

默认配置会把 WebGui 文件同步到 PaiUI 可访问目录:

yaml
providers:
  paiui:
    mirror-webgui: true
    mirror-overwrite-newer-source: true

改完后执行:

text
/gdt reload

如果你手动改 PaiUI 目标目录里的文件,而源目录没改,下一次重载可能被同步覆盖。正式修改建议改 GTDungeonTeam 自己的 client-ui/paiui/webgui/ 源文件。

AX、DragonCore、KongCore

文件位置:

text
client-ui/ax/
client-ui/dragoncore/
client-ui/kongcore/

每个页面一个 yml:

text
main.yml
team.yml
invite.yml
applications.yml
requirements.yml
auction.yml
dungeons.yml
dungeon-detail.yml
rooms.yml
room-detail.yml
result.yml

这些文件的具体组件写法按对应 UI 引擎自己的规则来。GTDungeonTeam 负责打开、同步变量、接收动作。

重载注意

text
/gdt reload

会重新读取 client-uigui。如果客户端仍看到旧页面:

  1. 确认改的是 plugins/GTDungeonTeam/client-ui/
  2. 执行 /gdt reload
  3. 关闭并重新打开界面。
  4. PaiUI 场景下检查是否同步到了 PaiUI 的 WebGui 目录。
  5. AX、DragonCore、KongCore 场景下检查对应客户端资源是否刷新。