# We-Friends
[](https://opensource.org/licenses/MIT)
[](https://www.oracle.com/java/)
[](https://papermc.io/)
[](https://github.com/PaperMC/Folia)
一个为 Minecraft 服务器提供全面的朋友和派对管理系统的插件,支持跨服务器,适用于 Paper/Spigot 和 Folia。
## ✨ 特性
### 🤝 朋友系统
- **好友请求**: 发送、接受和拒绝好友请求
- **好友列表**: 查看在线/离线好友以及状态指示器
- **好友聊天**: 私人消息和好友群组聊天
- **加入/退出通知**: 在好友加入或离开时收到通知
- **请求切换**: 启用/禁用接收好友请求
- **跨服务器支持**: 好友可以在多个服务器之间互动
### 🎉 派对系统
- **派对创建**: 创建和管理派对以及好友
- **派对邀请**: 邀请好友加入你的派对
- **派对聊天**: 专用的派对聊天频道
- **派对角色**: 领导者和成员角色以及权限
- **派对管理**: 踢出、晋升、转移领导权和解散
- **跨服务器派对**: 派对成员可以在不同的服务器上
### 🌐 跨服务器支持
- **多服务器网络**: 使用 Redis 连接多个服务器
- **实时同步**: 服务器之间的即时通知
- **服务器标识**: 查看好友/派对成员所在的服务器
- **无缝体验**: 在整个网络上聊天和互动
### 🔧 高级特性
- **数据库支持**: SQLite 和 MySQL 支持
- **Redis 集成**: 用于跨服务器通信
- **PlaceholderAPI**: 为其他插件提供自定义占位符
- **Folia 支持**: 完全兼容 Folia 服务器
- **聊天监听**: 工作人员可以监控好友/派对聊天
- **聊天模式**: 在普通、好友和派对聊天模式之间切换
## 📋 要求
- **Java**: 17 或更高版本
- **服务器软件**: Paper 1.21.1+ 或 Folia
- **数据库**: SQLite(包含)或 MySQL
- **Redis**: 需要跨服务器功能(可选)
## 🚀 安装
1. **下载** 最新版本从 [Releases](https://github.com/WeThink25/We-Friends/releases)
2. **放置** JAR 文件在服务器的 `plugins` 文件夹中
3. **启动** 你的服务器以生成配置文件
4. **配置** 插件(参见配置部分)
5. **重启** 你的服务器
## ⚙️ 配置
### 基本设置(单服务器)
```yaml
# config.yml
database:
type: sqlite # 使用 SQLite 用于单服务器
server:
name: lobby # 你的服务器名称
cross-server:
enabled: false # 对于单服务器禁用
redis:
enabled: false # 单服务器不需要
```
### 多服务器设置
```yaml
# config.yml
database:
type: mysql # 多服务器需要
mysql:
host: localhost
port: 3306
database: wefriends
username: root
password: "your_password"
server:
name: lobby # 每个服务器的唯一名称
cross-server:
enabled: true # 启用跨服务器功能
sync-interval: 30
notification-timeout: 5
redis:
enabled: true # 跨服务器需要
host: localhost
port: 6379
password: ""
channel: wefriends:events
limits:
max-friends: 200
max-party-size: 8
```
### 数据库设置 (MySQL)
```sql
CREATE DATABASE wefriends;
CREATE USER 'wefriends'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON wefriends.* TO 'wefriends'@'%';
FLUSH PRIVILEGES;
```
## 🎮 命令
### 朋友命令
- `/friend add <玩家>` - 发送好友请求
- `/friend accept <玩家>` - 接受好友请求
- `/friend deny <玩家>` - 拒绝好友请求
- `/friend remove <玩家>` - 删除好友
- `/friend list` - 查看你的好友列表
- `/friend requests` - 查看挂起的请求
- `/friend toggle` - 切换好友请求的开关
- `/fchat <消息>` - 向所有好友发送消息
- `/fmsg <好友> <消息>` - 向好友发送私人消息
### 派对命令
- `/party create` - 创建一个新的派对
- `/party invite <玩家>` - 邀请好友加入你的派对
- `/party accept <玩家>` - 接受派对邀请
- `/party deny <玩家>` - 拒绝派对邀请
- `/party leave` - 离开你当前的派对
- `/party kick <玩家>` - 从派对中踢出成员(仅限领导者)
- `/party promote <玩家>` - 晋升成员为领导者(仅限领导者)
- `/party transfer <玩家>` - 转移领导权(仅限领导者)
- `/party disband` - 解散派对(仅限领导者)
- `/pc <消息>` - 向派对成员发送消息
### 聊天模式命令
- `/fchatmode` - 切换好友聊天模式
- `/pchatmode` - 切换派对聊天模式
- `/chatmode` - 查看当前聊天模式
### 管理员命令
- `/fchatspy` - 切换好友聊天监听(需要权限)
- `/partyspy` - 切换派对聊天监听(需要权限)
- `/wefriends reload` - 重新加载插件配置
## 🔑 权限
### 玩家权限
- `wefriends.friend.use` - 使用朋友命令
- `wefriends.party.use` - 使用派对命令
- `wefriends.chat.friend` - 使用好友聊天
- `wefriends.chat.party` - 使用派对聊天
### 管理员权限
- `wefriends.admin` - 访问管理员命令
- `wefriends.spy.friend` - 监控好友聊天
- `wefriends.spy.party` - 监控派对聊天
- `wefriends.reload` - 重新加载插件配置
## 📊 PlaceholderAPI
该插件提供占位符,用于与 PlaceholderAPI 一起使用:
- `%wefriends_friends_online%` - 在线好友数量
- `%wefriends_friends_total%` - 总好友数量
- `%wefriends_party_size%` - 当前派对大小
- `%wefriends_party_leader%` - 派对领导者姓名
- `%wefriends_in_party%` - 玩家是否在派对中(true/false)
## 🔧 API 使用
### Maven 依赖项
```xml
me.wethink
wefriends
1.0.0
provided
```
### 基本 API 示例
```java
// 获取插件实例
WeFriends plugin = WeFriends.getInstance();
// 检查两个玩家是否是朋友
boolean areFriends = plugin.getFriendManager().areFriends(player1UUID, player2UUID);
// 获取玩家的好友
Set friends = plugin.getFriendManager().getFriendUuidsPublic(playerUUID);
// 获取派对信息
String partyId = plugin.getPartyManager().getPartyIdPublic(playerUUID);
List partyMembers = plugin.getPartyManager().getPartyMembers(partyId);
```
## 🌐 跨服务器设置指南
### 第一步:数据库配置
设置可供所有服务器访问的共享 MySQL 数据库:
```yaml
database:
type: mysql
mysql:
host: your-database-host
port: 3306
database: wefriends_network
username: wefriends_user
password: secure_password
```
### 第二步:Redis 配置
配置 Redis 以实现实时通信:
```yaml
redis:
enabled: true
host: your-redis-host
port: 6379
password: redis_password
channel: wefriends:network
```
### 第三步:服务器标识
为每个服务器指定一个唯一的名称:
```yaml
server:
name: lobby # 对于大堂服务器
name: survival # 对于生存服务器
name: creative # 对于创造服务器
```
### 第四步:启用跨服务器功能
```yaml
cross-server:
enabled: true
sync-interval: 30
notification-timeout: 5
```
## 🐛 故障排除
### 常见问题
**数据库连接失败**
- 验证 MySQL 凭据和主机可访问性
- 检查防火墙设置
- 确保数据库存在并且用户具有适当的权限
**Redis 连接失败**
- 验证 Redis 服务器是否正在运行
- 检查 Redis 主机和端口配置
- 验证如果启用了身份验证,Redis 密码是否正确
**跨服务器无法工作**
- 确保所有服务器都使用相同的 MySQL 数据库
- 验证 Redis 配置在所有服务器上是否相同
- 检查服务器名称是否唯一
- 确认 `cross-server.enabled` 为 true
**插件无法加载**
- 验证是否安装了 Java 17+
- 检查服务器软件兼容性 (Paper 1.21.1+)
- 查看服务器日志以获取错误消息
## 🤝 贡献
我们欢迎贡献!请遵循以下步骤:
1. **Fork** 存储库
2. **创建** 一个功能分支 (`git checkout -b feature/amazing-feature`)
3. **提交** 您的更改 (`git commit -m 'Add amazing feature'`)
4. **推送到** 分支 (`git push origin feature/amazing-feature`)
5. **打开** 一个拉取请求
### 开发设置
1. 克隆存储库
2. 导入到您的 IDE (IntelliJ IDEA 推荐)
3. 运行 `mvn clean install` 以构建
4. 在 Paper 1.21.1+ 服务器上进行测试
## 📝 许可
本项目使用 MIT 许可协议进行许可 - 请参阅 [LICENSE](LICENSE) 文件以了解详情。
## 🙏 鸣谢
- **Paper 团队** - 为优秀的服务器软件
- **Folia 团队** - 为多线程服务器支持
- **PlaceholderAPI** - 用于占位符集成
- **HikariCP** - 用于数据库连接池
- **Jedis** - 用于 Redis 连接性
## 📞 支持
- **问题**: [GitHub Issues](https://github.com/WeThink25/We-Friends/issues)
- **讨论**: [GitHub Discussions](https://github.com/WeThink25/We-Friends/discussions)
---
❤️ 由 [WeThink](https://github.com/WeThink25) 制作