Add 0.1.1 version

This commit is contained in:
itqop 2024-10-21 11:25:52 +03:00
parent f7b0004423
commit 0b4a253dcb
5 changed files with 19 additions and 41 deletions

View File

@ -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

View File

@ -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.");
}

View File

@ -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);

View File

@ -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<Double> 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);

View File

@ -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<String> 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;
}
}
}