Wards

保护结界。一个为 Minecraft 服务器提供的综合 MOBA 风格的结界系统,提供区域保护、入侵警报和成员管理。

资源图片
# MachinaWards 一个针对 Minecraft 服务器的综合 MOBA 风格守卫系统,提供区域保护、入侵警报和成员管理。 ## 特性 ### 🛡️ **保护系统** - **区域保护**: 创建具有可配置半径的保护区域 - **多层级**: 不同类型的守卫,具有不同的保护级别 - **访问控制**: 添加成员以共享守卫访问权限 - **可配置规则**: 切换方块放置、破坏、互动、爆炸和火灾的保护 ### 🚨 **警报系统** - **入侵检测**: 当未经授权的玩家进入你的守卫时收到通知 - **多种警报类型**: 标题、行动条和聊天通知 - **冷却系统**: 使用可配置的冷却时间防止垃圾警报 - **成员警报**: 与守卫成员共享通知 ### 🏪 **经济系统集成** - **Vault 支持**: 使用服务器经济购买守卫 - **商店 GUI**: 浏览和购买不同的守卫层级 - **自定义配方**: 使用可配置的材料制作守卫 ### 🎮 **用户界面** - **守卫管理**: 右键点击守卫方块以管理设置 - **成员管理**: 通过 GUI 添加/移除成员 - **活动历史**: 查看最近的入侵日志 - **警报切换**: 启用/禁用每个守卫的通知 ## 安装 ### 前置条件 - **Minecraft 服务器**: Spigot/Paper 1.21+ - **Java**: 版本 19 或更高 - **Vault**: 用于经济功能(可选但推荐) ### 安装步骤 1. **下载**: 从发布渠道获取最新 JAR 文件 2. **安装**: 将 `MachinaWards.jar` 放置在你的 `plugins/` 文件夹中 3. **启动服务器**: 启动或重启你的服务器 4. **配置**: 编辑 `plugins/MachinaWards/config.yml` 5. **权限**: 设置权限组 ## 配置 ### 基本设置 ```yaml # 全局设置 region: shape: square # square 或 column worlds: [] # 空表示允许所有世界 height: min_y: -64 max_y: 319 alerts: enabled: true cooldown_ms: 10000 title_format: "&cIntruder!" actionbar_format: "&7%name% entered your ward" protection: block_place: true block_break: true interact: true explosion: true fire: true ``` ### 守卫层级 ```yaml wards: basic: display_name: "&aBasic Ward" result_material: BEACON price: 1000.0 radius: 8 notify: true custom_recipe: - ["SEA_LANTERN", "ENDER_EYE", "SEA_LANTERN"] - ["OBSIDIAN", "BEACON", "OBSIDIAN"] - ["IRON_INGOT", "IRON_INGOT", "IRON_INGOT"] advanced: display_name: "&bAdvanced Ward" result_material: CONDUIT price: 5000.0 radius: 16 notify: true custom_recipe: - ["DIAMOND", "NETHER_STAR", "DIAMOND"] - ["OBSIDIAN", "CONDUIT", "OBSIDIAN"] - ["GOLD_INGOT", "GOLD_INGOT", "GOLD_INGOT"] ``` ## 指令 | 指令 | 描述 | 权限 | |---------|-------------|------------| | `/ward help` | 显示帮助信息 | `wards.player.*` | | `/ward shop` | 打开守卫商店 | `wards.player.*` | | `/ward list` | 列出你的守卫 | `wards.player.*` | | `/ward addmember ` | 将成员添加到守卫 | `wards.player.*` | | `/ward removemember ` | 从守卫移除成员 | `wards.player.*` | | `/ward reload` | 重新加载配置 | `wards.admin` | ## 权限 ### 玩家权限 - `wards.player.1` - 允许 1 个守卫 - `wards.player.3` - 允许 3 个守卫 - `wards.player.5` - 允许 5 个守卫 - `wards.player.10` - 允许 10 个守卫 ### 管理员权限 - `wards.admin` - 完整的管理权限 - 绕过所有守卫保护 - 移除任何守卫 - 重新加载配置 - 访问管理员指令 ## 使用指南 ### 创建守卫 1. **购买**: 使用 `/ward shop` 或使用配方制作 2. **放置**: 右键点击以放置守卫方块 3. **配置**: 右键点击放置的守卫以管理设置 ### 管理守卫 - **切换警报**: 启用/禁用入侵通知 - **添加成员**: 授予可信任玩家访问权限 - **查看历史**: 检查最近的入侵日志 - **移除守卫**: 破坏守卫方块(所有者/管理员专用) ### 保护功能 - **自动**: 放置后立即激活保护 - **智能检测**: 仅影响未经授权的玩家 - **成员访问**: 成员可以绕过所有保护 - **管理员覆盖**: 管理员可以使用权限绕过 ## 经济系统集成 ### Vault 设置 1. 安装 Vault 插件 2. 安装一个经济插件(例如,EssentialsX,iConomy) 3. 配置经济设置 4. 在 config 中设置守卫价格 ### 商店功能 - **层级卡**: 浏览可用的守卫类型 - **价格显示**: 购买前查看价格 - **即时交付**: 立即收到物品 - **余额检查**: 自动验证余额 ## 性能功能 ### 优化 - **世界索引**: 通过世界快速查找守卫 - **方形数学**: 高效的区域计算 - **内存缓存**: 内存中守卫存储 - **延迟加载**: 仅在需要时访问数据库 ### 数据库 - **SQLite 存储**: 轻量级、基于文件的数据库 - **自动设置**: 首次运行时创建表 - **数据持久性**: 服务器重启时守卫仍然存在 - **日志记录系统**: 跟踪所有入侵事件 ## 开发人员 API ### 主要类 - `MachinaWards` - 主插件类 - `WardManager` - 核心守卫管理服务 - `Ward` - 守卫数据模型 - `SqliteStore` - 数据库持久化层 ### 关键方法 ```java // 获取守卫管理器 WardManager manager = MachinaWards.get().manager(); // 创建守卫 Ward ward = new Ward(id, owner, world, x, y, z, radius, tier, notify, timestamp); manager.add(ward); // 检查保护 Ward ward = manager.findAt(location); if (ward != null && !ward.hasAccess(player.getUniqueId())) { // 处理保护 } // 获取层级信息 RecipeLoader.WardTier tier = manager.getTier("basic"); ``` ### 事件 - `WardPlaceEvent` - 当守卫被放置时 - `WardBreakEvent` - 当守卫被破坏时 - `WardEntryEvent` - 当玩家进入守卫时 - `WardProtectionEvent` - 当触发保护时 ## 故障排除 ### 常见问题 **守卫无效** - 检查权限是否设置正确 - 验证 Vault 是否已安装(用于商店功能) - 检查控制台中的错误消息 **数据库错误** - 确保插件文件夹具有写入权限 - 检查 SQLite 是否包含在 JAR 中 - 验证 Java 版本兼容性 **性能问题** - 减少守卫半径值 - 限制每个玩家的守卫数量 - 调整警报冷却设置 ### 调试模式 在 `config.yml` 中启用调试日志记录: ```yaml debug: true ``` ## 支持 ### 获取帮助 - **问题**: 在 GitHub 上报告错误 - **问题**: 在讨论中提问 - **功能请求**: 通过问题提交 ### 贡献 1. 分叉仓库 2. 创建功能分支 3. 进行修改 4. 提交拉取请求 ## 许可证 本项目使用 MIT 许可证授权 - 详情请参阅 LICENSE 文件。 ## 鸣谢 - **作者**: Machina - **Minecraft 版本**: 1.21+ - **API**: Spigot/Paper - **依赖**: Vault, SQLite --- **祝你守卫愉快!** 🛡️✨