• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】
资源图标

原创 开源 工具 [Skript拓展] xiaojie-GUI - 为 Skript 带来现代化的发包 GUI 1.0.0

请登录后获取
版权类型
原创
插件中文名称
小杰GUI
插件英文名称
xiaojie-gui
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
  3. PufferFish
  4. Leaves
语言支持
中文(简体)
前置组件
Skript 2.12+
PacketEvent
Skbee(可选) - 用于在标题使用文本组件
适配版本(Java)
  1. 1.21
  2. 1.20
[MD] # xiaojie-gui ## 这是一个什么插件 [xiaojie-gui](https://github.com/heyhey123-git/xiaojie-gui) 是一个使用 Kotlin 编写的 Skript 拓展(Addon), 设计目标是为 Skript 提供现代化、功能丰富的 GUI 语法拓展. 本插件参考了业界成熟发包菜单方案 Trmenu 的部分源码, 利用 PacketEvent 监听和发包, 在极端情况下仍可保持良好的性能和稳定性. 我们参考了部分 Skript-gui 语法, 同时保留了部分兼容性, 实现了静态(Bukkit API)和发包(Packet)两种菜单实现方式 ## 为什么要编写这个插件 总所周知, Skript 原生编写菜单需要将事件和物品布置分开写, 在较老的 Skript 版本上 GUI 还有可能存在深拷贝导致的不同步问题: ```skript on load: set {_gui} to chest inventory named "test" set {_guiForPlayer} to {_gui} set slot 1 of {_guiForPlayer} to dirt #> 在较老的 Skript 版本上会导致 {_gui} 会被操作 ``` 另外, 社区中一个常用的 Skript GUI 拓展 [Skript-GUI](https://github.com/APickledWalrus/skript-gui/releases) 的更新及功能性较为欠缺. 以上两种方式基于 Bukkit API , 在性能上一般会相较基于发包(Packet)的方案更差, 且某些时候可能会存在极端情况的刷物品问题. 最后, 本插件还解决了一些痛点, 如菜单里常见的操作也有快捷操作方法: - "使用物品填充目标区域" - "无需向菜单中填充真实物品即可回调" - "对于相似布局的翻页布局可直接翻页" 有云:“书不尽言,言不尽意”;故是言之难尽,而试之易知也。以下给出一个 demo ,以望读者能够对本拓展的设计风格有一个大致的了解: ```skript on load: #> ------------- #> 菜单 Shape #> ------------- add "#########" to {_shape::*} add "#AAAAAAA#" to {_shape::*} add "#AAAAAAA#" to {_shape::*} add "#AAAAAAA#" to {_shape::*} add "#AAAAAAA#" to {_shape::*} add "##<#x#>##" to {_shape::*} create phantom menu with (chest inventory) titled "<white>awa" with layout {_shape::*}: #> ------------------- #> 无需物品的回调执行 #> ------------------- when slot 5 in page 0 is clicked: send "不要再戳我啦!" to event-player #> ------ #> 翻页 #> ------ if {_page} > 1: map key "<" to icon paper named "&e上一页" for event-menu: turn to page {_page} - 1 for {_p} else if {_page} = 1: map key "<" to icon gray stained glass pane for event-menu if {_page} < {_maxpage}: map key ">" to icon paper named "&e下一页" for event-menu: turn to page {_page} + 1 for {_p} else: map key ">" to icon gray stained glass pane for event-menu #> ------------------- #> 使用物品填充目标区域 #> ------------------- map key "A" to items {-_allSkull::*} for event-menu: set {_teleporter} to "%{_player}%" set {_server} to server of vplayer {_teleporter} functionawa({_teleporter},{_server}) map key "x" to icon clock named "&e返回菜单" for event-menu: close menu for {_p} #> Create menu 时,若 Default Page (open menu 时如果不指定页面自动打开的页面)未设置,那么将自动插入 1 页,因此我们无须插入页面即可 open menu event-menu to {_p} ``` 若需寻求更多例子,请移步[语法介绍](https://github.com/heyhey123-git/xiaojie-gui/wiki/%E8%AF%AD%E6%B3%95%E4%BB%8B%E7%BB%8D);如果遇到与预期不相符的表现或新的功能需求, 可以提出 Issue. ## 用户如何使用本插件 ### 基础概念 默认本插件的用户对于 Skript 本身足够了解, 下面主要介绍本插件引入的一些基础概念: * Menu - 即菜单, 玩家可以交互, 也可以使用 `on menu open` 等语法监听(类似与 Bukkit GUI) * Layout - 即形状, 用字符描述菜单的形状, 通常来说是 1-6 组长度为 9 的字符串 * 形如 "xxxxxxxxx","xABCDEFGx","xxxxxxxxx" 就是形容了一个三行的箱子的形状 * Key - 即键, 其中 "x", "A" 是 Layout 的字符串中一个个单独的字母,可以被设置为不同的物品 * MenuSession - 即会话, 当玩家打开一个 Menu 之后, 会自行创建 Session * 其目的主要是针对不同玩家打开同一个 Menu 时, 事实上是不同的 Session * 使用 Session 可以方便我们为某玩家更新单独的标题, 以及从获得其中 Slot 的物品 * Icon - 即图标, 实际上就是 item. 如,map key to icon %item% 可以将一个 Key 转变为 GUI 中的物品 * Page - 即页面, 菜单中可以有多个页面 ### 安装方式 1. 构建项目或下载一个发布版的 jar 文件 2. 将 jar 文件复制到您服务器的 /plugins 文件夹中 3. 启动/重启服务器 ### 语法查询 目前在 wiki 中可以查询到,后面会推送给 Skripthub / Skunity 等 [wiki地址](https://github.com/heyhey123-git/xiaojie-gui/wiki/%E8%AF%AD%E6%B3%95%E4%BB%8B%E7%BB%8D) ### 特别注意 请勿使用 Plugman 等插件或 /reload 指令热重载 对于其它注意事项,请查看:[注意事项](https://github.com/heyhey123-git/xiaojie-gui/wiki/%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9) ## 对其他开发者说的 欢迎参与! 可以提出 issue 或提交拉取请求 (PR), API 可能会发生变化。要了解确切用法,请查阅 src/main/kotlin 中的源文件和 src/test/kotlin 中的单元测试. Copyright (c) 2025 heyhey123, All rights reserved. 本项目采用 AGPL-3.0 许可证。详情请见 LICENSE 文件 [/MD]
  • 喜欢
反馈: heyhey123
作者
Radiation_pi
价格
50.00金粒
下载
2
查看
432
首次发布
最后更新

评分

0.00 星 0 次评分

Radiation_pi 的其他资源

后退
顶部 底部