From 0b4a253dcbc464ea3a4141d6bb7148626ba57841 Mon Sep 17 00:00:00 2001 From: itqop Date: Mon, 21 Oct 2024 11:25:52 +0300 Subject: [PATCH] Add 0.1.1 version --- gradle.properties | 2 +- src/main/java/org/itqop/chatit/Chatit.java | 9 +++---- .../itqop/chatit/commands/ChatitCommand.java | 2 +- .../chatit/handlers/ChatEventHandler.java | 27 +++++++------------ .../itqop/chatit/utils/ProfanityChecker.java | 20 +++----------- 5 files changed, 19 insertions(+), 41 deletions(-) diff --git a/gradle.properties b/gradle.properties index cbe4a4e..ba4bb7f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,7 +38,7 @@ mod_name=ChatIT # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=0.1-BETA +mod_version=0.1.1-BETA # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/org/itqop/chatit/Chatit.java b/src/main/java/org/itqop/chatit/Chatit.java index 5333259..3cc4a0a 100644 --- a/src/main/java/org/itqop/chatit/Chatit.java +++ b/src/main/java/org/itqop/chatit/Chatit.java @@ -20,18 +20,15 @@ public class Chatit { private static final Logger LOGGER = LogUtils.getLogger(); public Chatit() { - // Регистрация обработчиков событий - MinecraftForge.EVENT_BUS.register(this); // Для событий сервера - MinecraftForge.EVENT_BUS.register(ChatEventHandler.class); // Обработчик чата - MinecraftForge.EVENT_BUS.register(ChatitCommand.class); // Команда + MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(ChatEventHandler.class); + MinecraftForge.EVENT_BUS.register(ChatitCommand.class); - // Регистрация конфигурации ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_CONFIG); } @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { - // Загрузка конфигурации игроков при старте сервера PlayerConfigManager.loadConfig(); LOGGER.info("ChatIT started and configuration loaded."); } diff --git a/src/main/java/org/itqop/chatit/commands/ChatitCommand.java b/src/main/java/org/itqop/chatit/commands/ChatitCommand.java index 3da666a..4f65585 100644 --- a/src/main/java/org/itqop/chatit/commands/ChatitCommand.java +++ b/src/main/java/org/itqop/chatit/commands/ChatitCommand.java @@ -19,7 +19,7 @@ public class ChatitCommand { dispatcher.register(Commands.literal("chatit") .then(Commands.literal("adult") - .requires(source -> source.hasPermission(2)) // Уровень разрешения 2 (операторы) + .requires(source -> source.hasPermission(2)) .executes(context -> { ServerPlayer player = context.getSource().getPlayerOrException(); PlayerConfigManager.toggleAdultContent(player); diff --git a/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java b/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java index a990bc7..04230ca 100644 --- a/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java +++ b/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java @@ -22,43 +22,37 @@ public class ChatEventHandler { MinecraftServer server = sender.getServer(); String originalMessage = event.getMessage().getString(); - // Отменяем стандартную отправку сообщения event.setCanceled(true); - // Убеждаемся, что отправитель есть в настройках PlayerConfigManager.ensurePlayerExists(sender); - // Проверка на наличие '!' для глобального сообщения boolean isGlobal = originalMessage.startsWith("!"); String message = isGlobal ? originalMessage.substring(1) : originalMessage; - // Создаем заготовку сообщения для отправки после проверки MutableComponent chatComponent = createChatMessage(sender, message, isGlobal); - // Запускаем асинхронную проверку сообщения CompletableFuture future = ProfanityChecker.checkMessageAsync(message); future.thenAccept(profanityScore -> { if (server != null) { server.execute(() -> { - // Обработка результата проверки if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(sender)) { - // Отправляем сообщение только отправителю с префиксом [ERROR] MutableComponent errorComponent = createErrorMessage(sender, message); sender.sendSystemMessage(errorComponent); } else { for (ServerPlayer receiver : server.getPlayerList().getPlayers()) { - // Убеждаемся, что получатель есть в настройках PlayerConfigManager.ensurePlayerExists(receiver); - // Если сообщение содержит маты и у получателя параметр adult OFF if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(receiver)) { - continue; // Пропускаем отправку этому игроку + continue; } - // Проверяем условия для отправки сообщения - if (isGlobal || (receiver.level() == sender.level() && receiver.position().distanceTo(sender.position()) <= 50)) { - receiver.sendSystemMessage(chatComponent); + try (var senderLevel = sender.level(); var receiverLevel = receiver.level()) { + if (isGlobal || (receiverLevel == senderLevel && receiver.position().distanceTo(sender.position()) <= 50)) { + receiver.sendSystemMessage(chatComponent); + } + } catch (Exception e) { + e.printStackTrace(); } } } @@ -68,7 +62,6 @@ public class ChatEventHandler { ex.printStackTrace(); if (server != null) { server.execute(() -> { - // В случае ошибки отправляем сообщение только отправителю с префиксом [ERROR] MutableComponent errorComponent = createErrorMessage(sender, message); sender.sendSystemMessage(errorComponent); }); @@ -80,7 +73,7 @@ public class ChatEventHandler { private static MutableComponent createErrorMessage(ServerPlayer player, String message) { MutableComponent openBracket = Component.literal("["); MutableComponent errorText = Component.literal("ERROR") - .withStyle(ChatFormatting.RED, ChatFormatting.BOLD); + .withStyle(ChatFormatting.RED); MutableComponent closeBracket = Component.literal("] "); MutableComponent prefixComponent = openBracket.append(errorText).append(closeBracket); @@ -98,10 +91,10 @@ public class ChatEventHandler { if (isGlobal) { letterComponent = Component.literal("G") - .withStyle(ChatFormatting.BOLD, ChatFormatting.GREEN); + .withStyle(ChatFormatting.GREEN); } else { letterComponent = Component.literal("L") - .withStyle(ChatFormatting.BOLD, ChatFormatting.YELLOW); + .withStyle(ChatFormatting.YELLOW); } MutableComponent prefixComponent = openBracket.append(letterComponent).append(closeBracket); diff --git a/src/main/java/org/itqop/chatit/utils/ProfanityChecker.java b/src/main/java/org/itqop/chatit/utils/ProfanityChecker.java index fea9cd2..6588798 100644 --- a/src/main/java/org/itqop/chatit/utils/ProfanityChecker.java +++ b/src/main/java/org/itqop/chatit/utils/ProfanityChecker.java @@ -27,21 +27,17 @@ public class ProfanityChecker { boolean useRegex = Config.useRegex; if (apiUrl == null || apiUrl.isEmpty()) { - // Если URL API не задан if (useRegex) { - // Используем регулярное выражение для проверки мата if (containsProfanity(message)) { - return 1.0; // Мат найден + return 1.0; } else { - return 0.0; // Мат не найден + return 0.0; } } else { - // Если regex=false, возвращаем 0.0 (нет мата) return 0.0; } } - // Создаем JSON-запрос String jsonRequest = GSON.toJson(new MessageRequest(message)); HttpRequest request = HttpRequest.newBuilder() @@ -50,23 +46,18 @@ public class ProfanityChecker { .POST(HttpRequest.BodyPublishers.ofString(jsonRequest, StandardCharsets.UTF_8)) .build(); - // Отправляем запрос и получаем ответ HttpResponse response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString()); - // Парсим ответ String responseBody = response.body(); - double result = Double.parseDouble(responseBody); - return result; + return Double.parseDouble(responseBody); } catch (Exception e) { e.printStackTrace(); if (Config.useRegex) { - // Если произошла ошибка и regex=true, используем регулярное выражение if (containsProfanity(message)) { - return 1.0; // Мат найден + return 1.0; } } - // В случае ошибки и regex=false считаем, что мата нет return 0.0; } }); @@ -76,12 +67,9 @@ public class ProfanityChecker { return PROFANITY_PATTERN.matcher(message).find(); } - // Класс для сериализации JSON-запроса private static class MessageRequest { - private final String text; public MessageRequest(String text) { - this.text = text; } } }