# 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
---
**祝你守卫愉快!** 🛡️✨