diff --git a/CHANGELOG.md b/CHANGELOG.md index 350f8fe..c5bb84d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,37 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/). +## [0.1.4] - 2024-10-28 + +### Added + +- **Console Error Logging**: + - Implemented comprehensive error logging to the console. + - Facilitates easier debugging and monitoring by providing detailed error messages during runtime. + +- **Configurable Message Text**: + - Introduced the ability to customize message texts via configuration. + - Users can now modify the default messages to better fit their server's communication style. + +### Fixed + +- **Tick Timeout Error**: + - Resolved the tick timeout issue that caused the server to lag or crash under high load. + - Enhanced the stability and performance of the mod by ensuring smoother execution of tick cycles. + +### Changed + +- **Renamed Command Class**: + - Renamed the command class from `ChatitCommand.java` to `ChatITCommand.java`. + - Improves consistency and readability within the codebase, aligning with naming conventions. + +### Summary of Changes + +- **Enhanced Debugging**: With the addition of console error logs, developers can now trace and fix issues more efficiently. +- **Increased Configurability**: Allowing message texts to be configured provides greater flexibility for server administrators. +- **Improved Stability**: Fixing the tick timeout error ensures that the mod runs more reliably, even under heavy usage. +- **Codebase Refinement**: Renaming the command class contributes to a more organized and maintainable code structure. + ## [0.1.3] - 2024-10-21 ### Added diff --git a/CHANGELOG.ru.md b/CHANGELOG.ru.md index ceaafe6..1823ab6 100644 --- a/CHANGELOG.ru.md +++ b/CHANGELOG.ru.md @@ -4,6 +4,37 @@ Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/), и этот проект придерживается [Семантического Версионирования](https://semver.org/lang/ru/). +## [0.1.4] - 2024-10-28 + +### Добавлено + +- **Логирование ошибок в консоль**: + - Реализовано комплексное логирование ошибок в консоль. + - Облегчает отладку и мониторинг, предоставляя подробные сообщения об ошибках во время выполнения. + +- **Настраиваемый текст сообщений**: + - Введена возможность настройки текста сообщений через конфигурацию. + - Пользователи теперь могут изменять стандартные сообщения, чтобы они лучше соответствовали стилю общения сервера. + +### Исправлено + +- **Ошибка таймаута тика**: + - Исправлена проблема с таймаутом тика, которая вызывала зависание или сбой сервера при высокой нагрузке. + - Повышена стабильность и производительность мода за счет обеспечения более плавного выполнения циклов тиков. + +### Изменено + +- **Переименование класса команды**: + - Переименован класс команды с `ChatitCommand.java` на `ChatITCommand.java`. + - Улучшает согласованность и читаемость в кодовой базе, соответствуя стандартам именования. + +### Сводка изменений + +- **Улучшенная отладка**: С добавлением логирования ошибок в консоль разработчики теперь могут более эффективно отслеживать и исправлять проблемы. +- **Повышенная настраиваемость**: Возможность настройки текста сообщений предоставляет большую гибкость для администраторов серверов. +- **Повышенная стабильность**: Исправление ошибки таймаута тика обеспечивает более надежную работу мода, даже при высокой нагрузке. +- **Улучшение кодовой базы**: Переименование класса команды способствует более организованной и поддерживаемой структуре кода. + ## [0.1.3] - 2024-10-21 ### Добавлено diff --git a/gradle.properties b/gradle.properties index 5debbd5..35ae6d4 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.3-BETA +mod_version=0.1.4-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/handlers/ChatEventHandler.java b/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java index c5783ba..ff90311 100644 --- a/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java +++ b/src/main/java/org/itqop/chatit/handlers/ChatEventHandler.java @@ -42,22 +42,28 @@ public class ChatEventHandler { future.thenAccept(profanityScore -> { if (server != null) { server.execute(() -> { - double threshold = Config.profanityThreshold; // Получаем порог из конфигурации + double threshold = Config.profanityThreshold; if (profanityScore > threshold && !PlayerConfigManager.hasAdultContentEnabled(sender)) { - MutableComponent errorComponent = createErrorMessage(sender, message); - sender.sendSystemMessage(errorComponent); + MutableComponent adultComponent = createAdultMessage(sender, message); + sender.sendSystemMessage(adultComponent); } else { + boolean messageSent = false; for (ServerPlayer receiver : server.getPlayerList().getPlayers()) { PlayerConfigManager.ensurePlayerExists(receiver); if (profanityScore > threshold && !PlayerConfigManager.hasAdultContentEnabled(receiver)) { continue; } - if (isGlobal || (receiver.getCommandSenderWorld() == sender.getCommandSenderWorld() && receiver.position().distanceTo(sender.position()) <= 50)) { + if (((receiver.getCommandSenderWorld() == sender.getCommandSenderWorld() && receiver.position().distanceTo(sender.position()) <= 50) && (sender != receiver)) || isGlobal) { receiver.sendSystemMessage(chatComponent); + messageSent = true; } } + if (!messageSent) { + MutableComponent errorComponent = createErrorMessage(sender, Config.messageLocal); + sender.sendSystemMessage(errorComponent); + } } }); } @@ -81,10 +87,22 @@ public class ChatEventHandler { MutableComponent prefixComponent = openBracket.append(errorText).append(closeBracket); - Component playerName = Component.literal(player.getName().getString()); - Component messageComponent = Component.literal(": " + message); + Component messageComponent = Component.literal(": " + message).withStyle(ChatFormatting.RED);; - return prefixComponent.append(playerName).append(messageComponent); + return prefixComponent.append(messageComponent); + } + + private static MutableComponent createAdultMessage(ServerPlayer player, String message) { + MutableComponent openBracket = Component.literal("["); + MutableComponent errorText = Component.literal("ADULT") + .withStyle(ChatFormatting.RED); + MutableComponent closeBracket = Component.literal("] "); + + MutableComponent prefixComponent = openBracket.append(errorText).append(closeBracket); + + Component errorMessage = Component.literal(Config.messageAdult).withStyle(ChatFormatting.RED); + + return prefixComponent.append(errorMessage); } private static MutableComponent createChatMessage(ServerPlayer player, String message, boolean isGlobal) { diff --git a/src/main/java/org/itqop/chatit/utils/Config.java b/src/main/java/org/itqop/chatit/utils/Config.java index d18c13e..c579766 100644 --- a/src/main/java/org/itqop/chatit/utils/Config.java +++ b/src/main/java/org/itqop/chatit/utils/Config.java @@ -16,8 +16,10 @@ public class Config { public static ForgeConfigSpec.ConfigValue HOST_API; public static ForgeConfigSpec.BooleanValue DEFAULT_ADULT; public static ForgeConfigSpec.BooleanValue USE_REGEX; - public static ForgeConfigSpec.DoubleValue PROFANITY_THRESHOLD; // Новое - public static ForgeConfigSpec.ConfigValue PROFANITY_REGEX; // Новое + public static ForgeConfigSpec.DoubleValue PROFANITY_THRESHOLD; + public static ForgeConfigSpec.ConfigValue PROFANITY_REGEX; + public static ForgeConfigSpec.ConfigValue MESSAGE_ADULT; + public static ForgeConfigSpec.ConfigValue MESSAGE_LOCAL; static { BUILDER.comment("Настройки ChatIT"); @@ -42,6 +44,14 @@ public class Config { .comment("Регулярное выражение для проверки мата") .define("profanity_regex", "(?iu)\\b(?:(?:(?:у|[нз]а|(?:хитро|не)?вз?[ыьъ]|с[ьъ]|(?:и|ра)[зс]ъ?|(?:.\\B)+?[оаеи-])-?)?(?:[её](?:б(?!о[рй]|рач)|п[уа](?:ц|тс))|и[пб][ае][тцд][ьъ]).*?|(?:(?:н[иеа]|(?:ра|и)[зс]|[зд]?[ао](?:т|дн[оа])?|с(?:м[еи])?|а[пб]ч|в[ъы]?|пр[еи])-?)?ху(?:[яйиеёю]|л+и(?!ган)).*?|бл(?:[эя]|еа?)(?:[дт][ьъ]?)?|\\S*?(?:п(?:[иеё]зд|ид[аое]?р|ед(?:р(?!о)|[аое]р|ик)|охую)|бля(?:[дбц]|тс)|[ое]ху[яйиеё]|хуйн).*?|(?:о[тб]?|про|на|вы)?м(?:анд(?:[ауеыи](?:л(?:и[сзщ])?[ауеиы])?|ой|[ао]в.*?|юк(?:ов|[ауи])?|е[нт]ь|ища)|уд(?:[яаиое].+?|е?н(?:[ьюия]|ей))|[ао]л[ао]ф[ьъ](?:[яиюе]|[еёо]й))|елд[ауые].*?|ля[тд]ь|(?:[нз]а|по)х)\\b"); // Дефолтное регулярное выражение + MESSAGE_ADULT = BUILDER + .comment("Сообщение запрета на маты.") + .define("message_adult", "Вы пытаетесь использовать ненормативную лексику в своем сообщении."); + + MESSAGE_LOCAL = BUILDER + .comment("Сообщение предупреждения о том, что никого рядом нет") + .define("message_local", "Вас никто не услышал, поставьте ! перед сообщением."); + COMMON_CONFIG = BUILDER.build(); } @@ -50,6 +60,8 @@ public class Config { public static boolean useRegex; public static double profanityThreshold; public static String profanityRegex; + public static String messageAdult; + public static String messageLocal; @SubscribeEvent public static void onLoad(final ModConfigEvent event) { @@ -58,5 +70,7 @@ public class Config { useRegex = USE_REGEX.get(); profanityThreshold = PROFANITY_THRESHOLD.get(); profanityRegex = PROFANITY_REGEX.get(); + messageAdult = MESSAGE_ADULT.get(); + messageLocal = MESSAGE_LOCAL.get(); } }