Add 0.1.1 version
This commit is contained in:
parent
f7b0004423
commit
0b4a253dcb
|
@ -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.
|
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
|
||||||
mod_license=All Rights Reserved
|
mod_license=All Rights Reserved
|
||||||
# The mod version. See https://semver.org/
|
# 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.
|
# 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.
|
# This should match the base package used for the mod sources.
|
||||||
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
|
|
|
@ -20,18 +20,15 @@ public class Chatit {
|
||||||
private static final Logger LOGGER = LogUtils.getLogger();
|
private static final Logger LOGGER = LogUtils.getLogger();
|
||||||
|
|
||||||
public Chatit() {
|
public Chatit() {
|
||||||
// Регистрация обработчиков событий
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
MinecraftForge.EVENT_BUS.register(this); // Для событий сервера
|
MinecraftForge.EVENT_BUS.register(ChatEventHandler.class);
|
||||||
MinecraftForge.EVENT_BUS.register(ChatEventHandler.class); // Обработчик чата
|
MinecraftForge.EVENT_BUS.register(ChatitCommand.class);
|
||||||
MinecraftForge.EVENT_BUS.register(ChatitCommand.class); // Команда
|
|
||||||
|
|
||||||
// Регистрация конфигурации
|
|
||||||
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_CONFIG);
|
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onServerStarting(ServerStartingEvent event) {
|
public void onServerStarting(ServerStartingEvent event) {
|
||||||
// Загрузка конфигурации игроков при старте сервера
|
|
||||||
PlayerConfigManager.loadConfig();
|
PlayerConfigManager.loadConfig();
|
||||||
LOGGER.info("ChatIT started and configuration loaded.");
|
LOGGER.info("ChatIT started and configuration loaded.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class ChatitCommand {
|
||||||
|
|
||||||
dispatcher.register(Commands.literal("chatit")
|
dispatcher.register(Commands.literal("chatit")
|
||||||
.then(Commands.literal("adult")
|
.then(Commands.literal("adult")
|
||||||
.requires(source -> source.hasPermission(2)) // Уровень разрешения 2 (операторы)
|
.requires(source -> source.hasPermission(2))
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
ServerPlayer player = context.getSource().getPlayerOrException();
|
ServerPlayer player = context.getSource().getPlayerOrException();
|
||||||
PlayerConfigManager.toggleAdultContent(player);
|
PlayerConfigManager.toggleAdultContent(player);
|
||||||
|
|
|
@ -22,43 +22,37 @@ public class ChatEventHandler {
|
||||||
MinecraftServer server = sender.getServer();
|
MinecraftServer server = sender.getServer();
|
||||||
String originalMessage = event.getMessage().getString();
|
String originalMessage = event.getMessage().getString();
|
||||||
|
|
||||||
// Отменяем стандартную отправку сообщения
|
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
|
|
||||||
// Убеждаемся, что отправитель есть в настройках
|
|
||||||
PlayerConfigManager.ensurePlayerExists(sender);
|
PlayerConfigManager.ensurePlayerExists(sender);
|
||||||
|
|
||||||
// Проверка на наличие '!' для глобального сообщения
|
|
||||||
boolean isGlobal = originalMessage.startsWith("!");
|
boolean isGlobal = originalMessage.startsWith("!");
|
||||||
String message = isGlobal ? originalMessage.substring(1) : originalMessage;
|
String message = isGlobal ? originalMessage.substring(1) : originalMessage;
|
||||||
|
|
||||||
// Создаем заготовку сообщения для отправки после проверки
|
|
||||||
MutableComponent chatComponent = createChatMessage(sender, message, isGlobal);
|
MutableComponent chatComponent = createChatMessage(sender, message, isGlobal);
|
||||||
|
|
||||||
// Запускаем асинхронную проверку сообщения
|
|
||||||
CompletableFuture<Double> future = ProfanityChecker.checkMessageAsync(message);
|
CompletableFuture<Double> future = ProfanityChecker.checkMessageAsync(message);
|
||||||
|
|
||||||
future.thenAccept(profanityScore -> {
|
future.thenAccept(profanityScore -> {
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
server.execute(() -> {
|
server.execute(() -> {
|
||||||
// Обработка результата проверки
|
|
||||||
if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(sender)) {
|
if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(sender)) {
|
||||||
// Отправляем сообщение только отправителю с префиксом [ERROR]
|
|
||||||
MutableComponent errorComponent = createErrorMessage(sender, message);
|
MutableComponent errorComponent = createErrorMessage(sender, message);
|
||||||
sender.sendSystemMessage(errorComponent);
|
sender.sendSystemMessage(errorComponent);
|
||||||
} else {
|
} else {
|
||||||
for (ServerPlayer receiver : server.getPlayerList().getPlayers()) {
|
for (ServerPlayer receiver : server.getPlayerList().getPlayers()) {
|
||||||
// Убеждаемся, что получатель есть в настройках
|
|
||||||
PlayerConfigManager.ensurePlayerExists(receiver);
|
PlayerConfigManager.ensurePlayerExists(receiver);
|
||||||
|
|
||||||
// Если сообщение содержит маты и у получателя параметр adult OFF
|
|
||||||
if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(receiver)) {
|
if (profanityScore > 0.5 && !PlayerConfigManager.hasAdultContentEnabled(receiver)) {
|
||||||
continue; // Пропускаем отправку этому игроку
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Проверяем условия для отправки сообщения
|
try (var senderLevel = sender.level(); var receiverLevel = receiver.level()) {
|
||||||
if (isGlobal || (receiver.level() == sender.level() && receiver.position().distanceTo(sender.position()) <= 50)) {
|
if (isGlobal || (receiverLevel == senderLevel && receiver.position().distanceTo(sender.position()) <= 50)) {
|
||||||
receiver.sendSystemMessage(chatComponent);
|
receiver.sendSystemMessage(chatComponent);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +62,6 @@ public class ChatEventHandler {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
if (server != null) {
|
if (server != null) {
|
||||||
server.execute(() -> {
|
server.execute(() -> {
|
||||||
// В случае ошибки отправляем сообщение только отправителю с префиксом [ERROR]
|
|
||||||
MutableComponent errorComponent = createErrorMessage(sender, message);
|
MutableComponent errorComponent = createErrorMessage(sender, message);
|
||||||
sender.sendSystemMessage(errorComponent);
|
sender.sendSystemMessage(errorComponent);
|
||||||
});
|
});
|
||||||
|
@ -80,7 +73,7 @@ public class ChatEventHandler {
|
||||||
private static MutableComponent createErrorMessage(ServerPlayer player, String message) {
|
private static MutableComponent createErrorMessage(ServerPlayer player, String message) {
|
||||||
MutableComponent openBracket = Component.literal("[");
|
MutableComponent openBracket = Component.literal("[");
|
||||||
MutableComponent errorText = Component.literal("ERROR")
|
MutableComponent errorText = Component.literal("ERROR")
|
||||||
.withStyle(ChatFormatting.RED, ChatFormatting.BOLD);
|
.withStyle(ChatFormatting.RED);
|
||||||
MutableComponent closeBracket = Component.literal("] ");
|
MutableComponent closeBracket = Component.literal("] ");
|
||||||
|
|
||||||
MutableComponent prefixComponent = openBracket.append(errorText).append(closeBracket);
|
MutableComponent prefixComponent = openBracket.append(errorText).append(closeBracket);
|
||||||
|
@ -98,10 +91,10 @@ public class ChatEventHandler {
|
||||||
|
|
||||||
if (isGlobal) {
|
if (isGlobal) {
|
||||||
letterComponent = Component.literal("G")
|
letterComponent = Component.literal("G")
|
||||||
.withStyle(ChatFormatting.BOLD, ChatFormatting.GREEN);
|
.withStyle(ChatFormatting.GREEN);
|
||||||
} else {
|
} else {
|
||||||
letterComponent = Component.literal("L")
|
letterComponent = Component.literal("L")
|
||||||
.withStyle(ChatFormatting.BOLD, ChatFormatting.YELLOW);
|
.withStyle(ChatFormatting.YELLOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
MutableComponent prefixComponent = openBracket.append(letterComponent).append(closeBracket);
|
MutableComponent prefixComponent = openBracket.append(letterComponent).append(closeBracket);
|
||||||
|
|
|
@ -27,21 +27,17 @@ public class ProfanityChecker {
|
||||||
boolean useRegex = Config.useRegex;
|
boolean useRegex = Config.useRegex;
|
||||||
|
|
||||||
if (apiUrl == null || apiUrl.isEmpty()) {
|
if (apiUrl == null || apiUrl.isEmpty()) {
|
||||||
// Если URL API не задан
|
|
||||||
if (useRegex) {
|
if (useRegex) {
|
||||||
// Используем регулярное выражение для проверки мата
|
|
||||||
if (containsProfanity(message)) {
|
if (containsProfanity(message)) {
|
||||||
return 1.0; // Мат найден
|
return 1.0;
|
||||||
} else {
|
} else {
|
||||||
return 0.0; // Мат не найден
|
return 0.0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Если regex=false, возвращаем 0.0 (нет мата)
|
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Создаем JSON-запрос
|
|
||||||
String jsonRequest = GSON.toJson(new MessageRequest(message));
|
String jsonRequest = GSON.toJson(new MessageRequest(message));
|
||||||
|
|
||||||
HttpRequest request = HttpRequest.newBuilder()
|
HttpRequest request = HttpRequest.newBuilder()
|
||||||
|
@ -50,23 +46,18 @@ public class ProfanityChecker {
|
||||||
.POST(HttpRequest.BodyPublishers.ofString(jsonRequest, StandardCharsets.UTF_8))
|
.POST(HttpRequest.BodyPublishers.ofString(jsonRequest, StandardCharsets.UTF_8))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// Отправляем запрос и получаем ответ
|
|
||||||
HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
|
HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
|
||||||
// Парсим ответ
|
|
||||||
String responseBody = response.body();
|
String responseBody = response.body();
|
||||||
double result = Double.parseDouble(responseBody);
|
|
||||||
|
|
||||||
return result;
|
return Double.parseDouble(responseBody);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
if (Config.useRegex) {
|
if (Config.useRegex) {
|
||||||
// Если произошла ошибка и regex=true, используем регулярное выражение
|
|
||||||
if (containsProfanity(message)) {
|
if (containsProfanity(message)) {
|
||||||
return 1.0; // Мат найден
|
return 1.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// В случае ошибки и regex=false считаем, что мата нет
|
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -76,12 +67,9 @@ public class ProfanityChecker {
|
||||||
return PROFANITY_PATTERN.matcher(message).find();
|
return PROFANITY_PATTERN.matcher(message).find();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Класс для сериализации JSON-запроса
|
|
||||||
private static class MessageRequest {
|
private static class MessageRequest {
|
||||||
private final String text;
|
|
||||||
|
|
||||||
public MessageRequest(String text) {
|
public MessageRequest(String text) {
|
||||||
this.text = text;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue