
朋友们
一个完整的好友系统插件,允许玩家在您的服务器上连接、管理好友请求并追踪在线/离线状态。
查看大图Friends 是一个完整的交友系统插件,能让你的服务器玩家互相交友。 发送好友请求、管理好友列表、屏蔽不想互动的玩家,并通过在线/离线好友追踪来保持联系。
命令:/friends 和 /friend (别名) 快速 UI 访问:/friends ui
权限:
friends - 允许玩家使用所有标准好友命令
friends.admin - 访问管理命令以管理好友
功能
好友系统
在服务器上建立并维护你的社交网络。
核心功能包括:
- 好友请求 - 发送、接受、拒绝或取消好友请求
- 好友列表 - 查看所有好友的在线/离线状态
- 请求管理 - 追踪待处理的传入和传出好友请求
- 自动清理 - 过期的请求会被自动移除(可配置)
- 请求冷却 - 通过可配置的冷却计时器防止刷屏
- 好友上限 - 每个玩家的可配置好友数量上限(默认:100)
隐私与控制
掌控你的社交体验:
- 屏蔽系统 - 屏蔽玩家以阻止好友请求和互动
- 隐私设置 - 切换是否接受好友请求
- 通知设置 - 启用/禁用好友相关的通知
- 屏蔽时自动删除好友 - 屏蔽会自动移除现有的好友关系
请求系统
智能的好友请求处理:
- 自动接受 - 如果两个玩家互相发送了请求,系统会自动建立好友关系
- 过期 - 请求在可配置的天数后过期(默认:7 天)
- 冷却保护 - 速率限制防止请求刷屏(默认:5 分钟)
- 互相检测 - 系统能智能检测并处理互发请求的情况
游戏内管理
命令系统
使用 /friends 后接子命令:
好友管理:
/friends add <玩家>- 发送好友请求/friends accept <玩家>- 接受传入的请求/friends deny <玩家>- 拒绝传入的请求/friends cancel <玩家>- 取消你发出的请求/friends unfriend <玩家>- 删除一位好友
信息:
/friends list- 查看你的好友(在线和离线)/friends requests- 查看待处理的好友请求/friends settings- 查看和管理你的设置
隐私:
/friends block <玩家>- 屏蔽一个玩家/friends unblock <玩家>- 取消屏蔽一个玩家
设置:
/friends settings notifications- 切换好友通知/friends settings requests- 切换是否接受好友请求
UI 访问:
/friends ui- 打开好友管理 UI
管理员命令
使用 /friends admin 进行服务器管理:
/friends admin lookup <玩家>- 查看玩家详细信息/friends admin forcefriend <玩家1> <玩家2>- 强制建立好友关系/friends admin forceunfriend <玩家1> <玩家2>- 强制解除好友关系/friends admin clearrequests <玩家>- 清除所有待处理的请求/friends admin reload- 重载配置
用户界面
Friends UI 提供了一个可视化界面来管理你的社交关系:
- 查看带有在线/离线指示器的好友列表
- 查看成为好友的时间戳
- 管理传入和传出的请求
- 快速接受/拒绝按钮
- 访问设置和隐私控制
使用 /friends ui 打开。
数据库支持
Friends 同时支持 SQLite 和 MySQL 数据库:
SQLite (默认):
- 无需额外设置
- 数据存储在
mods/FriendsData/friends.db - 适合小型服务器
MySQL:
- 在
config.json中配置 - 支持连接池
- 适合大型服务器或跨服务器设置
配置
config.json 文件允许你自定义:
{
"database": {
"type": "sqlite",
"mysql": {
"host": "localhost",
"port": 3306,
"database": "friends",
"username": "root",
"password": ""
}
},
"maxFriends": 100,
"requestExpiryDays": 7,
"requestCooldownMinutes": 5,
"cleanupIntervalMinutes": 60,
"connectionPoolSize": 10
}
在线追踪
Friends 会自动追踪在线/离线状态:
- 实时在线好友数量
- 好友列表中的在线/离线指示器
- 好友加入/离开通知(如果启用)
- 最后上线时间戳
Discord / 支持
如果你想加入社区、建议功能、报告错误或需要帮助,请加入 Discord 社区! https://discord.gg/Snqz9E58Dr
支持 Friends
想支持 Friends?你可以通过 Ko-fi 捐赠,或者将 Friends 分享给你的服务器社区!
开发者 API
Friends 包含一个全面的开发者 API,用于以编程方式与好友系统集成。
获取插件实例:
FriendsPlugin plugin = FriendsPlugin.get();
获取 API:
FriendsAPI api = plugin.getAPI();
获取 FriendsManager:
FriendsManager manager = plugin.getFriendsManager();
加载档案
在访问好友数据之前,必须加载档案:
CompletableFuture<FriendsProfile> future = manager.loadProfile(playerUuid);
future.thenAccept(profile -> {
// 档案现已加载并缓存
});
获取已加载的档案:
FriendsProfile profile = api.getProfile(playerUuid);
当玩家离开时卸载档案:
manager.unloadProfile(playerUuid);
好友操作
检查玩家是否为好友:
boolean areFriends = api.areFriends(player1Uuid, player2Uuid);
获取好友列表:
List<FriendData> friends = api.getFriends(playerUuid);
for (FriendData friend : friends) {
UUID friendUuid = friend.getFriendUuid();
long friendsSince = friend.getSince();
}
获取好友数量:
int count = api.getFriendCount(playerUuid);
获取在线好友:
List<UUID> onlineFriends = api.getOnlineFriends(playerUuid);
int onlineCount = api.getOnlineFriendsCount(playerUuid);
删除一位好友:
FriendsManager.FriendRequestResult result = api.removeFriend(playerUuid, friendUuid);
if (result == FriendsManager.FriendRequestResult.SUCCESS) {
// 好友关系已删除
}
好友请求操作
发送好友请求:
FriendsManager.FriendRequestResult result = api.sendFriendRequest(senderUuid, receiverUuid);
switch (result) {
case SUCCESS:
// 请求发送成功
break;
case AUTO_ACCEPTED:
// 互发请求 - 现在已是好友
break;
case ALREADY_FRIENDS:
// 已经是好友
break;
case REQUEST_ALREADY_SENT:
// 重复请求
break;
case PLAYER_BLOCKED:
// 发送者已屏蔽接收者
break;
case BLOCKED_BY_PLAYER:
// 接收者已屏蔽发送者
break;
case SENDER_FRIENDS_LIST_FULL:
case RECEIVER_FRIENDS_LIST_FULL:
// 好友列表已满
break;
case REQUEST_ON_COOLDOWN:
// 发送下一个请求前必须等待
break;
// ... 其他情况
}
接受好友请求:
FriendsManager.FriendRequestResult result = api.acceptFriendRequest(receiverUuid, senderUuid);
拒绝好友请求:
FriendsManager.FriendRequestResult result = api.denyFriendRequest(receiverUuid, senderUuid);
取消发出的请求:
FriendsManager.FriendRequestResult result = api.cancelFriendRequest(senderUuid, receiverUuid);
获取待处理的请求:
List<FriendRequest> incoming = api.getIncomingRequests(playerUuid);
List<FriendRequest> outgoing = api.getOutgoingRequests(playerUuid);
for (FriendRequest request : incoming) {
UUID senderUuid = request.getSenderUuid();
long sentAt = request.getSentAt();
}
屏蔽操作
屏蔽一个玩家:
api.blockPlayer(playerUuid, targetUuid);
这会自动:
- 删除现有的好友关系(如果有)
- 取消玩家之间的待处理请求
- 阻止未来的好友请求
取消屏蔽一个玩家:
api.unblockPlayer(playerUuid, targetUuid);
检查是否被屏蔽:
boolean isBlocked = api.isBlocked(playerUuid, targetUuid);
获取已屏蔽的玩家:
Set<UUID> blockedPlayers = api.getBlockedPlayers(playerUuid);
设置操作
获取玩家设置:
FriendSettings settings = api.getSettings(playerUuid);
if (settings != null) {
boolean notificationsEnabled = settings.isNotificationsEnabled();
boolean allowRequests = settings.isAllowRequests();
}
切换通知:
api.toggleNotifications(playerUuid);
切换是否接受请求:
api.toggleAllowRequests(playerUuid);
在线状态追踪
检查玩家是否在线:
boolean isOnline = api.isOnline(playerUuid);
获取所有在线玩家:
Set<UUID> onlinePlayers = api.getOnlinePlayers();
标记玩家在线/离线(由插件自动处理):
manager.markOnline(playerUuid);
manager.markOffline(playerUuid);
附加功能
获取共同好友:
List<UUID> mutualFriends = api.getMutualFriends(player1Uuid, player2Uuid);
获取最后上线时间戳:
long lastSeen = api.getLastSeen(playerUuid);
强制操作(管理员):
// 强制添加好友关系(绕过所有检查)
manager.forceAddFriend(player1Uuid, player2Uuid);
// 强制删除好友关系
manager.forceRemoveFriend(player1Uuid, player2Uuid);
// 清除某个玩家的所有请求
manager.clearAllRequests(playerUuid);
清理过期请求:
// 返回被删除的请求数量
int deleted = manager.cleanupExpiredRequests();
结果枚举
所有好友请求操作均返回一个 FriendRequestResult:
public enum FriendRequestResult {
SUCCESS, // 操作成功完成
AUTO_ACCEPTED, // 互发请求创建了好友关系
ALREADY_FRIENDS, // 玩家已经是好友
NOT_FRIENDS, // 玩家不是好友
REQUEST_ALREADY_SENT, // 重复请求
REQUEST_NOT_FOUND, // 请求不存在
CANNOT_ADD_SELF, // 不能添加自己为好友
SENDER_PROFILE_NOT_LOADED, // 发送者档案未加载
RECEIVER_PROFILE_NOT_LOADED, // 接收者档案未加载
RECEIVER_NOT_ACCEPTING_REQUESTS, // 隐私设置阻止了请求
PLAYER_BLOCKED, // 发送者已屏蔽接收者
BLOCKED_BY_PLAYER, // 接收者已屏蔽发送者
SENDER_FRIENDS_LIST_FULL, // 发送者好友已达上限
RECEIVER_FRIENDS_LIST_FULL, // 接收者好友已达上限
REQUEST_ON_COOLDOWN // 必须等待才能重试
}
配置 API
重载配置:
plugin.reloadConfig();
获取配置值:
int maxFriends = plugin.getMaxFriends();
int requestExpiryDays = plugin.getRequestExpiryDays();
鸣谢
本插件的诞生离不开 HyUI。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。