HomePlugin

一个轻量级且高效的插件,用于管理玩家家园和世界生成点,具有可选的缓存和强大的同步工具。

资源图片
# 🏡 HomePlugin (by fuzeblocks) > 🧩 一款轻量级、灵活的家庭/重生/传送/随机传送管理插件,具有可选缓存、多后端存储、语言系统和模块化扩展支持。
Home Icon
稳定 • 快速 • 模块化 • API驱动
--- ## 📚 目录 - [✨ 功能](#-功能) - [🧾 命令](#-命令) - [🔐 权限](#-权限) - [🧩 PlaceholderAPI 集成](#-placeholderapi-集成) - [🌍 语言](#-语言) - [⚙️ 配置](#️-配置) - [🧱 架构与性能](#-架构--性能) - [🧑‍💻 开发者/扩展 API](#-开发者--extension-api) - [✅ 兼容性](#-兼容性) - [🗺️ 路线图](#-路线图) - [🤝 支持与贡献](#-支持--贡献) --- ## ✨ 功能 | 分类 | 亮点 | |---------------------|-----------| | 家庭与重生 | 命名家庭, GUI / 列表访问, 全局重生设置/移除 | | 传送系统 | 带超时时间的传送请求, 带冷却时间和半径的随机传送 | | 存储 | YAML (默认) 或 MySQL (异步注册路径) | | 缓存 | 可选 Redis 层 (Jedis) 如果在配置中启用 | | 限制 | 通过权限 `homeplugin.limit.` 动态设置每玩家家庭限制 | | 验证 | 阻止不公平的放置 / 禁用世界的限制 | | 本地化 | 内置语言系统 (法语、英语、西班牙语) + 外部文件 | | PlaceholderAPI | 用于家庭、计数、位置的丰富占位符 | | 管理员工具 | 管理其他玩家的家庭、重生、缓存、语言文件 | | 模块化加载器 | 内部插件加载器,用于注册额外的 HomePlugin 模块 | | 任务 / 预热 | 可配置的传送预热,带有标题/消息/粒子 | --- ## 🧾 命令 | 命令 | 描述 | 备注 | |---------|-------------|-------| | `/sethome [name] [info]` | 在你的当前位置设置(或覆盖)一个家庭。 | `info` 可选元数据 (如果使用) | | `/home [name]` | 传送到一个家庭;如果没有名称,则打开 GUI。 | GUI 行为取决于实现 | | `/home` | 打开家庭 GUI (如果已启用)。 | | | `/delhome [name]` | 删除一个命名的家庭。 | | | `/listhome` | 在聊天中列出你所有的家庭。 | GUI 的文本替代方案 | | `/spawn` | 传送到全局重生点。 | 需要设置重生点 | | `/setspawn` | 将全局重生点设置为当前位置。 | 管理员 | | `/delspawn` | 移除当前的全局重生点。 | 管理员 | | `/tpa ` | 向玩家发送传送请求。 | 超时 (`Tpa-duration`) | | `/tpaccept [player]` | 接受挂起的 TPA 请求。 | 玩家可选 | | `/tpdeny [player]` | 拒绝挂起的 TPA 请求。 | 玩家可选 | | `/rtp` | 在配置的半径内随机传送。 | 应用冷却时间 | | `/homeadmin ` | 查看/管理其他玩家的家庭。 | 管理员 | | `/cache view` | 查看缓存状态 (如果提供)。 | 管理员 | | `/cache clearall` | 清除所有插件缓存。 | 管理员 | | `/cache player ` | 清除特定玩家的缓存。 | 管理员 | | `/plugins` | 列出加载的 HomePlugin 内部模块。 | 管理员 (不是 Bukkit `/plugins`) | | `/lang update` | 更新基本语言文件。 | 管理员 | | `/lang merge` | 将新键合并到语言中。 | 管理员 | | `/lang set ` | 切换活动语言 (例如 `FRENCH`)。 | 管理员 | --- ## 🔐 权限 (来自 `plugin.yml` 的确切节点,以及观察到的模式。) | 权限 | 目的 | 默认 | |------------|---------|---------| | `homeplugin.command.home` | 使用 `/home` (传送 / GUI) | true | | `homeplugin.command.sethome` | 使用 `/sethome` | true | | `homeplugin.command.delhome` | 使用 `/delhome` | true | | `homeplugin.command.listhome` | 使用 `/listhome` | true | | `homeplugin.command.spawn` | 使用 `/spawn` | true | | `homeplugin.command.tpa` | 发送/接受/拒绝 TPA 请求 | true | | `homeplugin.admin` | 管理员设置/删除重生点、缓存、查看其他玩家的家庭 | op | | `homeplugin.lang.update` | 更新语言文件 | op | | `homeplugin.limit.` | 覆盖最大家庭数量 (动态扫描 1..100) | (基于权限) | 附加 (隐式/建议): | 节点 | 目的 | |------|---------| | `homeplugin.bypass.limit` | 如果实现: 忽略基本限制 (否则依赖 limit.) | | `homeplugin.bypass.validation` | 忽略不公平位置限制 | | `homeplugin.bypass.cooldown` | 忽略 RTP / 传送冷却时间 (如果实现) | 动态限制: 代码循环 `homeplugin.limit.1` 到 `homeplugin.limit.100`,应用你拥有的最高权限。 --- ## 🧩 PlaceholderAPI 集成 在 `HomePluginExpansion` 中实现: | 占位符 | 描述 | |-------------|-------------| | `%homeplugin_homes%` | 逗号分隔的家庭名称或回退 (没有家庭) | | `%homeplugin_homes_numbers%` | 家庭数量 | | `%homeplugin_has_homes%` | 如果玩家有 ≥ 1 个家庭,则为 `true` | | `%homeplugin_home_location_%` | 格式化的位置(使用语言格式) | | `%homeplugin_home_exists_%` | `true` / `false` | | `%homeplugin_home_world_%` | 世界名称 | | `%homeplugin_home_coordinates_%` | 原生坐标 `X Y Z` | > `` 不区分大小写,传出。 --- ## 🌍 语言 通过配置:`Config.Language` 可用(内置): - 法语 - 英语 - 西班牙语 语言加载使用枚举 (`Language.valueOf(...)`) 并在无效时回退到法语。 定制化通过发送的语言 YML 文件(和更新/合并命令)提供。 --- ## ⚙️ 配置 (来自 `src/main/resources/config.yml` 的确切结构): ```yaml Config: Language: FRENCH Connector: TYPE: "YAML" # MYSQL or YAML # Optional (for MYSQL) HOST: "localhost" PORT: 3306 USERNAME: "root" PASSWORD: "" DATABASE: "HomePlugin" Redis: UseRedis: false # Optional if enabled HOST: "localhost" PORT: 6379 SSL: false PASSWORD: "" Home: DefaultHomeLimit: 3 PreventUnfairLocation: true DisabledWorlds: - "world_nether" - "world_the_end" Task: Task-duration: 3 # second UseTitle: true UseMessage: false Add-particles-after-teleport: true Tpa: Tpa-duration: 30 # seconds Rtp: cooldown-seconds: 1000 # seconds max-radius: 200 ``` 关键行为 (来自代码): - `Config.Home.DefaultHomeLimit` 用于基本家庭计数 (参见 `HomePermissionManager`)。 - TPA 超时:`Config.Tpa.Tpa-duration` (缺失时默认为 30)。 - 只有当 `UseRedis: true` 时才会初始化 Redis;否则跳过。 - 验证使用 `PreventUnfairLocation` 和 `DisabledWorlds`。 - 传送预热 (`Task-duration`) 驱动延迟执行 (标题/消息/粒子可选)。 --- ## 🧱 架构与性能 - 静态访问模式(经理存储在主类中,初始化后) - Redis (JedisPooled) 条件设置缓存;如果未连接则回退路径。 - 如果 `Config.Connector.TYPE == MYSQL` 则调用 MySQL 注册路径。 - 动态插件扩展系统:`PluginLoader` / `PluginManager` 支持加载内部模块化的 HomePlugin 组件。 - PlaceholderAPI 软依赖项:仅在存在时注册扩展;插件会启动,但会发出警告。 - 动态基于权限的家庭限制分辨率 (`homeplugin.limit.` 递增扫描)。 - 基于配置的语言键选择语言管理器于启动时。 - 验证 & 公平性约束限制禁用世界/不公平放置. - RTP + 预热计时器使用 Bukkit 调度器 (异步延迟用于 TPA 等到期任务)。 --- ## 🧑‍💻 开发者/扩展 API 虽然没有外部 Facade 类(如统一的 `HomePluginAPI`)出现在扫描的片段中,但扩展点确实存在: ### 插件加载器接口 ```java public interface HomePlugin { String getName(); String getVersion(); String getAuthor(); String[] getAuthors(); void initialize(); void stop(); boolean isSqlStorageEnabled(); boolean isPlaceholderApiHooked(); boolean isCacheEnabled(); } public interface PluginLoader { void loadPlugin(HomePlugin homePlugin); List getHomePlugin(); void unregisterPlugin(HomePlugin homePlugin); } ``` `PluginManager.getInstance()` 维护加载的 HomePlugin 模块的内部列表。 ### 示例(注册内部模块) ```java PluginManager pm = PluginManager.getInstance(); pm.loadPlugin(new MyExtensionPlugin()); // implements fr.fuzeblocks.homeplugin.plugin.HomePlugin ``` ### 示例(访问家庭限制) ```java int max = HomePermissionManager.getMaxHomes(player); boolean canSet = HomePermissionManager.canSetHome(player); ``` --- ## ✅ 兼容性 - 声明 `api-version: 1.14` (plugin.yml) - 设计用于现代 Paper/Spigot 衍生品(较新版本通常保持 1.14 API 兼容性) - 软依赖项:PlaceholderAPI (用于占位符;没有它插件仍然可以加载,并发出警告) - 存储:YAML (默认) 或 MySQL (启用时) --- ## 🗺️ 路线图 | 特性 | 状态 | |-----------------------------------|------------| | 家庭经济成本 | 计划 | | 离线玩家家庭编辑 | 计划 | | 编辑现有家庭 | 计划 | | 添加公共家庭 | 计划 | 欢迎通过问题或 Discord 提出建议。 --- ## 🤝 支持与贡献 - 问题:使用 GitHub Issues 对于错误/功能请求 - Discord: [加入](https://discord.gg/5zJyKz6Nfm) - 拉取请求:遵循清晰的提交消息;提前讨论大型更改 ### 贡献流程 1. 分叉 2. 创建功能分支 3. 提交更改 4. 打开 PR 参考任何相关问题 --- > 🛠️ HomePlugin — 用于现代服务器的稳定、快速和可扩展的家庭/重生管理。