feat: 完善插件稳定性与兼容性
This commit is contained in:
@@ -14,6 +14,10 @@ import java.util.Map;
|
||||
|
||||
public final class SkinBridgeCommand extends BaseCommand implements TabCompleter {
|
||||
|
||||
private static final String STATUS_PERMISSION = "essentialsc.command.skin.status";
|
||||
private static final String REFRESH_PERMISSION = "essentialsc.command.skin.refresh";
|
||||
private static final String OTHERS_PERMISSION = "essentialsc.command.skin.others";
|
||||
|
||||
public SkinBridgeCommand() {
|
||||
super("essentialsc.command.skin");
|
||||
}
|
||||
@@ -54,11 +58,29 @@ public final class SkinBridgeCommand extends BaseCommand implements TabCompleter
|
||||
}
|
||||
|
||||
String action = args[0].toLowerCase(Locale.ROOT);
|
||||
boolean targetsOther = sender instanceof Player playerSender
|
||||
&& !playerSender.getUniqueId().equals(target.getUniqueId());
|
||||
if (action.equals("status")) {
|
||||
if (!hasPermission(sender, STATUS_PERMISSION)) {
|
||||
sendNoPermission(sender, STATUS_PERMISSION);
|
||||
return true;
|
||||
}
|
||||
if (targetsOther && !hasPermission(sender, OTHERS_PERMISSION)) {
|
||||
sendNoPermission(sender, OTHERS_PERMISSION);
|
||||
return true;
|
||||
}
|
||||
sendStatus(sender, target, manager);
|
||||
return true;
|
||||
}
|
||||
if (action.equals("refresh")) {
|
||||
if (!hasPermission(sender, REFRESH_PERMISSION)) {
|
||||
sendNoPermission(sender, REFRESH_PERMISSION);
|
||||
return true;
|
||||
}
|
||||
if (targetsOther && !hasPermission(sender, OTHERS_PERMISSION)) {
|
||||
sendNoPermission(sender, OTHERS_PERMISSION);
|
||||
return true;
|
||||
}
|
||||
sendRefreshResult(sender, target, manager.queueSync(target, true));
|
||||
return true;
|
||||
}
|
||||
@@ -67,11 +89,15 @@ public final class SkinBridgeCommand extends BaseCommand implements TabCompleter
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean hasPermission(CommandSender sender, String permission) {
|
||||
return !(sender instanceof Player) || sender.hasPermission(permission);
|
||||
}
|
||||
|
||||
private void sendNoPermission(CommandSender sender, String permission) {
|
||||
sender.sendMessage(getLang().getPrefixedString("messages.no-permission", Map.of("permission", permission)));
|
||||
}
|
||||
|
||||
private void sendStatus(CommandSender sender, Player target, SkinBridgeManager manager) {
|
||||
if (!manager.isEnabled()) {
|
||||
sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.feature-disabled"));
|
||||
return;
|
||||
}
|
||||
if (!manager.isSkinGatewayAvailable()) {
|
||||
sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.dependency-missing"));
|
||||
return;
|
||||
@@ -85,6 +111,7 @@ public final class SkinBridgeCommand extends BaseCommand implements TabCompleter
|
||||
Map<String, String> placeholders = Map.of("player", target.getName(), "provider", String.valueOf(status.providerId()));
|
||||
switch (status.state()) {
|
||||
case EXTERNAL -> sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.status-external", placeholders));
|
||||
case EXCLUDED -> sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.status-excluded", placeholders));
|
||||
case NOT_EXTERNAL -> sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.status-not-external", placeholders));
|
||||
case PENDING -> sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.status-pending", placeholders));
|
||||
case UNKNOWN -> sender.sendMessage(getLang().getPrefixedString("skin-bridge.messages.status-unknown", placeholders));
|
||||
@@ -97,10 +124,18 @@ public final class SkinBridgeCommand extends BaseCommand implements TabCompleter
|
||||
case QUEUED -> "skin-bridge.messages.refresh-queued";
|
||||
case CACHED -> "skin-bridge.messages.refresh-cached";
|
||||
case ALREADY_RUNNING -> "skin-bridge.messages.refresh-running";
|
||||
case FEATURE_DISABLED -> "skin-bridge.messages.feature-disabled";
|
||||
case EXCLUDED -> "skin-bridge.messages.refresh-excluded";
|
||||
case QUEUE_FULL -> "skin-bridge.messages.queue-full";
|
||||
case DEPENDENCY_MISSING -> "skin-bridge.messages.dependency-missing";
|
||||
case NO_PROVIDERS -> "skin-bridge.messages.no-providers";
|
||||
case REFRESH_COOLDOWN -> "skin-bridge.messages.refresh-cooldown";
|
||||
};
|
||||
if (result == SkinBridgeManager.SyncResult.REFRESH_COOLDOWN) {
|
||||
placeholders = Map.of(
|
||||
"player", target.getName(),
|
||||
"seconds", String.valueOf(plugin.getSkinBridgeManager().getRemainingForceRefreshCooldownSeconds(target))
|
||||
);
|
||||
}
|
||||
sender.sendMessage(getLang().getPrefixedString(messagePath, placeholders));
|
||||
}
|
||||
|
||||
@@ -108,11 +143,20 @@ public final class SkinBridgeCommand extends BaseCommand implements TabCompleter
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length == 1) {
|
||||
String partial = args[0].toLowerCase(Locale.ROOT);
|
||||
return List.of("status", "refresh").stream()
|
||||
List<String> actions = new ArrayList<>();
|
||||
if (hasPermission(sender, STATUS_PERMISSION)) {
|
||||
actions.add("status");
|
||||
}
|
||||
if (hasPermission(sender, REFRESH_PERMISSION)) {
|
||||
actions.add("refresh");
|
||||
}
|
||||
return actions.stream()
|
||||
.filter(option -> option.startsWith(partial))
|
||||
.toList();
|
||||
}
|
||||
if (args.length == 2 && (args[0].equalsIgnoreCase("status") || args[0].equalsIgnoreCase("refresh"))) {
|
||||
if (args.length == 2 && hasPermission(sender, OTHERS_PERMISSION)
|
||||
&& ((args[0].equalsIgnoreCase("status") && hasPermission(sender, STATUS_PERMISSION))
|
||||
|| (args[0].equalsIgnoreCase("refresh") && hasPermission(sender, REFRESH_PERMISSION)))) {
|
||||
String partial = args[1].toLowerCase(Locale.ROOT);
|
||||
List<String> players = new ArrayList<>();
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
|
||||
Reference in New Issue
Block a user