diff --git a/build.gradle b/build.gradle index 0fde016..ace90fd 100644 --- a/build.gradle +++ b/build.gradle @@ -10,6 +10,17 @@ base { archivesName = project.archives_base_name } +loom { + splitEnvironmentSourceSets() + + mods { + "clientirc" { + sourceSet sourceSets.main + sourceSet sourceSets.client + } + } +} + repositories { mavenCentral() maven { diff --git a/src/main/java/ru/nevetime/clientirc/ClientIrcMod.java b/src/client/java/ru/nevetime/clientirc/ClientIrcMod.java similarity index 62% rename from src/main/java/ru/nevetime/clientirc/ClientIrcMod.java rename to src/client/java/ru/nevetime/clientirc/ClientIrcMod.java index e8ba116..b2923ff 100644 --- a/src/main/java/ru/nevetime/clientirc/ClientIrcMod.java +++ b/src/client/java/ru/nevetime/clientirc/ClientIrcMod.java @@ -5,9 +5,9 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,8 +34,8 @@ public final class ClientIrcMod implements ClientModInitializer { ClientTickEvents.END_CLIENT_TICK.register(client -> { IrcService.DisplayLine line; while ((line = service.pollLine()) != null) { - Formatting color = line.system() ? Formatting.GRAY : Formatting.AQUA; - pushClientChat(client, Text.literal(line.text()).formatted(color)); + ChatFormatting color = line.system() ? ChatFormatting.GRAY : ChatFormatting.AQUA; + pushClientChat(client, Component.literal(line.text()).withStyle(color)); } }); @@ -48,61 +48,64 @@ public final class ClientIrcMod implements ClientModInitializer { return false; } - MinecraftClient client = MinecraftClient.getInstance(); + Minecraft client = Minecraft.getInstance(); String argument = trimmed.length() == COMMAND_PREFIX.length() ? "" : trimmed.substring(COMMAND_PREFIX.length()).trim(); if (argument.isBlank()) { - pushClientChat(client, Text.literal("[IRC] Usage: .irc | .irc status | .irc reconnect | .irc reload").formatted(Formatting.YELLOW)); + pushClientChat(client, Component.literal("[IRC] Usage: .irc | .irc status | .irc reconnect | .irc reload").withStyle(ChatFormatting.YELLOW)); return true; } if ("status".equalsIgnoreCase(argument)) { String status = service.isConnected() ? "connected" : "disconnected"; - pushClientChat(client, Text.literal("[IRC] " + status + " | " + config.host + ":" + config.port + " | clientName=" + config.clientName).formatted(Formatting.YELLOW)); + pushClientChat(client, Component.literal("[IRC] " + status + " | " + config.host + ":" + config.port + " | clientName=" + config.clientName).withStyle(ChatFormatting.YELLOW)); return true; } if ("reconnect".equalsIgnoreCase(argument)) { boolean connected = service.reconnect(resolvePlayerName(client)); - Formatting color = connected ? Formatting.GREEN : Formatting.RED; - pushClientChat(client, Text.literal("[IRC] reconnect " + (connected ? "ok" : "failed")).formatted(color)); + ChatFormatting color = connected ? ChatFormatting.GREEN : ChatFormatting.RED; + pushClientChat(client, Component.literal("[IRC] reconnect " + (connected ? "ok" : "failed")).withStyle(color)); return true; } if ("reload".equalsIgnoreCase(argument)) { config = IrcConfig.load(FabricLoader.getInstance().getConfigDir().resolve("clientirc.json")); service.updateConfig(config); - pushClientChat(client, Text.literal("[IRC] config reloaded").formatted(Formatting.YELLOW)); + pushClientChat(client, Component.literal("[IRC] config reloaded").withStyle(ChatFormatting.YELLOW)); return true; } if (!service.ensureConnected(resolvePlayerName(client))) { - pushClientChat(client, Text.literal("[IRC] server is offline or config is wrong").formatted(Formatting.RED)); + pushClientChat(client, Component.literal("[IRC] server is offline or config is wrong").withStyle(ChatFormatting.RED)); return true; } boolean sent = service.sendChat(resolvePlayerName(client), argument); if (!sent) { - pushClientChat(client, Text.literal("[IRC] send failed").formatted(Formatting.RED)); + pushClientChat(client, Component.literal("[IRC] send failed").withStyle(ChatFormatting.RED)); } return true; } - private static void pushClientChat(MinecraftClient client, Text text) { + private static void pushClientChat(Minecraft client, Component text) { if (client == null) { return; } - client.execute(() -> client.inGameHud.getChatHud().addMessage(text)); + client.execute(() -> { + if (client.gui != null && client.gui.getChat() != null) { + client.gui.getChat().addMessage(text); + } + }); } - private static String resolvePlayerName(MinecraftClient client) { + private static String resolvePlayerName(Minecraft client) { if (client != null && client.player != null) { return client.player.getGameProfile().getName(); } - if (client != null && client.getSession() != null) { - return client.getSession().getUsername(); + if (client != null && client.getUser() != null) { + return client.getUser().getName(); } return "unknown"; } } -