用途
Pelican Panel Plugins 是一个面向 Pelican 游戏面板的插件开发技能,用于编写、搭建、解释和调试 Pelican 插件。Pelican 是基于 Laravel + FilamentPHP 构建的开源游戏服务器管理面板,插件机制允许在不触碰核心文件的情况下添加功能。需要注意,插件系统仍处于积极开发阶段,部分功能可能发生变化。
主要能力
该技能覆盖插件开发的完整流程:
- 脚手架:在面板目录(默认 /var/www/pelican)内运行
php artisan p:plugin:make生成基础结构,包括 plugin.json、主插件类、服务提供者和配置文件。插件文件夹名必须与 plugin.json 中的 id 字段完全一致。 - 插件结构:包含 plugin.json、config、database/migrations、lang、resources/views、routes 和 src 等目录;标准 Laravel 位置中的迁移、服务提供者、命令、策略会被自动发现。
- plugin.json 配置:定义 id、name、author、version、description、category(plugin、theme 或 language)、namespace、class、panels、panel_version、composer_packages 等字段。
- 主插件类:实现 Filament 的 Plugin 接口,在 register() 中按面板 ID 自动发现 Pages、Resources、Widgets,在 boot() 中执行启动逻辑。
- 三个 Filament 面板:admin(管理区,完整 CRUD)、app(服务器列表,默认无导航)、server(服务器管理,租户作用域)。
- 扩展核心资源:通过服务提供者 register() 调用核心类的静态方法,注册关系管理器、权限和模型图标;可使用 CanModifyResource、CanCustomizePage、CanModifyForm/CanModifyTable 等定制 trait。
- 插件设置:实现 HasPluginSettings 接口,提供设置表单与保存逻辑,环境变量需以插件 ID 为前缀。
- 权限:通过 Role::registerCustomDefaultPermissions、Role::registerCustomPermissions、Role::registerCustomModelIcon 注册管理员权限;通过 Subuser::registerCustomPermissions 注册子用户权限。
- 路由:创建 RouteServiceProvider,可定义简单路由、从文件加载路由,或追加到客户端 API。
- 模型与关系:使用 Server::resolveRelationUsing 为核心模型添加关系。
- 策略:使用 DefaultAdminPolicies trait 并指定 modelName,自动检查管理员角色权限。
- 翻译与视图:翻译放在 lang/{locale}/,使用 my-plugin::strings.key 命名空间;视图放在 resources/views/,使用 my-plugin::view-name 引用。
使用方式
在面板目录内运行脚手架命令生成插件骨架,然后按需编辑 plugin.json、主插件类、服务提供者、Filament 组件、路由、模型、策略、翻译和视图。发布时,打开 plugin.json 移除 meta 块(仅供内部使用),将整个插件文件夹打包为 zip,用户可通过面板 UI 的 Import 按钮安装,或手动放入 plugins/ 目录。也可发布到社区:GitHub 的 pelican-dev/plugins 仓库,或 Discord 的 #plugins 频道。
适用场景
适用于需要为 Pelican 面板添加自定义功能、扩展核心资源、注册权限、添加路由或 API、定义模型关系、编写管理界面组件的开发者。
限制与注意事项
插件系统仍在积极开发中,部分功能可能变化。plugin.json 中的 namespace 需使用双反斜杠。迁移文件建议使用数字前缀(001_、002_)控制执行顺序。环境变量始终以插件 ID 为前缀以避免冲突。在 server 面板中可用 Filament::getTenant() 获取当前服务器。关系管理器必须在服务提供者的 register() 方法中通过 registerCustomRelations() 注册。权限应在 register() 而非 boot() 中注册。测试时可用 php artisan migrate:fresh --seed 重置并测试迁移。
获取帮助
文档:pelican.dev/docs/panel;Discord:discord.gg/pelican-panel;GitHub:github.com/pelican-dev/panel;示例插件:github.com/pelican-dev/plugins。