diff --git a/bin/main/com/loki/lochat/LoChat.class b/bin/main/com/loki/lochat/LoChat.class index 631806c..0ea5456 100644 Binary files a/bin/main/com/loki/lochat/LoChat.class and b/bin/main/com/loki/lochat/LoChat.class differ diff --git a/bin/main/com/loki/lochat/commands/CommandManager.class b/bin/main/com/loki/lochat/commands/CommandManager.class index 16fe583..2c4cd05 100644 Binary files a/bin/main/com/loki/lochat/commands/CommandManager.class and b/bin/main/com/loki/lochat/commands/CommandManager.class differ diff --git a/bin/main/com/loki/lochat/commands/CustomCommand.class b/bin/main/com/loki/lochat/commands/CustomCommand.class index b71d046..b65e438 100644 Binary files a/bin/main/com/loki/lochat/commands/CustomCommand.class and b/bin/main/com/loki/lochat/commands/CustomCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/CustomCommandsCommand.class b/bin/main/com/loki/lochat/commands/CustomCommandsCommand.class index f144c30..755e346 100644 Binary files a/bin/main/com/loki/lochat/commands/CustomCommandsCommand.class and b/bin/main/com/loki/lochat/commands/CustomCommandsCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/admin/broadcast/DiscordCommand.class b/bin/main/com/loki/lochat/commands/admin/broadcast/DiscordCommand.class index 0eee752..5dd5f3f 100644 Binary files a/bin/main/com/loki/lochat/commands/admin/broadcast/DiscordCommand.class and b/bin/main/com/loki/lochat/commands/admin/broadcast/DiscordCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.class b/bin/main/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.class index 54c70d5..a154be1 100644 Binary files a/bin/main/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.class and b/bin/main/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/admin/system/LoChatCommand.class b/bin/main/com/loki/lochat/commands/admin/system/LoChatCommand.class index 3ed77f7..c161c8d 100644 Binary files a/bin/main/com/loki/lochat/commands/admin/system/LoChatCommand.class and b/bin/main/com/loki/lochat/commands/admin/system/LoChatCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/messaging/IgnoreListCommand.class b/bin/main/com/loki/lochat/commands/messaging/IgnoreListCommand.class index f87c613..dbd4ab6 100644 Binary files a/bin/main/com/loki/lochat/commands/messaging/IgnoreListCommand.class and b/bin/main/com/loki/lochat/commands/messaging/IgnoreListCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/moderation/ban/BanCommand.class b/bin/main/com/loki/lochat/commands/moderation/ban/BanCommand.class index 0ff691d..c3ffbc8 100644 Binary files a/bin/main/com/loki/lochat/commands/moderation/ban/BanCommand.class and b/bin/main/com/loki/lochat/commands/moderation/ban/BanCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.class b/bin/main/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.class index 5c67b05..82af6f0 100644 Binary files a/bin/main/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.class and b/bin/main/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/moderation/mute/MuteCommand.class b/bin/main/com/loki/lochat/commands/moderation/mute/MuteCommand.class index 8b54920..e225120 100644 Binary files a/bin/main/com/loki/lochat/commands/moderation/mute/MuteCommand.class and b/bin/main/com/loki/lochat/commands/moderation/mute/MuteCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.class b/bin/main/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.class index 0128282..1d0036f 100644 Binary files a/bin/main/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.class and b/bin/main/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/moderation/mute/MuteListCommand.class b/bin/main/com/loki/lochat/commands/moderation/mute/MuteListCommand.class index b0af18a..ced677f 100644 Binary files a/bin/main/com/loki/lochat/commands/moderation/mute/MuteListCommand.class and b/bin/main/com/loki/lochat/commands/moderation/mute/MuteListCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/nick/PlayerInfoCommand.class b/bin/main/com/loki/lochat/commands/nick/PlayerInfoCommand.class index ec4db27..6ecc6d9 100644 Binary files a/bin/main/com/loki/lochat/commands/nick/PlayerInfoCommand.class and b/bin/main/com/loki/lochat/commands/nick/PlayerInfoCommand.class differ diff --git a/bin/main/com/loki/lochat/commands/rp/RollCommand.class b/bin/main/com/loki/lochat/commands/rp/RollCommand.class index d591d3f..62870fc 100644 Binary files a/bin/main/com/loki/lochat/commands/rp/RollCommand.class and b/bin/main/com/loki/lochat/commands/rp/RollCommand.class differ diff --git a/bin/main/com/loki/lochat/config/BaseConfig.class b/bin/main/com/loki/lochat/config/BaseConfig.class index 6677ec3..4bdd5ab 100644 Binary files a/bin/main/com/loki/lochat/config/BaseConfig.class and b/bin/main/com/loki/lochat/config/BaseConfig.class differ diff --git a/bin/main/com/loki/lochat/config/core/ConfigAccessor.class b/bin/main/com/loki/lochat/config/core/ConfigAccessor.class index 2a0cd83..23db555 100644 Binary files a/bin/main/com/loki/lochat/config/core/ConfigAccessor.class and b/bin/main/com/loki/lochat/config/core/ConfigAccessor.class differ diff --git a/bin/main/com/loki/lochat/core/PluginInitializer.class b/bin/main/com/loki/lochat/core/PluginInitializer.class index 3b88712..3c2bd2c 100644 Binary files a/bin/main/com/loki/lochat/core/PluginInitializer.class and b/bin/main/com/loki/lochat/core/PluginInitializer.class differ diff --git a/bin/main/com/loki/lochat/core/filter/AdvancedMessageFilter.class b/bin/main/com/loki/lochat/core/filter/AdvancedMessageFilter.class index dc2730e..2cef601 100644 Binary files a/bin/main/com/loki/lochat/core/filter/AdvancedMessageFilter.class and b/bin/main/com/loki/lochat/core/filter/AdvancedMessageFilter.class differ diff --git a/bin/main/com/loki/lochat/core/filter/MuteFilter.class b/bin/main/com/loki/lochat/core/filter/MuteFilter.class index b13f2bb..4d44009 100644 Binary files a/bin/main/com/loki/lochat/core/filter/MuteFilter.class and b/bin/main/com/loki/lochat/core/filter/MuteFilter.class differ diff --git a/bin/main/com/loki/lochat/core/filter/filters/SwearFilter.class b/bin/main/com/loki/lochat/core/filter/filters/SwearFilter.class index cb3a032..d3d1647 100644 Binary files a/bin/main/com/loki/lochat/core/filter/filters/SwearFilter.class and b/bin/main/com/loki/lochat/core/filter/filters/SwearFilter.class differ diff --git a/bin/main/com/loki/lochat/core/registry/ServiceRegistry.class b/bin/main/com/loki/lochat/core/registry/ServiceRegistry.class index d010129..00f1cb8 100644 Binary files a/bin/main/com/loki/lochat/core/registry/ServiceRegistry.class and b/bin/main/com/loki/lochat/core/registry/ServiceRegistry.class differ diff --git a/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage$1.class b/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage$1.class index 60021a2..b598168 100644 Binary files a/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage$1.class and b/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage$1.class differ diff --git a/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage.class b/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage.class index 10feeb4..71e9cde 100644 Binary files a/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage.class and b/bin/main/com/loki/lochat/core/service/mute/MuteDataStorage.class differ diff --git a/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager$1.class b/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager$1.class index 16161ef..7cf42ab 100644 Binary files a/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager$1.class and b/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager$1.class differ diff --git a/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager.class b/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager.class index 9792568..71383aa 100644 Binary files a/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager.class and b/bin/main/com/loki/lochat/core/service/mute/MuteHistoryManager.class differ diff --git a/bin/main/com/loki/lochat/core/service/mute/MutePermissionChecker.class b/bin/main/com/loki/lochat/core/service/mute/MutePermissionChecker.class index 2b01875..78bbdf9 100644 Binary files a/bin/main/com/loki/lochat/core/service/mute/MutePermissionChecker.class and b/bin/main/com/loki/lochat/core/service/mute/MutePermissionChecker.class differ diff --git a/bin/main/com/loki/lochat/data/model/MuteData$MuteHistoryEntry.class b/bin/main/com/loki/lochat/data/model/MuteData$MuteHistoryEntry.class index 316de5c..79bd7cf 100644 Binary files a/bin/main/com/loki/lochat/data/model/MuteData$MuteHistoryEntry.class and b/bin/main/com/loki/lochat/data/model/MuteData$MuteHistoryEntry.class differ diff --git a/bin/main/com/loki/lochat/gradient/GradientModule.class b/bin/main/com/loki/lochat/gradient/GradientModule.class index d37dd65..1b32019 100644 Binary files a/bin/main/com/loki/lochat/gradient/GradientModule.class and b/bin/main/com/loki/lochat/gradient/GradientModule.class differ diff --git a/bin/main/com/loki/lochat/gradient/commands/GradientAdminCommand.class b/bin/main/com/loki/lochat/gradient/commands/GradientAdminCommand.class index e77bde5..c37eaee 100644 Binary files a/bin/main/com/loki/lochat/gradient/commands/GradientAdminCommand.class and b/bin/main/com/loki/lochat/gradient/commands/GradientAdminCommand.class differ diff --git a/bin/main/com/loki/lochat/gradient/commands/GradientColorCommand.class b/bin/main/com/loki/lochat/gradient/commands/GradientColorCommand.class index c172b7c..832ca07 100644 Binary files a/bin/main/com/loki/lochat/gradient/commands/GradientColorCommand.class and b/bin/main/com/loki/lochat/gradient/commands/GradientColorCommand.class differ diff --git a/bin/main/com/loki/lochat/gradient/commands/GradientPrefixCommand.class b/bin/main/com/loki/lochat/gradient/commands/GradientPrefixCommand.class index cb31136..fba9b52 100644 Binary files a/bin/main/com/loki/lochat/gradient/commands/GradientPrefixCommand.class and b/bin/main/com/loki/lochat/gradient/commands/GradientPrefixCommand.class differ diff --git a/bin/main/com/loki/lochat/gradient/data/GradientDataManager.class b/bin/main/com/loki/lochat/gradient/data/GradientDataManager.class index 63a588e..05f3c6f 100644 Binary files a/bin/main/com/loki/lochat/gradient/data/GradientDataManager.class and b/bin/main/com/loki/lochat/gradient/data/GradientDataManager.class differ diff --git a/bin/main/com/loki/lochat/gradient/util/DisplayNameUtil.class b/bin/main/com/loki/lochat/gradient/util/DisplayNameUtil.class index 5948528..bac1f4c 100644 Binary files a/bin/main/com/loki/lochat/gradient/util/DisplayNameUtil.class and b/bin/main/com/loki/lochat/gradient/util/DisplayNameUtil.class differ diff --git a/bin/main/com/loki/lochat/integrations/PlaceholderAPIHook.class b/bin/main/com/loki/lochat/integrations/PlaceholderAPIHook.class index a2d2df4..4b93daf 100644 Binary files a/bin/main/com/loki/lochat/integrations/PlaceholderAPIHook.class and b/bin/main/com/loki/lochat/integrations/PlaceholderAPIHook.class differ diff --git a/bin/main/com/loki/lochat/integrations/discord/DiscordMessageService.class b/bin/main/com/loki/lochat/integrations/discord/DiscordMessageService.class index a558231..05d5cad 100644 Binary files a/bin/main/com/loki/lochat/integrations/discord/DiscordMessageService.class and b/bin/main/com/loki/lochat/integrations/discord/DiscordMessageService.class differ diff --git a/bin/main/com/loki/lochat/listener/ChatEventListener.class b/bin/main/com/loki/lochat/listener/ChatEventListener.class index 70154e5..1ccea7d 100644 Binary files a/bin/main/com/loki/lochat/listener/ChatEventListener.class and b/bin/main/com/loki/lochat/listener/ChatEventListener.class differ diff --git a/bin/main/com/loki/lochat/managers/AutoMessageManager.class b/bin/main/com/loki/lochat/managers/AutoMessageManager.class index d555acd..601b13c 100644 Binary files a/bin/main/com/loki/lochat/managers/AutoMessageManager.class and b/bin/main/com/loki/lochat/managers/AutoMessageManager.class differ diff --git a/bin/main/com/loki/lochat/managers/CustomCommandManager$CustomCommandData.class b/bin/main/com/loki/lochat/managers/CustomCommandManager$CustomCommandData.class index d78bd0b..9205f67 100644 Binary files a/bin/main/com/loki/lochat/managers/CustomCommandManager$CustomCommandData.class and b/bin/main/com/loki/lochat/managers/CustomCommandManager$CustomCommandData.class differ diff --git a/bin/main/com/loki/lochat/managers/CustomCommandManager.class b/bin/main/com/loki/lochat/managers/CustomCommandManager.class index 2356f56..9cf5d11 100644 Binary files a/bin/main/com/loki/lochat/managers/CustomCommandManager.class and b/bin/main/com/loki/lochat/managers/CustomCommandManager.class differ diff --git a/bin/main/com/loki/lochat/managers/EmojiManager.class b/bin/main/com/loki/lochat/managers/EmojiManager.class index b491cc3..5a556ca 100644 Binary files a/bin/main/com/loki/lochat/managers/EmojiManager.class and b/bin/main/com/loki/lochat/managers/EmojiManager.class differ diff --git a/bin/main/com/loki/lochat/managers/commands/MessageSender.class b/bin/main/com/loki/lochat/managers/commands/MessageSender.class index c0f1118..74243ab 100644 Binary files a/bin/main/com/loki/lochat/managers/commands/MessageSender.class and b/bin/main/com/loki/lochat/managers/commands/MessageSender.class differ diff --git a/bin/main/com/loki/lochat/renderer/EnhancedChatRenderer.class b/bin/main/com/loki/lochat/renderer/EnhancedChatRenderer.class index b902ff8..853adb6 100644 Binary files a/bin/main/com/loki/lochat/renderer/EnhancedChatRenderer.class and b/bin/main/com/loki/lochat/renderer/EnhancedChatRenderer.class differ diff --git a/bin/main/com/loki/lochat/utils/platform/AdventureManager.class b/bin/main/com/loki/lochat/utils/platform/AdventureManager.class index a17f118..7540656 100644 Binary files a/bin/main/com/loki/lochat/utils/platform/AdventureManager.class and b/bin/main/com/loki/lochat/utils/platform/AdventureManager.class differ diff --git a/bin/main/com/loki/lochat/utils/platform/FoliaUtil.class b/bin/main/com/loki/lochat/utils/platform/FoliaUtil.class index 2fa744f..d42262d 100644 Binary files a/bin/main/com/loki/lochat/utils/platform/FoliaUtil.class and b/bin/main/com/loki/lochat/utils/platform/FoliaUtil.class differ diff --git a/src/main/java/com/loki/lochat/commands/CommandManager.java b/src/main/java/com/loki/lochat/commands/CommandManager.java index b322e51..cffed59 100644 --- a/src/main/java/com/loki/lochat/commands/CommandManager.java +++ b/src/main/java/com/loki/lochat/commands/CommandManager.java @@ -1,16 +1,35 @@ package com.loki.lochat.commands; import com.loki.lochat.LoChat; -import com.loki.lochat.commands.admin.broadcast.*; -import com.loki.lochat.commands.admin.chat.*; -import com.loki.lochat.commands.admin.system.*; -import com.loki.lochat.commands.chat.*; -import com.loki.lochat.commands.messaging.*; -import com.loki.lochat.commands.moderation.ban.*; -import com.loki.lochat.commands.moderation.mute.*; -import com.loki.lochat.commands.moderation.warn.*; -import com.loki.lochat.commands.nick.*; -import com.loki.lochat.commands.rp.*; +import com.loki.lochat.commands.admin.broadcast.AnnounceCommand; +import com.loki.lochat.commands.admin.broadcast.DiscordCommand; +import com.loki.lochat.commands.admin.chat.ChatSpyCommand; +import com.loki.lochat.commands.admin.chat.ClearChatCommand; +import com.loki.lochat.commands.admin.chat.ClearChatConfigCommand; +import com.loki.lochat.commands.admin.system.LoChatCommand; +import com.loki.lochat.commands.admin.system.ReloadConfigCommand; +import com.loki.lochat.commands.chat.GlobalChatCommand; +import com.loki.lochat.commands.chat.LocalChatCommand; +import com.loki.lochat.commands.messaging.IgnoreCommand; +import com.loki.lochat.commands.messaging.IgnoreListCommand; +import com.loki.lochat.commands.messaging.MsgCommand; +import com.loki.lochat.commands.messaging.ReplyCommand; +import com.loki.lochat.commands.messaging.UnignoreCommand; +import com.loki.lochat.commands.moderation.ban.BanCommand; +import com.loki.lochat.commands.moderation.ban.UnbanCommand; +import com.loki.lochat.commands.moderation.mute.MuteBlameCommand; +import com.loki.lochat.commands.moderation.mute.MuteCommand; +import com.loki.lochat.commands.moderation.mute.MuteHistoryCommand; +import com.loki.lochat.commands.moderation.mute.MuteListCommand; +import com.loki.lochat.commands.moderation.mute.UnmuteCommand; +import com.loki.lochat.commands.moderation.warn.SilentWarnCommand; +import com.loki.lochat.commands.moderation.warn.WarnCommand; +import com.loki.lochat.commands.nick.NickCommand; +import com.loki.lochat.commands.nick.PlayerInfoCommand; +import com.loki.lochat.commands.rp.DoCommand; +import com.loki.lochat.commands.rp.MeCommand; +import com.loki.lochat.commands.rp.RollCommand; +import com.loki.lochat.commands.rp.TryCommand; import org.bukkit.command.PluginCommand; diff --git a/src/main/java/com/loki/lochat/commands/CustomCommand.java b/src/main/java/com/loki/lochat/commands/CustomCommand.java index b1c2074..38b6ff5 100644 --- a/src/main/java/com/loki/lochat/commands/CustomCommand.java +++ b/src/main/java/com/loki/lochat/commands/CustomCommand.java @@ -32,7 +32,9 @@ public final class CustomCommand extends Command { } @Override - public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { + public @NotNull List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull + String[] args) throws IllegalArgumentException { + // Базовое автодополнение - можно расширить при необходимости return new ArrayList<>(); } diff --git a/src/main/java/com/loki/lochat/commands/admin/broadcast/DiscordCommand.java b/src/main/java/com/loki/lochat/commands/admin/broadcast/DiscordCommand.java index dcb5f23..24ee704 100644 --- a/src/main/java/com/loki/lochat/commands/admin/broadcast/DiscordCommand.java +++ b/src/main/java/com/loki/lochat/commands/admin/broadcast/DiscordCommand.java @@ -70,7 +70,10 @@ public class DiscordCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { if (!sender.hasPermission("lochat.discord.admin")) { return null; } diff --git a/src/main/java/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.java b/src/main/java/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.java index ff83fb2..0506450 100644 --- a/src/main/java/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.java +++ b/src/main/java/com/loki/lochat/commands/admin/chat/ClearChatConfigCommand.java @@ -59,7 +59,10 @@ public class ClearChatConfigCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { if (args.length == 1) { return List.of("enable", "disable", "message", "status").stream() .filter(s -> s.startsWith(args[0].toLowerCase())).toList(); diff --git a/src/main/java/com/loki/lochat/commands/admin/system/LoChatCommand.java b/src/main/java/com/loki/lochat/commands/admin/system/LoChatCommand.java index e697fb6..d771d53 100644 --- a/src/main/java/com/loki/lochat/commands/admin/system/LoChatCommand.java +++ b/src/main/java/com/loki/lochat/commands/admin/system/LoChatCommand.java @@ -54,7 +54,10 @@ public class LoChatCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { if (!sender.hasPermission("lochat.admin")) { return new ArrayList<>(); } diff --git a/src/main/java/com/loki/lochat/commands/messaging/IgnoreListCommand.java b/src/main/java/com/loki/lochat/commands/messaging/IgnoreListCommand.java index 51bf317..604813e 100644 --- a/src/main/java/com/loki/lochat/commands/messaging/IgnoreListCommand.java +++ b/src/main/java/com/loki/lochat/commands/messaging/IgnoreListCommand.java @@ -44,7 +44,9 @@ public class IgnoreListCommand implements CommandExecutor { player.sendMessage(ChatFormatter.parse("⚖C9◆ &f" + name)); } } - player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-footer").replace("{count}", String.valueOf(ignored.size())))); + player.sendMessage(ChatFormatter.parse(plugin.getMessageConfig().get("ignore.list-footer") + .replace("{count}", String.valueOf(ignored.size())))); + return true; } } diff --git a/src/main/java/com/loki/lochat/commands/moderation/ban/BanCommand.java b/src/main/java/com/loki/lochat/commands/moderation/ban/BanCommand.java index 249766d..d18941a 100644 --- a/src/main/java/com/loki/lochat/commands/moderation/ban/BanCommand.java +++ b/src/main/java/com/loki/lochat/commands/moderation/ban/BanCommand.java @@ -73,33 +73,13 @@ public class BanCommand implements CommandExecutor, TabCompleter { return true; } - String timeStr = null; - StringBuilder reasonBuilder = new StringBuilder(); - for (int i = 1; i < args.length; i++) { - if (timeStr == null && isTimeFormat(args[i])) { - timeStr = args[i]; - } else { - if (reasonBuilder.length() > 0) { - reasonBuilder.append(" "); - } - reasonBuilder.append(args[i]); - } + DurationResult parsed = parseDuration(sender, args, msg); + if (!parsed.valid) { + return true; } - long durationMs; - if (timeStr == null || timeStr.isEmpty()) { - durationMs = 0; - } else if (timeStr.equalsIgnoreCase("perm") || timeStr.equals("0")) { - durationMs = 0; - } else { - durationMs = muteService.parseTime(timeStr); - if (durationMs < 0) { - sender.sendMessage(ChatFormatter.parse(msg.getInvalidTime())); - return true; - } - } - - String reason = reasonBuilder.length() > 0 ? reasonBuilder.toString() : msg.getModerationDefaultReason(); + long durationMs = parsed.durationMs; + String reason = parsed.reason; String finalName = PlayerUtil.getPlayerName(targetUuid); if (finalName == null) { finalName = targetName; @@ -122,6 +102,39 @@ public class BanCommand implements CommandExecutor, TabCompleter { return true; } + private record DurationResult(long durationMs, String reason, boolean valid) { } + + private DurationResult parseDuration(CommandSender sender, String[] args, MessagesConfig msg) { + String timeStr = null; + StringBuilder reasonBuilder = new StringBuilder(); + for (int i = 1; i < args.length; i++) { + if (timeStr == null && isTimeFormat(args[i])) { + timeStr = args[i]; + } else { + if (reasonBuilder.length() > 0) { + reasonBuilder.append(" "); + } + reasonBuilder.append(args[i]); + } + } + + long durationMs; + if (timeStr == null || timeStr.isEmpty()) { + durationMs = 0; + } else if (timeStr.equalsIgnoreCase("perm") || timeStr.equals("0")) { + durationMs = 0; + } else { + durationMs = muteService.parseTime(timeStr); + if (durationMs < 0) { + sender.sendMessage(ChatFormatter.parse(msg.getInvalidTime())); + return new DurationResult(0, "", false); + } + } + + String reason = reasonBuilder.length() > 0 ? reasonBuilder.toString() : msg.getModerationDefaultReason(); + return new DurationResult(durationMs, reason, true); + } + private boolean isTimeFormat(String s) { return s.equalsIgnoreCase("perm") || s.matches("\\d+[dhms]?"); } diff --git a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.java b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.java index 90c9ef2..7eae4be 100644 --- a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.java +++ b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteBlameCommand.java @@ -56,7 +56,9 @@ public class MuteBlameCommand implements CommandExecutor, TabCompleter { String status = e.unmuted ? "⚖C9Размучен" : (e.duration == 0 ? "&#CF6679Активен (навсегда)" : System.currentTimeMillis() > e.mutedAt + e.duration ? "&#B798A8Истёк" : "&#CF6679Активен"); sender.sendMessage("⚖C9" + idx + ". &f" + (e.playerName != null ? e.playerName : "???") + " &#B798A8— " + status); - sender.sendMessage(" &f" + fmt.format(new Date(e.mutedAt)) + " &#B798A8Длительность: &f" + (e.duration == 0 ? "навсегда" : muteService.formatTime(e.duration))); + sender.sendMessage(" &f" + fmt.format(new Date(e.mutedAt)) + " &#B798A8Длительность: &f" + (e.duration + == 0 ? "навсегда" : muteService.formatTime(e.duration))); + sender.sendMessage(" &#B798A8Причина: &f" + (e.reason != null ? e.reason : "—")); idx++; } @@ -64,7 +66,10 @@ public class MuteBlameCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { List c = new ArrayList<>(); if (args.length == 1) { for (Player p : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteCommand.java b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteCommand.java index cdc1145..85f41d9 100644 --- a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteCommand.java +++ b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteCommand.java @@ -31,6 +31,8 @@ public class MuteCommand implements CommandExecutor, TabCompleter { this.muteService = plugin.getServiceRegistry().get(MuteService.class); } + private record ParsedArgs(String targetName, long duration, String reason, boolean silent) { } + @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { @@ -49,7 +51,38 @@ public class MuteCommand implements CommandExecutor, TabCompleter { return true; } - // Парсим аргументы + ParsedArgs parsed = parseArgs(sender, args, hm); + if (parsed == null) { + return true; + } + + String targetName = parsed.targetName; + long duration = parsed.duration; + String reason = parsed.reason; + boolean silent = parsed.silent; + + if (sender instanceof Player p && !muteService.canMuteForDuration(p, duration)) { + long max = muteService.getMaxDuration(p); + sender.sendMessage(ChatFormatter.parse("&#CF6679Нельзя мутить на такой срок! &#B798A8Максимум: ẲE9" + + (max == 0 ? "навсегда" : muteService.formatTime(max)))); + return true; + } + + UUID targetUUID = com.loki.lochat.utils.player.PlayerUtil.findPlayerUUID(targetName); + if (targetUUID == null) { + sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found")); + return true; + } + if (muteService.isMuted(targetUUID)) { + sender.sendMessage(ChatFormatter.parse("&#CF6679Игрок уже замучен!")); + return true; + } + + doMute(sender, hm, targetUUID, targetName, duration, reason, silent); + return true; + } + + private ParsedArgs parseArgs(CommandSender sender, String[] args, MessagesConfig hm) { String targetName = null; String timeStr = null; boolean silent = false; @@ -72,45 +105,39 @@ public class MuteCommand implements CommandExecutor, TabCompleter { if (silent && !sender.hasPermission("lochat.mute.silent")) { sender.sendMessage(ChatFormatter.parse(hm.getNoSilentMutePermission())); - return true; + return null; } String reason = reasonBuilder.length() > 0 ? reasonBuilder.toString() : hm.getDefaultMuteReason(); - // Длительность - long duration; + long duration = resolveDuration(sender, timeStr, hm); + if (duration < 0) { + return null; + } + + return new ParsedArgs(targetName, duration, reason, silent); + } + + private long resolveDuration(CommandSender sender, String timeStr, MessagesConfig hm) { if (timeStr == null || timeStr.isEmpty()) { - duration = sender instanceof Player p ? muteService.getMaxDuration(p) : 0; - if (duration == -1) { - duration = muteService.parseTime(hm.getDefaultMuteDuration()); - } - } else if (timeStr.equalsIgnoreCase("perm") || timeStr.equals("0")) { - duration = 0; - } else { - duration = muteService.parseTime(timeStr); - if (duration < 0) { - sender.sendMessage(ChatFormatter.parse(hm.getMuteTimeHelp())); - return true; + long dur = sender instanceof Player p ? muteService.getMaxDuration(p) : 0; + if (dur == -1) { + dur = muteService.parseTime(hm.getDefaultMuteDuration()); } + return dur; } + if (timeStr.equalsIgnoreCase("perm") || timeStr.equals("0")) { + return 0; + } + long dur = muteService.parseTime(timeStr); + if (dur < 0) { + sender.sendMessage(ChatFormatter.parse(hm.getMuteTimeHelp())); + } + return dur; + } - if (sender instanceof Player p && !muteService.canMuteForDuration(p, duration)) { - long max = muteService.getMaxDuration(p); - sender.sendMessage(ChatFormatter.parse("&#CF6679Нельзя мутить на такой срок! &#B798A8Максимум: ẲE9" + - (max == 0 ? "навсегда" : muteService.formatTime(max)))); - return true; - } - - UUID targetUUID = com.loki.lochat.utils.player.PlayerUtil.findPlayerUUID(targetName); - if (targetUUID == null) { - sender.sendMessage(plugin.getMessageConfig().getComponent("errors.player-not-found")); - return true; - } - if (muteService.isMuted(targetUUID)) { - sender.sendMessage(ChatFormatter.parse("&#CF6679Игрок уже замучен!")); - return true; - } - + private void doMute(CommandSender sender, MessagesConfig hm, UUID targetUUID, + String targetName, long duration, String reason, boolean silent) { Player target = Bukkit.getPlayer(targetUUID); String finalName = com.loki.lochat.utils.player.PlayerUtil.getPlayerName(targetUUID); String op = sender.getName(); @@ -146,8 +173,6 @@ public class MuteCommand implements CommandExecutor, TabCompleter { String c = voiceCmd.replace("{player}", finalName).replace("{uuid}", targetUUID.toString()); Bukkit.dispatchCommand(Bukkit.getConsoleSender(), c); } - - return true; } private boolean isTimeFormat(String s) { diff --git a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.java b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.java index 967090e..ce8f184 100644 --- a/src/main/java/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.java +++ b/src/main/java/com/loki/lochat/commands/moderation/mute/MuteHistoryCommand.java @@ -76,7 +76,10 @@ public class MuteHistoryCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { List c = new ArrayList<>(); if (args.length == 1) { for (Player p : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/com/loki/lochat/commands/moderation/mute/UnmuteCommand.java b/src/main/java/com/loki/lochat/commands/moderation/mute/UnmuteCommand.java index 361dbb4..d3d6d1d 100644 --- a/src/main/java/com/loki/lochat/commands/moderation/mute/UnmuteCommand.java +++ b/src/main/java/com/loki/lochat/commands/moderation/mute/UnmuteCommand.java @@ -84,7 +84,10 @@ public class UnmuteCommand implements CommandExecutor, TabCompleter { } @Override - public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] args) { + public @Nullable List onTabComplete( + @NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, + @NotNull String[] args + ) { List c = new ArrayList<>(); if (args.length == 1) { for (Player p : Bukkit.getOnlinePlayers()) { diff --git a/src/main/java/com/loki/lochat/commands/rp/DoCommand.java b/src/main/java/com/loki/lochat/commands/rp/DoCommand.java index 522a417..890bd38 100644 --- a/src/main/java/com/loki/lochat/commands/rp/DoCommand.java +++ b/src/main/java/com/loki/lochat/commands/rp/DoCommand.java @@ -35,7 +35,8 @@ public class DoCommand extends PlayerCommand { int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.do", 0); if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_do", cooldown)) { int remaining = playerService.getRemainingCooldown(player.getUniqueId(), "rp_do", cooldown); - String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage().replace("{remaining}", String.valueOf(remaining)); + String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage() + .replace("{remaining}", String.valueOf(remaining)); player.sendMessage(ChatFormatter.parse(msg)); return true; } diff --git a/src/main/java/com/loki/lochat/commands/rp/MeCommand.java b/src/main/java/com/loki/lochat/commands/rp/MeCommand.java index cf8fbe2..6d46948 100644 --- a/src/main/java/com/loki/lochat/commands/rp/MeCommand.java +++ b/src/main/java/com/loki/lochat/commands/rp/MeCommand.java @@ -35,7 +35,8 @@ public class MeCommand extends PlayerCommand { int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.me", 0); if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_me", cooldown)) { int remaining = playerService.getRemainingCooldown(player.getUniqueId(), "rp_me", cooldown); - String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage().replace("{remaining}", String.valueOf(remaining)); + String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage() + .replace("{remaining}", String.valueOf(remaining)); player.sendMessage(ChatFormatter.parse(msg)); return true; } diff --git a/src/main/java/com/loki/lochat/commands/rp/TryCommand.java b/src/main/java/com/loki/lochat/commands/rp/TryCommand.java index 661dc1d..5dd38be 100644 --- a/src/main/java/com/loki/lochat/commands/rp/TryCommand.java +++ b/src/main/java/com/loki/lochat/commands/rp/TryCommand.java @@ -38,7 +38,8 @@ public class TryCommand extends PlayerCommand { int cooldown = plugin.getConfigManager().getInt("rp.cooldowns.try", 0); if (cooldown > 0 && playerService.isOnCooldown(player.getUniqueId(), "rp_try", cooldown)) { int remaining = playerService.getRemainingCooldown(player.getUniqueId(), "rp_try", cooldown); - String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage().replace("{remaining}", String.valueOf(remaining)); + String msg = plugin.getConfigManager().getMessagesConfig().getCooldownMessage() + .replace("{remaining}", String.valueOf(remaining)); player.sendMessage(ChatFormatter.parse(msg)); return true; } diff --git a/src/main/java/com/loki/lochat/config/AppearanceConfig.java b/src/main/java/com/loki/lochat/config/AppearanceConfig.java index 017cb32..7518a85 100644 --- a/src/main/java/com/loki/lochat/config/AppearanceConfig.java +++ b/src/main/java/com/loki/lochat/config/AppearanceConfig.java @@ -35,9 +35,9 @@ public class AppearanceConfig extends BaseConfig { */ private void loadEmojiCache() { emojiCache.clear(); - if (config.isConfigurationSection("emojis")) { - for (String key : config.getConfigurationSection("emojis").getKeys(false)) { - emojiCache.put(key, config.getString("emojis." + key)); + if (getConfig().isConfigurationSection("emojis")) { + for (String key : getConfig().getConfigurationSection("emojis").getKeys(false)) { + emojiCache.put(key, getConfig().getString("emojis." + key)); } } } @@ -45,7 +45,7 @@ public class AppearanceConfig extends BaseConfig { // ========== ПРЕФИКСЫ ========== private String getPrefixValue(String chatType, String key, String defaultValue) { - return config.getString("prefixes." + chatType + "." + key, defaultValue); + return getConfig().getString("prefixes." + chatType + "." + key, defaultValue); } public String getGlobalEmoji() { @@ -55,7 +55,7 @@ public class AppearanceConfig extends BaseConfig { return getPrefixValue("global", "text", "GLOBAL"); } public List getGlobalColors() { - return config.getStringList("prefixes.global.colors"); + return getConfig().getStringList("prefixes.global.colors"); } public String getGlobalSeparatorText() { return getPrefixValue("global", "separator.text", " ▶ "); @@ -74,7 +74,7 @@ public class AppearanceConfig extends BaseConfig { return getPrefixValue("local", "text", "LOCAL"); } public List getLocalColors() { - return config.getStringList("prefixes.local.colors"); + return getConfig().getStringList("prefixes.local.colors"); } public String getLocalSeparatorText() { return getPrefixValue("local", "separator.text", " ▶ "); @@ -89,20 +89,20 @@ public class AppearanceConfig extends BaseConfig { // ========== ФОРМАТ СООБЩЕНИЙ ========== public String getGlobalChatFormat() { - return config.getString("chat-format.global", "{emoji} {prefix} {separator} {player} : {message}"); + return getConfig().getString("chat-format.global", "{emoji} {prefix} {separator} {player} : {message}"); } public String getLocalChatFormat() { - return config.getString("chat-format.local", "{emoji} {prefix} {separator} {player} : {message}"); + return getConfig().getString("chat-format.local", "{emoji} {prefix} {separator} {player} : {message}"); } // ========== HOVER ЭФФЕКТЫ ========== public boolean isHoverEnabled() { - return config.getBoolean("hover.enabled", true); + return getConfig().getBoolean("hover.enabled", true); } public List getHoverFormat() { - return config.getStringList("hover.format"); + return getConfig().getStringList("hover.format"); } // ========== ЭМОДЗИ ========== @@ -117,20 +117,20 @@ public class AppearanceConfig extends BaseConfig { // ========== НАСТРОЙКИ ЧАТА ========== public int getLocalRadius() { - return config.getInt("chat.local_radius", 100); + return getConfig().getInt("chat.local_radius", 100); } public int getClearLines() { - return config.getInt("chat.clear_lines", 100); + return getConfig().getInt("chat.clear_lines", 100); } public int getMinMessageLength() { - return config.getInt("chat.min_message_length", 1); + return getConfig().getInt("chat.min_message_length", 1); } public int getMaxMessageLength() { - return config.getInt("chat.max_message_length", 2000); + return getConfig().getInt("chat.max_message_length", 2000); } private String getChatColor(String type, String defaultColor) { - return config.getString("chat.colors." + type, defaultColor); + return getConfig().getString("chat.colors." + type, defaultColor); } public String getNobodyHeardColor() { @@ -152,18 +152,18 @@ public class AppearanceConfig extends BaseConfig { // ========== DISCORD ========== public String getDiscordEmoji(String event) { - return config.getString("discord.emojis." + event, ""); + return getConfig().getString("discord.emojis." + event, ""); } public String getDiscordEventTitle(String event) { - return config.getString("discord.event_titles." + event, ""); + return getConfig().getString("discord.event_titles." + event, ""); } public String getDefaultAvatarUrl() { - return config.getString("discord.avatar_urls.default", "https://mc-heads.net/avatar/minecraft/64"); + return getConfig().getString("discord.avatar_urls.default", "https://mc-heads.net/avatar/minecraft/64"); } public String getPlayerAvatarUrl() { - return config.getString("discord.avatar_urls.player", "https://mc-heads.net/avatar/{player}/64"); + return getConfig().getString("discord.avatar_urls.player", "https://mc-heads.net/avatar/{player}/64"); } public String getDefaultEmbedColor() { - return config.getString("discord.default_embed_color", "5865F2"); + return getConfig().getString("discord.default_embed_color", "5865F2"); } } diff --git a/src/main/java/com/loki/lochat/config/BaseConfig.java b/src/main/java/com/loki/lochat/config/BaseConfig.java index fe6eb29..2f6296d 100644 --- a/src/main/java/com/loki/lochat/config/BaseConfig.java +++ b/src/main/java/com/loki/lochat/config/BaseConfig.java @@ -14,8 +14,8 @@ import java.nio.file.Files; */ public abstract class BaseConfig { protected final JavaPlugin plugin; - protected File configFile; - protected FileConfiguration config; + private File configFile; + private FileConfiguration config; private final String fileName; private final boolean inConfigFolder; @@ -112,6 +112,10 @@ public abstract class BaseConfig { // Переопределяется в подклассах } + protected File getConfigFile() { + return configFile; + } + /** * Получить FileConfiguration */ diff --git a/src/main/java/com/loki/lochat/config/FiltersConfig.java b/src/main/java/com/loki/lochat/config/FiltersConfig.java index 7176d46..226083b 100644 --- a/src/main/java/com/loki/lochat/config/FiltersConfig.java +++ b/src/main/java/com/loki/lochat/config/FiltersConfig.java @@ -16,146 +16,146 @@ public class FiltersConfig extends BaseConfig { // ── Капс ──────────────────────────────────────────────────────────────────── public boolean isCapsEnabled() { - return config.getBoolean("caps.enabled", true); + return getConfig().getBoolean("caps.enabled", true); } public int getCapsMaxPercent() { - return config.getInt("caps.max-percent", 70); + return getConfig().getInt("caps.max-percent", 70); } public int getCapsMinLength() { - return config.getInt("caps.min-length", 5); + return getConfig().getInt("caps.min-length", 5); } public boolean isCapsAutoLowercase() { - return config.getBoolean("caps.auto-lowercase", true); + return getConfig().getBoolean("caps.auto-lowercase", true); } public boolean isCapsBlock() { - return config.getBoolean("caps.block", false); + return getConfig().getBoolean("caps.block", false); } // ── Мат ───────────────────────────────────────────────────────────────────── public boolean isSwearEnabled() { - return config.getBoolean("swear.enabled", true); + return getConfig().getBoolean("swear.enabled", true); } public String getSwearAction() { - return config.getString("swear.action", "replace"); + return getConfig().getString("swear.action", "replace"); } public String getSwearReplacementChar() { - return config.getString("swear.replacement-char", "*"); + return getConfig().getString("swear.replacement-char", "*"); } public boolean isSwearCheckFragments() { - return config.getBoolean("swear.check-fragments", true); + return getConfig().getBoolean("swear.check-fragments", true); } public boolean isSwearIgnoreCase() { - return config.getBoolean("swear.ignore-case", true); + return getConfig().getBoolean("swear.ignore-case", true); } public boolean isSwearUseExternalFile() { - return config.getBoolean("swear.use-external-file", true); + return getConfig().getBoolean("swear.use-external-file", true); } public List getSwearWords() { - return config.getStringList("swear.words"); + return getConfig().getStringList("swear.words"); } public String getSwearBlockMessage() { - return config.getString("swear.block-message", "&#CF6679Мат запрещён"); + return getConfig().getString("swear.block-message", "&#CF6679Мат запрещён"); } // ── Реклама ───────────────────────────────────────────────────────────────── public boolean isAdvertisingEnabled() { - return config.getBoolean("advertising.enabled", true); + return getConfig().getBoolean("advertising.enabled", true); } public boolean isBlockHiddenUrls() { - return config.getBoolean("advertising.block-hidden-urls", true); + return getConfig().getBoolean("advertising.block-hidden-urls", true); } public boolean isBlockDomains() { - return config.getBoolean("advertising.block-domains", true); + return getConfig().getBoolean("advertising.block-domains", true); } public List getWhitelistedDomains() { - return config.getStringList("advertising.whitelist"); + return getConfig().getStringList("advertising.whitelist"); } public List getBlacklistedDomains() { - return config.getStringList("advertising.blacklist"); + return getConfig().getStringList("advertising.blacklist"); } public String getAdvertisingBlockMessage() { - return config.getString("advertising.blocked-message", "&#CF6679Реклама запрещена!"); + return getConfig().getString("advertising.blocked-message", "&#CF6679Реклама запрещена!"); } // ── IP адреса ─────────────────────────────────────────────────────────────── public boolean isIpEnabled() { - return config.getBoolean("ip.enabled", true); + return getConfig().getBoolean("ip.enabled", true); } public boolean isIpBlock() { - return config.getBoolean("ip.block", false); + return getConfig().getBoolean("ip.block", false); } public String getIpReplacement() { - return config.getString("ip.replacement", "[IP скрыт]"); + return getConfig().getString("ip.replacement", "[IP скрыт]"); } public String getIpBlockMessage() { - return config.getString("ip.blocked-message", "&#CF6679IP адреса запрещены!"); + return getConfig().getString("ip.blocked-message", "&#CF6679IP адреса запрещены!"); } // ── Повторяющиеся символы ─────────────────────────────────────────────────── public boolean isRepeatEnabled() { - return config.getBoolean("repeat.enabled", true); + return getConfig().getBoolean("repeat.enabled", true); } public int getRepeatMaxRepeats() { - return config.getInt("repeat.max-repeats", 3); + return getConfig().getInt("repeat.max-repeats", 3); } // ── Флуд ──────────────────────────────────────────────────────────────────── public boolean isFloodEnabled() { - return config.getBoolean("flood.enabled", true); + return getConfig().getBoolean("flood.enabled", true); } public int getFloodMaxMessages() { - return config.getInt("flood.max-messages", 5); + return getConfig().getInt("flood.max-messages", 5); } public int getFloodTimePeriod() { - return config.getInt("flood.time-period", 10); + return getConfig().getInt("flood.time-period", 10); } public String getFloodBlockMessage() { - return config.getString("flood.block-message", "&#CF6679Не флудите!"); + return getConfig().getString("flood.block-message", "&#CF6679Не флудите!"); } // ── Спам ──────────────────────────────────────────────────────────────────── public boolean isSpamEnabled() { - return config.getBoolean("spam.enabled", true); + return getConfig().getBoolean("spam.enabled", true); } public int getSpamMaxSimilarMessages() { - return config.getInt("spam.max-similar-messages", 3); + return getConfig().getInt("spam.max-similar-messages", 3); } public int getSpamSimilarityThreshold() { - return config.getInt("spam.similarity-threshold", 80); + return getConfig().getInt("spam.similarity-threshold", 80); } public String getSpamBlockMessage() { - return config.getString("spam.block-message", "&#CF6679Не отправляйте одинаковые сообщения"); + return getConfig().getString("spam.block-message", "&#CF6679Не отправляйте одинаковые сообщения"); } } diff --git a/src/main/java/com/loki/lochat/config/MessagesConfig.java b/src/main/java/com/loki/lochat/config/MessagesConfig.java index 91212ec..c2e792e 100644 --- a/src/main/java/com/loki/lochat/config/MessagesConfig.java +++ b/src/main/java/com/loki/lochat/config/MessagesConfig.java @@ -14,158 +14,163 @@ public class MessagesConfig extends BaseConfig { // ── Общие сообщения ──────────────────────────────────────────────────────── public String getNoPermission() { - return config.getString("general.no_permission", "&#CF6679Нет прав!"); + return getConfig().getString("general.no_permission", "&#CF6679Нет прав!"); } public String getPlayerOnly() { - return config.getString("general.player_only", "&#CF6679Только для игроков!"); + return getConfig().getString("general.player_only", "&#CF6679Только для игроков!"); } public String getPlayerNotFound() { - return config.getString("general.player_not_found", "&#CF6679Игрок не найден!"); + return getConfig().getString("general.player_not_found", "&#CF6679Игрок не найден!"); } // ── Кулдаун ──────────────────────────────────────────────────────────────── public String getCooldownMessage() { - return config.getString("commands.cooldown.message", "&#B798A8Подождите ẲE9{remaining} &#B798A8сек"); + return getConfig().getString("commands.cooldown.message", "&#B798A8Подождите ẲE9{remaining} &#B798A8сек"); } // ── Локальный чат ────────────────────────────────────────────────────────── public String getNobodyHeard() { - return config.getString("local_chat.nobody_heard", "⚖C9Вас никто не услышал &#B798A8— рядом нет игроков"); + return getConfig().getString("local_chat.nobody_heard", "⚖C9Вас никто не услышал &#B798A8— рядом нет игроков"); } // ── Мут ──────────────────────────────────────────────────────────────────── public String getMutedMessage() { - return config.getString("mute.muted_message", "&#CF6679Вы замучены! &#B798A8Причина: ẲE9{reason}&#B798A8. Осталось: ẲE9{time}"); + return getConfig().getString("mute.muted_message", "&#CF6679Вы замучены! &#B798A8Причина: ẲE9{reason}" + + "&#B798A8. Осталось: ẲE9{time}"); } public String getMutedPermanent() { - return config.getString("mute.muted_permanent", "&#CF6679Вы замучены навсегда! &#B798A8Причина: ẲE9{reason}"); + return getConfig().getString("mute.muted_permanent", "&#CF6679Вы замучены навсегда! &#B798A8Причина: ẲE9{reason}"); } public String getPlayerMuted() { - return config.getString("mute.player_muted", "⚖C9Игрок ẲE9{player} ⚖C9замучен на ẲE9{time}⚖C9. Причина: &#B798A8{reason}"); + return getConfig().getString("mute.player_muted", "⚖C9Игрок ẲE9{player} ⚖C9замучен на" + + "ẲE9{time}⚖C9. Причина: &#B798A8{reason}"); } public String getPlayerMutedPermanent() { - return config.getString("mute.player_muted_permanent", "⚖C9Игрок ẲE9{player} ⚖C9замучен навсегда. Причина: &#B798A8{reason}"); + return getConfig().getString("mute.player_muted_permanent", "⚖C9Игрок ẲE9{player} ⚖C9замучен" + + "навсегда. Причина: &#B798A8{reason}"); } public String getPlayerMutedSilent() { - return config.getString("mute.player_muted_silent", "&#B798A8[⚖C9ТИХИЙ МУТ&#B798A8] ẲE9{player} &#B798A8замучен на ẲE9{time}"); + return getConfig().getString("mute.player_muted_silent", "&#B798A8[⚖C9ТИХИЙ МУТ&#B798A8] ẲE9{player}" + + "&#B798A8замучен на ẲE9{time}"); } public String getPlayerUnmuted() { - return config.getString("mute.player_unmuted", "⚖C9Игрок ẲE9{player} ⚖C9размучен"); + return getConfig().getString("mute.player_unmuted", "⚖C9Игрок ẲE9{player} ⚖C9размучен"); } public String getPlayerNotMuted() { - return config.getString("mute.not_muted", "&#B798A8Игрок ẲE9{player} &#B798A8не замучен"); + return getConfig().getString("mute.not_muted", "&#B798A8Игрок ẲE9{player} &#B798A8не замучен"); } public String getPlayerNotMutedSimple() { - return config.getString("mute.player_not_muted_simple", "&#CF6679Игрок не замучен!"); + return getConfig().getString("mute.player_not_muted_simple", "&#CF6679Игрок не замучен!"); } public String getInvalidTime() { - return config.getString("mute.invalid_time", "&#CF6679Неверный формат времени!"); + return getConfig().getString("mute.invalid_time", "&#CF6679Неверный формат времени!"); } public String getAlreadyMuted() { - return config.getString("mute.already_muted", "&#CF6679Игрок уже замучен!"); + return getConfig().getString("mute.already_muted", "&#CF6679Игрок уже замучен!"); } public String getNoSilentUnmutePermission() { - return config.getString("mute.no_silent_unmute_permission", "&#CF6679Нет права на тихий размут!"); + return getConfig().getString("mute.no_silent_unmute_permission", "&#CF6679Нет права на тихий размут!"); } public String getNoSilentMutePermission() { - return config.getString("commands.mute.no_silent_permission", "&#CF6679Нет права на тихий мут"); + return getConfig().getString("commands.mute.no_silent_permission", "&#CF6679Нет права на тихий мут"); } public String getMuteUsage() { - return config.getString("commands.mute.usage", "&#B798A8Использование: ẲE9/mute <ник> [время] [-s] [причина]"); + return getConfig().getString("commands.mute.usage", "&#B798A8Использование: ẲE9/mute <ник> [время] [-s] [причина]"); } public String getMuteTimeHelp() { - return config.getString("commands.mute.time_help", "⚖C9Время: ẲE91d⚖C9, ẲE92h⚖C9, ẲE930m⚖C9, ẲE960s⚖C9, ẲE9perm"); + return getConfig().getString("commands.mute.time_help", "⚖C9Время: ẲE91d⚖C9, ẲE92h⚖C9, ẲE930m⚖C9, ẲE960s⚖C9, ẲE9perm"); } public String getMuteSilentHelp() { - return config.getString("commands.mute.silent_help", "&#B798A8-s ⚖C9— тихий мут (право ẲE9lochat.mute.silent⚖C9)"); + return getConfig().getString("commands.mute.silent_help", "&#B798A8-s ⚖C9— тихий мут (право" + + "ẲE9lochat.mute.silent⚖C9)"); } public String getDefaultMuteReason() { - return config.getString("commands.mute.default_reason", "Без причины"); + return getConfig().getString("commands.mute.default_reason", "Без причины"); } public String getDefaultMuteDuration() { - return config.getString("commands.mute.default_duration", "7d"); + return getConfig().getString("commands.mute.default_duration", "7d"); } // ── ЛС ───────────────────────────────────────────────────────────────────── public String getNoReplyTarget() { - return config.getString("private_messages.no_reply_target", "&#CF6679Нет цели для ответа"); + return getConfig().getString("private_messages.no_reply_target", "&#CF6679Нет цели для ответа"); } public String getPlayerOffline() { - return config.getString("private_messages.player_offline", "&#CF6679Игрок ẲE9{player} &#CF6679не в сети"); + return getConfig().getString("private_messages.player_offline", "&#CF6679Игрок ẲE9{player} &#CF6679не в сети"); } public String getCannotMessageSelf() { - return config.getString("private_messages.cannot_message_self", "&#CF6679Нельзя писать самому себе"); + return getConfig().getString("private_messages.cannot_message_self", "&#CF6679Нельзя писать самому себе"); } // ── Игнор ────────────────────────────────────────────────────────────────── public String getPlayerIgnored() { - return config.getString("ignore.player_ignored", "⚖C9Игрок ẲE9{player} ⚖C9добавлен в игнор"); + return getConfig().getString("ignore.player_ignored", "⚖C9Игрок ẲE9{player} ⚖C9добавлен в игнор"); } public String getPlayerUnignored() { - return config.getString("ignore.player_unignored", "⚖C9Игрок ẲE9{player} ⚖C9убран из игнора"); + return getConfig().getString("ignore.player_unignored", "⚖C9Игрок ẲE9{player} ⚖C9убран из игнора"); } public String getAlreadyIgnored() { - return config.getString("ignore.already_ignored", "&#B798A8Игрок ẲE9{player} &#B798A8уже в игноре"); + return getConfig().getString("ignore.already_ignored", "&#B798A8Игрок ẲE9{player} &#B798A8уже в игноре"); } public String getNotIgnored() { - return config.getString("ignore.not_ignored", "&#B798A8Игрок ẲE9{player} &#B798A8не в игноре"); + return getConfig().getString("ignore.not_ignored", "&#B798A8Игрок ẲE9{player} &#B798A8не в игноре"); } public String getCannotIgnoreSelf() { - return config.getString("ignore.cannot_ignore_self", "&#CF6679Нельзя игнорировать самого себя"); + return getConfig().getString("ignore.cannot_ignore_self", "&#CF6679Нельзя игнорировать самого себя"); } public String getIgnoreListEmpty() { - return config.getString("ignore.ignore_list_empty", "&#B798A8Список игнора пуст"); + return getConfig().getString("ignore.ignore_list_empty", "&#B798A8Список игнора пуст"); } public String getIgnoreListHeader() { - return config.getString("ignore.ignore_list_header", "&#B798A8Игнорируемые игроки⚖C9:"); + return getConfig().getString("ignore.ignore_list_header", "&#B798A8Игнорируемые игроки⚖C9:"); } // ── Модерация (варны / баны) ──────────────────────────────────────────────── public String getModerationDefaultReason() { - return config.getString("moderation.default_reason", "Без причины"); + return getConfig().getString("moderation.default_reason", "Без причины"); } public String getModerationDurationPermanent() { - return config.getString("moderation.duration_permanent", "навсегда"); + return getConfig().getString("moderation.duration_permanent", "навсегда"); } /** * MiniMessage + legacy &# цвета; плейсхолдеры {reason},{moderator},{duration},{player}; перевод строки \\n */ public String getBanKickMessage() { - return config.getString("moderation.ban_kick_message", defaultBanKick()); + return getConfig().getString("moderation.ban_kick_message", defaultBanKick()); } private String defaultBanKick() { @@ -178,42 +183,44 @@ public class MessagesConfig extends BaseConfig { } public String getWarnReceived() { - return config.getString("moderation.warn_received", "&#CF6679⚠ Вам выдано предупреждение! &#B798A8Причина: ẲE9{reason}"); + return getConfig().getString("moderation.warn_received", "&#CF6679⚠ Вам выдано предупреждение! &#B798A8Причина: ẲE9{reason}"); } public String getWarnStaffConfirm() { - return config.getString("moderation.warn_staff_confirm", "⚖C9Игроку ẲE9{player} ⚖C9выдан варн. &#B798A8Причина: ẲE9{reason}"); + return getConfig().getString("moderation.warn_staff_confirm", "⚖C9Игроку ẲE9{player} ⚖C9выдан" + + "варн. &#B798A8Причина: ẲE9{reason}"); } public String getSilentWarnStaff() { - return config.getString("moderation.silent_warn_staff", "&#B798A8[⚖C9ТИХИЙ ВАРН&#B798A8] ẲE9{player}⚖C9: &#B798A8{reason}"); + return getConfig().getString("moderation.silent_warn_staff", "&#B798A8[⚖C9ТИХИЙ ВАРН&#B798A8] ẲE9{player}⚖C9: &#B798A8{reason}"); } public String getBanUsage() { - return config.getString("moderation.ban_usage", "&#B798A8Использование: ẲE9/lban <ник> [время|perm] [причина]"); + return getConfig().getString("moderation.ban_usage", "&#B798A8Использование: ẲE9/lban <ник> [время|perm] [причина]"); } public String getBanConfirm() { - return config.getString("moderation.ban_confirm", "⚖C9Игрок ẲE9{player} ⚖C9забанен. &#B798A8Срок: ẲE9{duration}"); + return getConfig().getString("moderation.ban_confirm", "⚖C9Игрок ẲE9{player} ⚖C9забанен." + + "&#B798A8Срок: ẲE9{duration}"); } public String getUnbanConfirm() { - return config.getString("moderation.unban_confirm", "⚖C9Бан снят с ẲE9{player}"); + return getConfig().getString("moderation.unban_confirm", "⚖C9Бан снят с ẲE9{player}"); } public String getNotBanned() { - return config.getString("moderation.not_banned", "&#CF6679Игрок не забанен!"); + return getConfig().getString("moderation.not_banned", "&#CF6679Игрок не забанен!"); } public String getAlreadyBanned() { - return config.getString("moderation.already_banned", "&#CF6679Игрок уже забанен!"); + return getConfig().getString("moderation.already_banned", "&#CF6679Игрок уже забанен!"); } public String getWarnUsage() { - return config.getString("moderation.warn_usage", "&#B798A8Использование: ẲE9/warn <ник> [причина]"); + return getConfig().getString("moderation.warn_usage", "&#B798A8Использование: ẲE9/warn <ник> [причина]"); } public String getSilentWarnUsage() { - return config.getString("moderation.silent_warn_usage", "&#B798A8Использование: ẲE9/silentwarn <ник> [причина]"); + return getConfig().getString("moderation.silent_warn_usage", "&#B798A8Использование: ẲE9/silentwarn <ник> [причина]"); } } diff --git a/src/main/java/com/loki/lochat/config/MuteConfig.java b/src/main/java/com/loki/lochat/config/MuteConfig.java index ca86093..3abb037 100644 --- a/src/main/java/com/loki/lochat/config/MuteConfig.java +++ b/src/main/java/com/loki/lochat/config/MuteConfig.java @@ -14,48 +14,48 @@ public class MuteConfig extends BaseConfig { // ── Основные настройки ────────────────────────────────────────────────────── public boolean isEnabled() { - return config.getBoolean("enabled", true); + return getConfig().getBoolean("enabled", true); } public String getDefaultDuration() { - return config.getString("default-duration", "7d"); + return getConfig().getString("default-duration", "7d"); } public String getDefaultReason() { - return config.getString("default-reason", "Без причины"); + return getConfig().getString("default-reason", "Без причины"); } public int getMaxHistoryPerPlayer() { - return config.getInt("max-history-per-player", 50); + return getConfig().getInt("max-history-per-player", 50); } // ── Права на длительность ─────────────────────────────────────────────────── public boolean isPermissionBasedDuration() { - return config.getBoolean("permission-based-duration", true); + return getConfig().getBoolean("permission-based-duration", true); } // ── Уведомления ───────────────────────────────────────────────────────────── public boolean isNotifyOnMute() { - return config.getBoolean("notify.on-mute", true); + return getConfig().getBoolean("notify.on-mute", true); } public boolean isNotifyOnUnmute() { - return config.getBoolean("notify.on-unmute", true); + return getConfig().getBoolean("notify.on-unmute", true); } public boolean isNotifyOnExpire() { - return config.getBoolean("notify.on-expire", true); + return getConfig().getBoolean("notify.on-expire", true); } // ── Тихий мут ─────────────────────────────────────────────────────────────── public boolean isSilentMuteEnabled() { - return config.getBoolean("silent-mute.enabled", true); + return getConfig().getBoolean("silent-mute.enabled", true); } public boolean isSilentMuteLogToConsole() { - return config.getBoolean("silent-mute.log-to-console", true); + return getConfig().getBoolean("silent-mute.log-to-console", true); } } diff --git a/src/main/java/com/loki/lochat/config/SoundsConfig.java b/src/main/java/com/loki/lochat/config/SoundsConfig.java index 8ac12cd..d38a11b 100644 --- a/src/main/java/com/loki/lochat/config/SoundsConfig.java +++ b/src/main/java/com/loki/lochat/config/SoundsConfig.java @@ -14,54 +14,54 @@ public class SoundsConfig extends BaseConfig { // ── Звуки упоминаний ──────────────────────────────────────────────────────── public boolean isMentionSoundEnabled() { - return config.getBoolean("mention.enabled", true); + return getConfig().getBoolean("mention.enabled", true); } public String getMentionSound() { - return config.getString("mention.sound", "BLOCK_NOTE_BLOCK_PLING"); + return getConfig().getString("mention.sound", "BLOCK_NOTE_BLOCK_PLING"); } public float getMentionVolume() { - return (float) config.getDouble("mention.volume", 1.0); + return (float) getConfig().getDouble("mention.volume", 1.0); } public float getMentionPitch() { - return (float) config.getDouble("mention.pitch", 1.0); + return (float) getConfig().getDouble("mention.pitch", 1.0); } // ── Звуки личных сообщений ────────────────────────────────────────────────── public boolean isPmSoundEnabled() { - return config.getBoolean("pm.enabled", true); + return getConfig().getBoolean("pm.enabled", true); } public String getPmSound() { - return config.getString("pm.sound", "ENTITY_EXPERIENCE_ORB_PICKUP"); + return getConfig().getString("pm.sound", "ENTITY_EXPERIENCE_ORB_PICKUP"); } public float getPmVolume() { - return (float) config.getDouble("pm.volume", 1.0); + return (float) getConfig().getDouble("pm.volume", 1.0); } public float getPmPitch() { - return (float) config.getDouble("pm.pitch", 1.0); + return (float) getConfig().getDouble("pm.pitch", 1.0); } // ── Звуки команд ──────────────────────────────────────────────────────────── public boolean isCommandSoundEnabled() { - return config.getBoolean("command.enabled", false); + return getConfig().getBoolean("command.enabled", false); } public String getCommandSound() { - return config.getString("command.sound", "UI_BUTTON_CLICK"); + return getConfig().getString("command.sound", "UI_BUTTON_CLICK"); } public float getCommandVolume() { - return (float) config.getDouble("command.volume", 0.5); + return (float) getConfig().getDouble("command.volume", 0.5); } public float getCommandPitch() { - return (float) config.getDouble("command.pitch", 1.0); + return (float) getConfig().getDouble("command.pitch", 1.0); } } diff --git a/src/main/java/com/loki/lochat/config/core/ConfigAccessor.java b/src/main/java/com/loki/lochat/config/core/ConfigAccessor.java index b499d4b..1ca1a6a 100644 --- a/src/main/java/com/loki/lochat/config/core/ConfigAccessor.java +++ b/src/main/java/com/loki/lochat/config/core/ConfigAccessor.java @@ -173,7 +173,8 @@ public class ConfigAccessor { } public String getDeathPlayerKillFormat() { - return config.getString("messages.death.player_kill", "&#CF6679☠ &#B798A8{player} ẲE9был убит игроком &#B798A8{killer} ⚖C9({weapon})"); + return config.getString("messages.death.player_kill", "&#CF6679☠ &#B798A8{player} ẲE9был убит" + + "игроком &#B798A8{killer} ⚖C9({weapon})"); } public String getDeathMobKillFormat() { diff --git a/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java b/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java index 3f2355a..b5b29fd 100644 --- a/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java +++ b/src/main/java/com/loki/lochat/core/filter/AdvancedMessageFilter.java @@ -1,6 +1,10 @@ package com.loki.lochat.core.filter; -import com.loki.lochat.core.filter.filters.*; +import com.loki.lochat.core.filter.filters.CharacterFilter; +import com.loki.lochat.core.filter.filters.FloodFilter; +import com.loki.lochat.core.filter.filters.SpamFilter; +import com.loki.lochat.core.filter.filters.SwearFilter; +import com.loki.lochat.core.filter.filters.UrlFilter; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; diff --git a/src/main/java/com/loki/lochat/core/filter/filters/SwearFilter.java b/src/main/java/com/loki/lochat/core/filter/filters/SwearFilter.java index 79caea5..bd806f6 100644 --- a/src/main/java/com/loki/lochat/core/filter/filters/SwearFilter.java +++ b/src/main/java/com/loki/lochat/core/filter/filters/SwearFilter.java @@ -10,7 +10,9 @@ import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import java.util.*; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.regex.Pattern; public class SwearFilter { diff --git a/src/main/java/com/loki/lochat/core/registry/ServiceRegistry.java b/src/main/java/com/loki/lochat/core/registry/ServiceRegistry.java index 0ad02c4..e73f906 100644 --- a/src/main/java/com/loki/lochat/core/registry/ServiceRegistry.java +++ b/src/main/java/com/loki/lochat/core/registry/ServiceRegistry.java @@ -1,10 +1,22 @@ package com.loki.lochat.core.registry; -import com.loki.lochat.api.service.*; +import com.loki.lochat.api.service.ChatService; +import com.loki.lochat.api.service.MentionService; +import com.loki.lochat.api.service.MessageService; +import com.loki.lochat.api.service.MessagingService; +import com.loki.lochat.api.service.MuteService; +import com.loki.lochat.api.service.NickService; +import com.loki.lochat.api.service.PlayerService; +import com.loki.lochat.api.service.PunishmentService; import com.loki.lochat.config.ConfigManager; import com.loki.lochat.config.MessageConfig; import com.loki.lochat.core.factory.ServiceFactory; -import com.loki.lochat.core.service.*; +import com.loki.lochat.core.service.ChatServiceImpl; +import com.loki.lochat.core.service.MentionServiceImpl; +import com.loki.lochat.core.service.MessageServiceImpl; +import com.loki.lochat.core.service.NickServiceImpl; +import com.loki.lochat.core.service.PlayerServiceImpl; +import com.loki.lochat.core.service.PunishmentServiceImpl; import org.bukkit.plugin.java.JavaPlugin; diff --git a/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java b/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java index 9bcd096..ba6a9c1 100644 --- a/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java +++ b/src/main/java/com/loki/lochat/core/service/MuteServiceImpl.java @@ -11,7 +11,9 @@ import com.loki.lochat.utils.format.TimeFormatter; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.UUID; /** * Сервис мутов с использованием Strategy pattern diff --git a/src/main/java/com/loki/lochat/core/service/PunishmentServiceImpl.java b/src/main/java/com/loki/lochat/core/service/PunishmentServiceImpl.java index 0931bb2..168fae1 100644 --- a/src/main/java/com/loki/lochat/core/service/PunishmentServiceImpl.java +++ b/src/main/java/com/loki/lochat/core/service/PunishmentServiceImpl.java @@ -15,9 +15,21 @@ import net.kyori.adventure.text.Component; import org.bukkit.plugin.java.JavaPlugin; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.Writer; import java.lang.reflect.Type; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** @@ -137,11 +149,11 @@ public class PunishmentServiceImpl implements PunishmentService { for (Map.Entry> e : warns.entrySet()) { List list = e.getValue(); synchronized (list) { - snap.warns.put(e.getKey().toString(), new ArrayList<>(list)); + snap.getWarns().put(e.getKey().toString(), new ArrayList<>(list)); } } for (Map.Entry e : bans.entrySet()) { - snap.bans.put(e.getKey().toString(), e.getValue()); + snap.getBans().put(e.getKey().toString(), e.getValue()); } try (Writer w = new OutputStreamWriter(new FileOutputStream(dataFile), java.nio.charset.StandardCharsets.UTF_8)) { gson.toJson(snap, w); @@ -172,16 +184,16 @@ public class PunishmentServiceImpl implements PunishmentService { if (snap == null) { return; } - if (snap.warns != null) { - for (Map.Entry> e : snap.warns.entrySet()) { + if (snap.getWarns() != null) { + for (Map.Entry> e : snap.getWarns().entrySet()) { try { warns.put(UUID.fromString(e.getKey()), Collections.synchronizedList(new ArrayList<>(e.getValue()))); } catch (IllegalArgumentException ignored) { } } } - if (snap.bans != null) { - for (Map.Entry e : snap.bans.entrySet()) { + if (snap.getBans() != null) { + for (Map.Entry e : snap.getBans().entrySet()) { try { UUID id = UUID.fromString(e.getKey()); BanRecord br = e.getValue(); @@ -202,7 +214,15 @@ public class PunishmentServiceImpl implements PunishmentService { } private static class PunishmentSnapshot { - Map> warns = new HashMap<>(); - Map bans = new HashMap<>(); + private Map> warns = new HashMap<>(); + private Map bans = new HashMap<>(); + + Map> getWarns() { + return warns; + } + + Map getBans() { + return bans; + } } } diff --git a/src/main/java/com/loki/lochat/core/service/messaging/IgnoreService.java b/src/main/java/com/loki/lochat/core/service/messaging/IgnoreService.java index 7182438..bff93f4 100644 --- a/src/main/java/com/loki/lochat/core/service/messaging/IgnoreService.java +++ b/src/main/java/com/loki/lochat/core/service/messaging/IgnoreService.java @@ -7,7 +7,12 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** diff --git a/src/main/java/com/loki/lochat/core/service/mute/MuteDataStorage.java b/src/main/java/com/loki/lochat/core/service/mute/MuteDataStorage.java index f5b7b7e..f6852b5 100644 --- a/src/main/java/com/loki/lochat/core/service/mute/MuteDataStorage.java +++ b/src/main/java/com/loki/lochat/core/service/mute/MuteDataStorage.java @@ -8,9 +8,16 @@ import com.loki.lochat.utils.platform.FoliaUtil; import org.bukkit.plugin.java.JavaPlugin; -import java.io.*; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; import java.lang.reflect.Type; -import java.util.*; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; /** diff --git a/src/main/java/com/loki/lochat/core/service/mute/MuteHistoryManager.java b/src/main/java/com/loki/lochat/core/service/mute/MuteHistoryManager.java index 43cad9a..e8af017 100644 --- a/src/main/java/com/loki/lochat/core/service/mute/MuteHistoryManager.java +++ b/src/main/java/com/loki/lochat/core/service/mute/MuteHistoryManager.java @@ -11,7 +11,11 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Type; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; public class MuteHistoryManager { @@ -33,7 +37,6 @@ public class MuteHistoryManager { reason, mutedBy, System.currentTimeMillis(), - false, null, 0 )); diff --git a/src/main/java/com/loki/lochat/data/model/MuteData.java b/src/main/java/com/loki/lochat/data/model/MuteData.java index 88ffb36..cc57146 100644 --- a/src/main/java/com/loki/lochat/data/model/MuteData.java +++ b/src/main/java/com/loki/lochat/data/model/MuteData.java @@ -78,14 +78,14 @@ public class MuteData { } // For JSON deserialization public MuteHistoryEntry(String playerName, long duration, String reason, - String mutedBy, long mutedAt, boolean unmuted, + String mutedBy, long mutedAt, String unmutedBy, long unmutedAt) { this.playerName = playerName; this.duration = duration; this.reason = reason; this.mutedBy = mutedBy; this.mutedAt = mutedAt; - this.unmuted = unmuted; + this.unmuted = unmutedBy != null; this.unmutedBy = unmutedBy; this.unmutedAt = unmutedAt; } diff --git a/src/main/java/com/loki/lochat/gradient/commands/GradientColorCommand.java b/src/main/java/com/loki/lochat/gradient/commands/GradientColorCommand.java index 6ac74b4..9fa418f 100644 --- a/src/main/java/com/loki/lochat/gradient/commands/GradientColorCommand.java +++ b/src/main/java/com/loki/lochat/gradient/commands/GradientColorCommand.java @@ -2,7 +2,12 @@ package com.loki.lochat.gradient.commands; import com.loki.lochat.config.RatConfig; import com.loki.lochat.gradient.GradientModule; -import com.loki.lochat.gradient.commands.handlers.color.*; +import com.loki.lochat.gradient.commands.handlers.color.ColorCopyHandler; +import com.loki.lochat.gradient.commands.handlers.color.ColorOffHandler; +import com.loki.lochat.gradient.commands.handlers.color.ColorOnHandler; +import com.loki.lochat.gradient.commands.handlers.color.ColorResetHandler; +import com.loki.lochat.gradient.commands.handlers.color.ColorSetHandler; +import com.loki.lochat.gradient.commands.handlers.color.SubCommandHandler; import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -13,7 +18,11 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Команда /color для установки градиента ника diff --git a/src/main/java/com/loki/lochat/gradient/commands/GradientPrefixCommand.java b/src/main/java/com/loki/lochat/gradient/commands/GradientPrefixCommand.java index c216971..ea2b1e8 100644 --- a/src/main/java/com/loki/lochat/gradient/commands/GradientPrefixCommand.java +++ b/src/main/java/com/loki/lochat/gradient/commands/GradientPrefixCommand.java @@ -1,7 +1,11 @@ package com.loki.lochat.gradient.commands; import com.loki.lochat.gradient.GradientModule; -import com.loki.lochat.gradient.commands.handlers.prefix.*; +import com.loki.lochat.gradient.commands.handlers.prefix.PrefixOffHandler; +import com.loki.lochat.gradient.commands.handlers.prefix.PrefixOnHandler; +import com.loki.lochat.gradient.commands.handlers.prefix.PrefixResetHandler; +import com.loki.lochat.gradient.commands.handlers.prefix.PrefixSetHandler; +import com.loki.lochat.gradient.commands.handlers.prefix.PrefixSubCommandHandler; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -11,7 +15,10 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Команда /prefix для установки кастомного префикса diff --git a/src/main/java/com/loki/lochat/gradient/data/GradientDataManager.java b/src/main/java/com/loki/lochat/gradient/data/GradientDataManager.java index bea0b8a..0ae28ec 100644 --- a/src/main/java/com/loki/lochat/gradient/data/GradientDataManager.java +++ b/src/main/java/com/loki/lochat/gradient/data/GradientDataManager.java @@ -8,7 +8,12 @@ import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; -import java.sql.*; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.List; import java.util.Map; import java.util.UUID; diff --git a/src/main/java/com/loki/lochat/gradient/util/GradientUtil.java b/src/main/java/com/loki/lochat/gradient/util/GradientUtil.java index 47b44cf..c0a7dc1 100644 --- a/src/main/java/com/loki/lochat/gradient/util/GradientUtil.java +++ b/src/main/java/com/loki/lochat/gradient/util/GradientUtil.java @@ -1,6 +1,6 @@ package com.loki.lochat.gradient.util; -import java.awt.*; +import java.awt.Color; import java.util.List; import java.util.regex.Pattern; diff --git a/src/main/java/com/loki/lochat/integrations/PlaceholderAPIHook.java b/src/main/java/com/loki/lochat/integrations/PlaceholderAPIHook.java index 930a241..72a671d 100644 --- a/src/main/java/com/loki/lochat/integrations/PlaceholderAPIHook.java +++ b/src/main/java/com/loki/lochat/integrations/PlaceholderAPIHook.java @@ -55,71 +55,67 @@ public class PlaceholderAPIHook extends PlaceholderExpansion { } UUID uuid = player.getUniqueId(); - GradientModule gradient = plugin.getGradientModule(); return switch (params.toLowerCase()) { case "ignored_count" -> String.valueOf(messagingService.getIgnoredCount(uuid)); case "global_enabled" -> String.valueOf(!chatService.isGlobalChatDisabled(uuid)); - case "last_pm" -> { - Optional lastOpt = messagingService.getLastConversation(uuid); - if (lastOpt.isEmpty()) { - yield ""; - } - var lastPlayer = Bukkit.getOfflinePlayer(lastOpt.get()); - yield lastPlayer.getName() != null ? lastPlayer.getName() : ""; - } + case "last_pm" -> resolveLastPm(player, uuid); case "spy_enabled" -> String.valueOf(messagingService.isSpying(uuid)); + case "gradient_full", "full" -> resolveGradient(player, GradientQuery.FULL); + case "gradient_name", "name" -> resolveGradient(player, GradientQuery.NAME); + case "gradient_prefix", "prefix" -> resolveGradient(player, GradientQuery.PREFIX); + case "lp_prefix" -> resolveGradient(player, GradientQuery.LP_PREFIX); + default -> null; + }; + } - // Gradient placeholders (совместимость с LoPreff) - // Используем TAB формат §x§R§R§G§G§B§B для совместимости с TAB плагином - case "gradient_full", "full" -> { - Player onlinePlayer = player.getPlayer(); - if (onlinePlayer == null) { - yield player.getName() != null ? player.getName() : ""; - } + private enum GradientQuery { FULL, NAME, PREFIX, LP_PREFIX } - // Если gradient модуль выключен — берём только LuckPerms префикс + ник + private String resolveGradient(OfflinePlayer player, GradientQuery query) { + GradientModule gradient = plugin.getGradientModule(); + Player onlinePlayer = player.getPlayer(); + + if (onlinePlayer == null) { + return switch (query) { + case FULL, NAME -> player.getName() != null ? player.getName() : ""; + case PREFIX, LP_PREFIX -> ""; + }; + } + + return switch (query) { + case FULL -> { if (gradient == null || !gradient.isEnabled()) { yield player.getName() != null ? player.getName() : ""; } - - // Используем TAB формат для плейсхолдеров yield gradient.getFormattedNameForTab(onlinePlayer); } - case "gradient_name", "name" -> { - Player onlinePlayer = player.getPlayer(); - if (onlinePlayer == null) { - yield player.getName() != null ? player.getName() : ""; - } - + case NAME -> { if (gradient == null || !gradient.isEnabled()) { yield player.getName(); } yield gradient.getGradientNick(onlinePlayer); } - case "gradient_prefix", "prefix" -> { - Player onlinePlayer = player.getPlayer(); - if (onlinePlayer == null) { - yield ""; - } - + case PREFIX -> { if (gradient == null || !gradient.isEnabled()) { yield ""; } yield gradient.getPrefix(onlinePlayer); } - case "lp_prefix" -> { - Player onlinePlayer = player.getPlayer(); - if (onlinePlayer == null) { - yield ""; - } - + case LP_PREFIX -> { if (gradient == null || !gradient.isEnabled()) { yield ""; } yield gradient.getLuckPermsPrefix(onlinePlayer); } - default -> null; }; } + + private String resolveLastPm(OfflinePlayer player, UUID uuid) { + Optional lastOpt = messagingService.getLastConversation(uuid); + if (lastOpt.isEmpty()) { + return ""; + } + var lastPlayer = Bukkit.getOfflinePlayer(lastOpt.get()); + return lastPlayer.getName() != null ? lastPlayer.getName() : ""; + } } diff --git a/src/main/java/com/loki/lochat/listener/ChatEventListener.java b/src/main/java/com/loki/lochat/listener/ChatEventListener.java index 5167893..6c0834c 100644 --- a/src/main/java/com/loki/lochat/listener/ChatEventListener.java +++ b/src/main/java/com/loki/lochat/listener/ChatEventListener.java @@ -150,9 +150,7 @@ public class ChatEventListener implements Listener { private void recordStatistics(LoChat loChat, Player sender, boolean isGlobal) { com.loki.lochat.api.service.PlayerService playerService = loChat.getServiceRegistry().get(com.loki.lochat.api.service.PlayerService.class); - if (playerService instanceof com.loki.lochat.core.service.PlayerServiceImpl impl) { - impl.recordMessage(sender.getUniqueId(), isGlobal ? "global" : "local"); - } + playerService.recordMessage(sender.getUniqueId(), isGlobal ? "global" : "local"); } private record ChatMode(boolean isGlobal, String message) { diff --git a/src/main/java/com/loki/lochat/managers/AutoMessageManager.java b/src/main/java/com/loki/lochat/managers/AutoMessageManager.java index 53a1a94..dc51733 100644 --- a/src/main/java/com/loki/lochat/managers/AutoMessageManager.java +++ b/src/main/java/com/loki/lochat/managers/AutoMessageManager.java @@ -11,7 +11,11 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.scheduler.BukkitTask; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; import java.util.concurrent.atomic.AtomicInteger; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; diff --git a/src/main/java/com/loki/lochat/renderer/EnhancedChatRenderer.java b/src/main/java/com/loki/lochat/renderer/EnhancedChatRenderer.java index 437d5d4..513cd55 100644 --- a/src/main/java/com/loki/lochat/renderer/EnhancedChatRenderer.java +++ b/src/main/java/com/loki/lochat/renderer/EnhancedChatRenderer.java @@ -1,6 +1,8 @@ package com.loki.lochat.renderer; -import com.loki.lochat.renderer.components.*; +import com.loki.lochat.renderer.components.EmojiComponent; +import com.loki.lochat.renderer.components.GradientBuilder; +import com.loki.lochat.renderer.components.UrlProcessor; import com.loki.lochat.utils.format.TextFormatter; import com.loki.lochat.utils.player.MentionHandler; @@ -15,6 +17,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.List; +import java.util.Map; import io.papermc.paper.chat.ChatRenderer; @@ -63,12 +66,18 @@ public class EnhancedChatRenderer implements ChatRenderer { Component playerSuffix = buildPlayerSuffix(source); Component player = buildPlayerComponent(source); - return buildFormattedMessage(format, emoji, prefix, separator, playerPrefix, playerSuffix, player, processed); + return buildFormattedMessage(format, Map.of( + "emoji", emoji, + "prefix", prefix, + "separator", separator, + "player_prefix", playerPrefix, + "player", player, + "player_suffix", playerSuffix, + "message", processed + )); } - private Component buildFormattedMessage(String format, Component emoji, Component prefix, - Component separator, Component playerPrefix, Component playerSuffix, - Component player, Component message) { + private Component buildFormattedMessage(String format, Map parts) { Component result = Component.empty(); java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\{([^}]+)\\}"); java.util.regex.Matcher matcher = pattern.matcher(format); @@ -81,16 +90,7 @@ public class EnhancedChatRenderer implements ChatRenderer { } String placeholder = matcher.group(1); - switch (placeholder) { - case "emoji" -> result = result.append(emoji); - case "prefix" -> result = result.append(prefix); - case "separator" -> result = result.append(separator); - case "player_prefix" -> result = result.append(playerPrefix); - case "player" -> result = result.append(player); - case "player_suffix" -> result = result.append(playerSuffix); - case "message" -> result = result.append(message); - default -> result = result.append(Component.text("{" + placeholder + "}")); - } + result = result.append(parts.getOrDefault(placeholder, Component.text("{" + placeholder + "}"))); lastEnd = matcher.end(); } diff --git a/src/main/java/com/loki/lochat/utils/platform/AdventureManager.java b/src/main/java/com/loki/lochat/utils/platform/AdventureManager.java index 1910f23..f6ade84 100644 --- a/src/main/java/com/loki/lochat/utils/platform/AdventureManager.java +++ b/src/main/java/com/loki/lochat/utils/platform/AdventureManager.java @@ -70,7 +70,9 @@ public class AdventureManager { try { // Используем Adventure API Object playerAudience = audiences.getClass().getMethod("player", Player.class).invoke(audiences, player); - playerAudience.getClass().getMethod("sendMessage", Class.forName("net.kyori.adventure.text.Component")).invoke(playerAudience, message); + playerAudience.getClass() + .getMethod("sendMessage", Class.forName("net.kyori.adventure.text.Component")) + .invoke(playerAudience, message); return; } catch (Exception e) { // Fallback на legacy diff --git a/src/main/java/com/loki/lochat/utils/platform/FoliaUtil.java b/src/main/java/com/loki/lochat/utils/platform/FoliaUtil.java index 08027fb..35925f8 100644 --- a/src/main/java/com/loki/lochat/utils/platform/FoliaUtil.java +++ b/src/main/java/com/loki/lochat/utils/platform/FoliaUtil.java @@ -55,7 +55,10 @@ public class FoliaUtil { // В Folia используем AsyncScheduler для глобальных задач long delayMs = delayTicks * 50; // 1 тик = 50мс long periodMs = periodTicks * 50; - Bukkit.getAsyncScheduler().runAtFixedRate(plugin, scheduledTask -> task.run(), delayMs, periodMs, java.util.concurrent.TimeUnit.MILLISECONDS); + Bukkit.getAsyncScheduler().runAtFixedRate( + plugin, scheduledTask -> task.run(), delayMs, periodMs, + java.util.concurrent.TimeUnit.MILLISECONDS + ); } else { // В Paper/Spigot используем обычный scheduler Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, task, delayTicks, periodTicks);