diff --git a/build.gradle b/build.gradle index 78d2e06..8617c5a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.11-SNAPSHOT' + id 'fabric-loom' version '1.14-SNAPSHOT' id 'maven-publish' } @@ -43,7 +43,7 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" + mappings loom.officialMojangMappings() modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" diff --git a/gradle.properties b/gradle.properties index c82b4e5..7c9cca0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,15 +2,15 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html -minecraft_version=1.21.10 -yarn_mappings=1.21.10+build.1 -loader_version=0.17.2 +minecraft_version=1.21.11 +yarn_mappings=1.21.11+build.1 +loader_version=0.18.2 # Mod Properties mod_version=1.0-SNAPSHOT maven_group=com.padbro archives_base_name=GreeterBro # Dependencies # check this on https://modmuss50.me/fabric.html -fabric_version=0.134.1+1.21.10 -cloth_config=20.0.148 -modmenu_version=16.0.0-rc.1 +fabric_version=0.139.4+1.21.11 +cloth_config=21.11.152 +modmenu_version=17.0.0-alpha.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0ceb5e9..50fba87 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1 +1 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip diff --git a/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java b/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java index 0d72c3a..f312d1b 100644 --- a/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java +++ b/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java @@ -15,38 +15,38 @@ public class GreeterBroClient implements ClientModInitializer { - private static ConfigHolder config; - private static JoinCache joinCache; - public static boolean isJoining = false; - public static final String MOD_ID = "GreeterBro"; - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - - public static GreeterBroConfig getConfig() { - config.save(); - return config.get(); - } - - public static JoinCache getJoinCache() { - return joinCache; - } - - public static void saveConfig() { - config.save(); - } - - @Override - public void onInitializeClient() { - config = AutoConfig.register(GreeterBroConfig.class, Toml4jConfigSerializer::new); - MigrationManager.migrate(); - - joinCache = JoinCache.loadCache(); - - ClientTickEvents.END_CLIENT_TICK.register( - client -> { - TickManager.onTick(); - AfkManager.onTick(); - }); - - CommandManager.register(); - } + public static final String MOD_ID = "GreeterBro"; + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + public static boolean isJoining = false; + private static ConfigHolder config; + private static JoinCache joinCache; + + public static GreeterBroConfig getConfig() { + config.save(); + return config.get(); + } + + public static JoinCache getJoinCache() { + return joinCache; + } + + public static void saveConfig() { + config.save(); + } + + @Override + public void onInitializeClient() { + config = AutoConfig.register(GreeterBroConfig.class, Toml4jConfigSerializer::new); + MigrationManager.migrate(); + + joinCache = JoinCache.loadCache(); + + ClientTickEvents.END_CLIENT_TICK.register( + client -> { + TickManager.onTick(); + AfkManager.onTick(); + }); + + CommandManager.register(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/JoinCache.java b/src/client/java/com/padbro/greeterbro/client/JoinCache.java index 2d2756b..714ab0a 100644 --- a/src/client/java/com/padbro/greeterbro/client/JoinCache.java +++ b/src/client/java/com/padbro/greeterbro/client/JoinCache.java @@ -6,6 +6,7 @@ import com.google.gson.reflect.TypeToken; import com.padbro.greeterbro.client.config.CacheClearType; import com.padbro.greeterbro.client.config.ReturningPlayerConfig; + import java.io.File; import java.io.FileReader; import java.io.FileWriter; @@ -19,121 +20,122 @@ import java.util.Optional; public class JoinCache { - private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); - private ArrayList joins; - private String date; - private static final File file = new File("join_cache.json"); - - public static JoinCache loadCache() { - String currentDate = getCurrentDate(); - if (!file.exists()) { - return new JoinCache(currentDate, new ArrayList<>()); + private static final Gson gson = new GsonBuilder().setPrettyPrinting().create(); + private static final File file = new File("join_cache.json"); + private ArrayList joins; + private String date; + + public JoinCache(String date, ArrayList joins) { + this.joins = joins; + this.date = date; } - try (FileReader reader = new FileReader(file)) { - JoinCache joinCache = gson.fromJson(reader, new TypeToken<>() {}); - ReturningPlayerConfig config = GreeterBroClient.getConfig().returningPlayerConfig; - - // Don`t clear the cache if cacheClearType is Never - // Clear the cache if it`s a new day or if cacheClearType is OnNewSession - if (config.cacheClearType != CacheClearType.Never - && (!Objects.equals(joinCache.date, currentDate) - || config.cacheClearType == CacheClearType.OnNewSession)) { - joinCache.joins = new ArrayList<>(); - joinCache.date = currentDate; - writeToFile(joinCache); - } - return joinCache; - } catch (JsonSyntaxException exception) { - return new JoinCache("", new ArrayList<>()); - } catch (Exception exception) { - throw new RuntimeException( - "Cannot load player cache (%s)".formatted(file.getAbsolutePath()), exception); + + public static JoinCache loadCache() { + String currentDate = getCurrentDate(); + if (!file.exists()) { + return new JoinCache(currentDate, new ArrayList<>()); + } + try (FileReader reader = new FileReader(file)) { + JoinCache joinCache = gson.fromJson(reader, new TypeToken<>() { + }); + ReturningPlayerConfig config = GreeterBroClient.getConfig().returningPlayerConfig; + + // Don`t clear the cache if cacheClearType is Never + // Clear the cache if it`s a new day or if cacheClearType is OnNewSession + if (config.cacheClearType != CacheClearType.Never + && (!Objects.equals(joinCache.date, currentDate) + || config.cacheClearType == CacheClearType.OnNewSession)) { + joinCache.joins = new ArrayList<>(); + joinCache.date = currentDate; + writeToFile(joinCache); + } + return joinCache; + } catch (JsonSyntaxException exception) { + return new JoinCache("", new ArrayList<>()); + } catch (Exception exception) { + throw new RuntimeException( + "Cannot load player cache (%s)".formatted(file.getAbsolutePath()), exception); + } } - } - public JoinCache(String date, ArrayList joins) { - this.joins = joins; - this.date = date; - } + private static String getCurrentDate() { + return Instant.now() + .atZone(ZoneId.systemDefault()) + .toLocalDate() + .format(DateTimeFormatter.ISO_LOCAL_DATE); + } - public void add(String player) { - Optional playerCacheEntry = getPlayerCacheEntry(player); + private static void writeToFile(JoinCache joinCache) { + try (FileWriter writer = new FileWriter(file)) { + gson.toJson(joinCache, writer); + } catch (IOException e) { + GreeterBroClient.LOGGER.warn("Failed to save cache data to file"); + } + } - if (playerCacheEntry.isEmpty()) { - this.joins.add(new PlayerCacheEntry(player, Instant.now())); - } else { - playerCacheEntry.get().setJoinedAt(Instant.now()); + public void add(String player) { + Optional playerCacheEntry = getPlayerCacheEntry(player); + + if (playerCacheEntry.isEmpty()) { + this.joins.add(new PlayerCacheEntry(player, Instant.now())); + } else { + playerCacheEntry.get().setJoinedAt(Instant.now()); + } + writeToFile(this); } - writeToFile(this); - } - public boolean hasRecentlyJoined(String player) { - Optional playerCacheEntry = this.getPlayerCacheEntry(player); - if (playerCacheEntry.isEmpty()) { - return false; + public boolean hasRecentlyJoined(String player) { + Optional playerCacheEntry = this.getPlayerCacheEntry(player); + if (playerCacheEntry.isEmpty()) { + return false; + } + + Instant joinedAt = playerCacheEntry.get().getJoinedAt(); + + return joinedAt.isAfter( + Instant.now() + .minus( + GreeterBroClient.getConfig().returningPlayerConfig.ignoreForMin, + ChronoUnit.MINUTES)); } - Instant joinedAt = playerCacheEntry.get().getJoinedAt(); - - return joinedAt.isAfter( - Instant.now() - .minus( - GreeterBroClient.getConfig().returningPlayerConfig.ignoreForMin, - ChronoUnit.MINUTES)); - } - - public boolean hasJoined(String player) { - return this.getPlayerCacheEntry(player).isPresent(); - } - - public void clear() { - joins = new ArrayList<>(); - writeToFile(this); - } - - private static String getCurrentDate() { - return Instant.now() - .atZone(ZoneId.systemDefault()) - .toLocalDate() - .format(DateTimeFormatter.ISO_LOCAL_DATE); - } - - private Optional getPlayerCacheEntry(String player) { - return this.joins.stream() - .filter(playerCacheEntry -> player.equals(playerCacheEntry.name)) - .findFirst(); - } - - private static void writeToFile(JoinCache joinCache) { - try (FileWriter writer = new FileWriter(file)) { - gson.toJson(joinCache, writer); - } catch (IOException e) { - GreeterBroClient.LOGGER.warn("Failed to save cache data to file"); + public boolean hasJoined(String player) { + return this.getPlayerCacheEntry(player).isPresent(); } - } - - public boolean shouldClearOnJoin() { - ReturningPlayerConfig config = GreeterBroClient.getConfig().returningPlayerConfig; - return config.cacheClearType == CacheClearType.OnJoin || - (config.cacheClearType == CacheClearType.OnNewDay && - !Objects.equals(this.date, getCurrentDate())); - } - - public static class PlayerCacheEntry { - private final String name; - private long joinedAt; - - public PlayerCacheEntry(String name, Instant joinedAt) { - this.name = name; - this.joinedAt = joinedAt.toEpochMilli(); + + public void clear() { + joins = new ArrayList<>(); + writeToFile(this); + } + + private Optional getPlayerCacheEntry(String player) { + return this.joins.stream() + .filter(playerCacheEntry -> player.equals(playerCacheEntry.name)) + .findFirst(); } - public Instant getJoinedAt() { - return Instant.ofEpochMilli(joinedAt); + public boolean shouldClearOnJoin() { + ReturningPlayerConfig config = GreeterBroClient.getConfig().returningPlayerConfig; + return config.cacheClearType == CacheClearType.OnJoin || + (config.cacheClearType == CacheClearType.OnNewDay && + !Objects.equals(this.date, getCurrentDate())); } - public void setJoinedAt(Instant instant) { - this.joinedAt = instant.toEpochMilli(); + public static class PlayerCacheEntry { + private final String name; + private long joinedAt; + + public PlayerCacheEntry(String name, Instant joinedAt) { + this.name = name; + this.joinedAt = joinedAt.toEpochMilli(); + } + + public Instant getJoinedAt() { + return Instant.ofEpochMilli(joinedAt); + } + + public void setJoinedAt(Instant instant) { + this.joinedAt = instant.toEpochMilli(); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java b/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java index edcfe19..3ce96e9 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java @@ -1,32 +1,32 @@ package com.padbro.greeterbro.client.commands; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; -import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.config.AfkNotifyType; +import com.padbro.greeterbro.client.managers.AfkManager; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; -public class AfkCommand { - public static void register(LiteralArgumentBuilder root) { - root.then(literal("afk").executes(AfkCommand::afk)); - } +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - public static int afk(CommandContext context) { - FabricClientCommandSource source = context.getSource(); - if (AfkManager.isAfk) { - source.sendError(Text.translatable("text.command.GreeterBro.afk.error.isAfk")); - return 0; +public class AfkCommand { + public static void register(LiteralArgumentBuilder root) { + root.then(literal("afk").executes(AfkCommand::afk)); } - AfkManager.goAfk(); - if (GreeterBroClient.getConfig().afkConfig.notifyType == AfkNotifyType.Disabled) { - source.sendFeedback( - Text.translatable("text.message.GreeterBro.afk.enter_afk").formatted(Formatting.GRAY)); + + public static int afk(CommandContext context) { + FabricClientCommandSource source = context.getSource(); + if (AfkManager.isAfk) { + source.sendError(Component.translatable("text.command.GreeterBro.afk.error.isAfk")); + return 0; + } + AfkManager.goAfk(); + if (GreeterBroClient.getConfig().afkConfig.notifyType == AfkNotifyType.Disabled) { + source.sendFeedback( + Component.translatable("text.message.GreeterBro.afk.enter_afk").withStyle(ChatFormatting.GRAY)); + } + return 0; } - return 0; - } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/BlacklistCommand.java b/src/client/java/com/padbro/greeterbro/client/commands/BlacklistCommand.java index d9523e7..7302b06 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/BlacklistCommand.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/BlacklistCommand.java @@ -1,10 +1,5 @@ package com.padbro.greeterbro.client.commands; -import static com.mojang.brigadier.arguments.StringArgumentType.getString; -import static com.mojang.brigadier.arguments.StringArgumentType.string; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.padbro.greeterbro.client.GreeterBroClient; @@ -12,76 +7,81 @@ import com.padbro.greeterbro.client.commands.provider.PlayerSuggestionProvider; import com.padbro.greeterbro.client.config.GreeterBroConfig; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; + +import static com.mojang.brigadier.arguments.StringArgumentType.getString; +import static com.mojang.brigadier.arguments.StringArgumentType.string; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class BlacklistCommand { - public static void register(LiteralArgumentBuilder root) { - root.then( - literal("blacklist") - .executes(BlacklistCommand::list) - .then( - literal("add") - .then( - argument("player", string()) - .suggests(new PlayerSuggestionProvider()) - .executes(BlacklistCommand::add))) - .then( - literal("remove") - .then( - argument("player", string()) - .suggests(new BlacklistSuggestionProvider()) - .executes(BlacklistCommand::remove)))); - } + public static void register(LiteralArgumentBuilder root) { + root.then( + literal("blacklist") + .executes(BlacklistCommand::list) + .then( + literal("add") + .then( + argument("player", string()) + .suggests(new PlayerSuggestionProvider()) + .executes(BlacklistCommand::add))) + .then( + literal("remove") + .then( + argument("player", string()) + .suggests(new BlacklistSuggestionProvider()) + .executes(BlacklistCommand::remove)))); + } - public static int list(CommandContext context) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - FabricClientCommandSource source = context.getSource(); - String players = String.join(", ", config.blacklistConfig.players); + public static int list(CommandContext context) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + FabricClientCommandSource source = context.getSource(); + String players = String.join(", ", config.blacklistConfig.players); - source.sendFeedback( - Text.translatable( - "text.command.GreeterBro.blacklist.get.success", - config.blacklistConfig.players.size(), - players) - .formatted(Formatting.GRAY)); - return 0; - } + source.sendFeedback( + Component.translatable( + "text.command.GreeterBro.blacklist.get.success", + config.blacklistConfig.players.size(), + players) + .withStyle(ChatFormatting.GRAY)); + return 0; + } + + public static int add(CommandContext context) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + FabricClientCommandSource source = context.getSource(); + String player = getString(context, "player"); + if (config.blacklistConfig.players.contains(player)) { - public static int add(CommandContext context) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - FabricClientCommandSource source = context.getSource(); - String player = getString(context, "player"); - if (config.blacklistConfig.players.contains(player)) { + source.sendError(Component.translatable("text.command.GreeterBro.blacklist.add.error.exists")); + return 0; + } - source.sendError(Text.translatable("text.command.GreeterBro.blacklist.add.error.exists")); - return 0; + config.blacklistConfig.players.add(player); + GreeterBroClient.saveConfig(); + source.sendFeedback( + Component.translatable("text.command.GreeterBro.blacklist.add.success", player) + .withStyle(ChatFormatting.GRAY)); + return 0; } - config.blacklistConfig.players.add(player); - GreeterBroClient.saveConfig(); - source.sendFeedback( - Text.translatable("text.command.GreeterBro.blacklist.add.success", player) - .formatted(Formatting.GRAY)); - return 0; - } + public static int remove(CommandContext context) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + FabricClientCommandSource source = context.getSource(); + String player = getString(context, "player"); - public static int remove(CommandContext context) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - FabricClientCommandSource source = context.getSource(); - String player = getString(context, "player"); + if (!config.blacklistConfig.players.contains(player)) { + source.sendError(Component.translatable("text.command.GreeterBro.blacklist.remove.error.exists")); + return 0; + } - if (!config.blacklistConfig.players.contains(player)) { - source.sendError(Text.translatable("text.command.GreeterBro.blacklist.remove.error.exists")); - return 0; + config.blacklistConfig.players.remove(player); + GreeterBroClient.saveConfig(); + source.sendFeedback( + Component.translatable("text.command.GreeterBro.blacklist.remove.success", player) + .withStyle(ChatFormatting.GRAY)); + return 0; } - - config.blacklistConfig.players.remove(player); - GreeterBroClient.saveConfig(); - source.sendFeedback( - Text.translatable("text.command.GreeterBro.blacklist.remove.success", player) - .formatted(Formatting.GRAY)); - return 0; - } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/CommandManager.java b/src/client/java/com/padbro/greeterbro/client/commands/CommandManager.java index 33bbdaf..8e1b69a 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/CommandManager.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/CommandManager.java @@ -1,30 +1,30 @@ package com.padbro.greeterbro.client.commands; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.command.CommandRegistryAccess; +import net.minecraft.commands.CommandBuildContext; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class CommandManager { - private static final LiteralArgumentBuilder commandRoot = - literal("greeterBro"); + private static final LiteralArgumentBuilder commandRoot = + literal("greeterBro"); - public static void register() { - ClientCommandRegistrationCallback.EVENT.register(CommandManager::registerGreeterBro); - } + public static void register() { + ClientCommandRegistrationCallback.EVENT.register(CommandManager::registerGreeterBro); + } - private static void registerGreeterBro( - CommandDispatcher dispatcher, - CommandRegistryAccess registryAccess) { + private static void registerGreeterBro( + CommandDispatcher dispatcher, + CommandBuildContext registryAccess) { - BlacklistCommand.register(commandRoot); - EnableCommand.register(commandRoot); - DisableCommand.register(commandRoot); - AfkCommand.register(commandRoot); + BlacklistCommand.register(commandRoot); + EnableCommand.register(commandRoot); + DisableCommand.register(commandRoot); + AfkCommand.register(commandRoot); - dispatcher.register(commandRoot); - } + dispatcher.register(commandRoot); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/DisableCommand.java b/src/client/java/com/padbro/greeterbro/client/commands/DisableCommand.java index 7fd8cd7..00a174d 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/DisableCommand.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/DisableCommand.java @@ -1,34 +1,34 @@ package com.padbro.greeterbro.client.commands; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.config.GreeterBroConfig; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class DisableCommand { - public static void register(LiteralArgumentBuilder root) { - root.then(literal("disable").executes(DisableCommand::disable)); - } + public static void register(LiteralArgumentBuilder root) { + root.then(literal("disable").executes(DisableCommand::disable)); + } - public static int disable(CommandContext context) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - FabricClientCommandSource source = context.getSource(); + public static int disable(CommandContext context) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + FabricClientCommandSource source = context.getSource(); - if (!config.generalConfig.enable) { - source.sendError(Text.translatable("text.command.GreeterBro.disable.error.disabled")); - return 0; - } + if (!config.generalConfig.enable) { + source.sendError(Component.translatable("text.command.GreeterBro.disable.error.disabled")); + return 0; + } - config.generalConfig.enable = false; - GreeterBroClient.saveConfig(); - source.sendFeedback( - Text.translatable("text.command.GreeterBro.disable.success").formatted(Formatting.GRAY)); + config.generalConfig.enable = false; + GreeterBroClient.saveConfig(); + source.sendFeedback( + Component.translatable("text.command.GreeterBro.disable.success").withStyle(ChatFormatting.GRAY)); - return 0; - } + return 0; + } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/EnableCommand.java b/src/client/java/com/padbro/greeterbro/client/commands/EnableCommand.java index d3b75de..fda6771 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/EnableCommand.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/EnableCommand.java @@ -1,34 +1,34 @@ package com.padbro.greeterbro.client.commands; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; - import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.config.GreeterBroConfig; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class EnableCommand { - public static void register(LiteralArgumentBuilder root) { - root.then(literal("enable").executes(EnableCommand::enable)); - } + public static void register(LiteralArgumentBuilder root) { + root.then(literal("enable").executes(EnableCommand::enable)); + } - public static int enable(CommandContext context) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - FabricClientCommandSource source = context.getSource(); + public static int enable(CommandContext context) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + FabricClientCommandSource source = context.getSource(); - if (config.generalConfig.enable) { - source.sendError(Text.translatable("text.command.GreeterBro.enable.error.enabled")); - return 0; - } + if (config.generalConfig.enable) { + source.sendError(Component.translatable("text.command.GreeterBro.enable.error.enabled")); + return 0; + } - config.generalConfig.enable = true; - GreeterBroClient.saveConfig(); - source.sendFeedback( - Text.translatable("text.command.GreeterBro.enable.success").formatted(Formatting.GRAY)); + config.generalConfig.enable = true; + GreeterBroClient.saveConfig(); + source.sendFeedback( + Component.translatable("text.command.GreeterBro.enable.success").withStyle(ChatFormatting.GRAY)); - return 0; - } + return 0; + } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/provider/BlacklistSuggestionProvider.java b/src/client/java/com/padbro/greeterbro/client/commands/provider/BlacklistSuggestionProvider.java index a7f7a97..18acb04 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/provider/BlacklistSuggestionProvider.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/provider/BlacklistSuggestionProvider.java @@ -5,22 +5,22 @@ import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; import com.padbro.greeterbro.client.GreeterBroClient; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import java.util.concurrent.CompletableFuture; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; public class BlacklistSuggestionProvider implements SuggestionProvider { - @Override - public CompletableFuture getSuggestions( - CommandContext context, SuggestionsBuilder builder) { - String partialQuery = builder.getRemainingLowerCase(); + @Override + public CompletableFuture getSuggestions( + CommandContext context, SuggestionsBuilder builder) { + String partialQuery = builder.getRemainingLowerCase(); - for (String player : GreeterBroClient.getConfig().blacklistConfig.players) { - if (player.toLowerCase().startsWith(partialQuery)) { - builder.suggest(player); - } - } + for (String player : GreeterBroClient.getConfig().blacklistConfig.players) { + if (player.toLowerCase().startsWith(partialQuery)) { + builder.suggest(player); + } + } - return builder.buildFuture(); - } + return builder.buildFuture(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/commands/provider/PlayerSuggestionProvider.java b/src/client/java/com/padbro/greeterbro/client/commands/provider/PlayerSuggestionProvider.java index 08416a1..838bfc9 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/provider/PlayerSuggestionProvider.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/provider/PlayerSuggestionProvider.java @@ -4,26 +4,27 @@ import com.mojang.brigadier.suggestion.SuggestionProvider; import com.mojang.brigadier.suggestion.Suggestions; import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; + import java.util.Collection; import java.util.concurrent.CompletableFuture; -import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; public class PlayerSuggestionProvider implements SuggestionProvider { - @Override - public CompletableFuture getSuggestions( - CommandContext context, SuggestionsBuilder builder) { - FabricClientCommandSource source = context.getSource(); + @Override + public CompletableFuture getSuggestions( + CommandContext context, SuggestionsBuilder builder) { + FabricClientCommandSource source = context.getSource(); - String partialQuery = builder.getRemainingLowerCase(); + String partialQuery = builder.getRemainingLowerCase(); - Collection playerNames = source.getPlayerNames(); + Collection playerNames = source.getOnlinePlayerNames(); - for (String playerName : playerNames) { - if (playerName.toLowerCase().startsWith(partialQuery)) { - builder.suggest(playerName); - } - } + for (String playerName : playerNames) { + if (playerName.toLowerCase().startsWith(partialQuery)) { + builder.suggest(playerName); + } + } - return builder.buildFuture(); - } + return builder.buildFuture(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/AfkConfig.java b/src/client/java/com/padbro/greeterbro/client/config/AfkConfig.java index f8a53fc..0ade3e3 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/AfkConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/AfkConfig.java @@ -6,18 +6,20 @@ @Config(name = "afk") public class AfkConfig implements ConfigData { - @ConfigEntry.Gui.Tooltip public boolean enable = true; + @ConfigEntry.Gui.Tooltip + public boolean enable = true; - @ConfigEntry.Gui.Tooltip public int afkTime = 5; + @ConfigEntry.Gui.Tooltip + public int afkTime = 5; - @ConfigEntry.Gui.Tooltip - @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) - public AfkNotifyType notifyType = AfkNotifyType.Chat; + @ConfigEntry.Gui.Tooltip + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public AfkNotifyType notifyType = AfkNotifyType.Chat; - @Override - public void validatePostLoad() { - if (this.afkTime < 0) { - this.afkTime = 1; + @Override + public void validatePostLoad() { + if (this.afkTime < 0) { + this.afkTime = 1; + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/AfkNotifyType.java b/src/client/java/com/padbro/greeterbro/client/config/AfkNotifyType.java index e0390f3..26f0a6b 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/AfkNotifyType.java +++ b/src/client/java/com/padbro/greeterbro/client/config/AfkNotifyType.java @@ -4,12 +4,12 @@ import org.jetbrains.annotations.NotNull; public enum AfkNotifyType implements SelectionListEntry.Translatable { - Disabled, - Chat, - Overlay; + Disabled, + Chat, + Overlay; - @Override - public @NotNull String getKey() { - return "text.autoconfig.GreeterBro.option.afkConfig.afkNotifyType." + toString().toLowerCase(); - } + @Override + public @NotNull String getKey() { + return "text.autoconfig.GreeterBro.option.afkConfig.afkNotifyType." + toString().toLowerCase(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/BlacklistConfig.java b/src/client/java/com/padbro/greeterbro/client/config/BlacklistConfig.java index 15f977b..8994410 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/BlacklistConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/BlacklistConfig.java @@ -1,17 +1,18 @@ package com.padbro.greeterbro.client.config; +import me.shedaniel.autoconfig.ConfigData; +import me.shedaniel.autoconfig.annotation.Config; + import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import me.shedaniel.autoconfig.ConfigData; -import me.shedaniel.autoconfig.annotation.Config; @Config(name = "blacklist") public class BlacklistConfig implements ConfigData { - public List players = new ArrayList<>(); + public List players = new ArrayList<>(); - @Override - public void validatePostLoad() { - this.players = players.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); - } + @Override + public void validatePostLoad() { + this.players = players.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/CacheClearType.java b/src/client/java/com/padbro/greeterbro/client/config/CacheClearType.java index 6ed7a08..a97debe 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/CacheClearType.java +++ b/src/client/java/com/padbro/greeterbro/client/config/CacheClearType.java @@ -3,14 +3,14 @@ import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry; import org.jetbrains.annotations.NotNull; -public enum CacheClearType implements SelectionListEntry.Translatable { - OnJoin, - OnNewSession, - OnNewDay, - Never; +public enum CacheClearType implements SelectionListEntry.Translatable { + OnJoin, + OnNewSession, + OnNewDay, + Never; - @Override - public @NotNull String getKey() { - return "text.autoconfig.GreeterBro.option.returningPlayerConfig.cacheClearType." + toString().toLowerCase(); - } + @Override + public @NotNull String getKey() { + return "text.autoconfig.GreeterBro.option.returningPlayerConfig.cacheClearType." + toString().toLowerCase(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/FirstJoinConfig.java b/src/client/java/com/padbro/greeterbro/client/config/FirstJoinConfig.java index c3d755e..e575839 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/FirstJoinConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/FirstJoinConfig.java @@ -1,26 +1,29 @@ package com.padbro.greeterbro.client.config; -import java.util.List; -import java.util.stream.Collectors; - import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; +import java.util.List; +import java.util.stream.Collectors; + @Config(name = "firstJoin") public class FirstJoinConfig implements ConfigData { - public boolean enable = true; + public boolean enable = true; - @ConfigEntry.Gui.Tooltip public String customMessage = ""; + @ConfigEntry.Gui.Tooltip + public String customMessage = ""; - @ConfigEntry.BoundedDiscrete(max = 100) - @ConfigEntry.Gui.Tooltip public int greetingChance = 100; + @ConfigEntry.BoundedDiscrete(max = 100) + @ConfigEntry.Gui.Tooltip + public int greetingChance = 100; - @ConfigEntry.Gui.Tooltip public List greetings = List.of("Welcome"); + @ConfigEntry.Gui.Tooltip + public List greetings = List.of("Welcome"); - @Override - public void validatePostLoad() { - this.greetings = - greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); - } + @Override + public void validatePostLoad() { + this.greetings = + greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java b/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java index f011da8..8b040f3 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java @@ -1,64 +1,71 @@ package com.padbro.greeterbro.client.config; -import java.util.List; -import java.util.stream.Collectors; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; +import java.util.List; +import java.util.stream.Collectors; + @Config(name = "general") public class GeneralConfig implements ConfigData { - @ConfigEntry.Gui.Excluded public int configVersion = 0; - - @ConfigEntry.Gui.Tooltip public boolean enable = true; - - @ConfigEntry.Gui.Tooltip public boolean enableOwnJoin = true; - - @ConfigEntry.Gui.Tooltip public String customMessage = ""; + @ConfigEntry.Gui.Excluded + public int configVersion = 0; - @ConfigEntry.BoundedDiscrete(max = 100) - @ConfigEntry.Gui.Tooltip - public int greetingChance = 100; + @ConfigEntry.Gui.Tooltip + public boolean enable = true; - public boolean cancelOnLeave = true; - @ConfigEntry.Gui.Tooltip public String customLeaveMessage = ""; + @ConfigEntry.Gui.Tooltip + public boolean enableOwnJoin = true; - @ConfigEntry.Gui.Tooltip public List greetings = List.of("Hello", "o/"); + @ConfigEntry.Gui.Tooltip + public String customMessage = ""; - @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) - public DelayRange delayRange = new DelayRange(3, 5); + @ConfigEntry.BoundedDiscrete(max = 100) + @ConfigEntry.Gui.Tooltip + public int greetingChance = 100; - @Override - public void validatePostLoad() { + public boolean cancelOnLeave = true; + @ConfigEntry.Gui.Tooltip + public String customLeaveMessage = ""; - float actualMin = Math.min(this.delayRange.min, this.delayRange.max); - float actualMax = Math.max(this.delayRange.min, this.delayRange.max); - this.delayRange.min = Math.max(actualMin, 0); - this.delayRange.max = Math.max(actualMax, 0); + @ConfigEntry.Gui.Tooltip + public List greetings = List.of("Hello", "o/"); - this.greetings = - greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); - } + @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) + public DelayRange delayRange = new DelayRange(3, 5); - public static class DelayRange { - @ConfigEntry.BoundedDiscrete(max = 10, min = 0) - public float min; + @Override + public void validatePostLoad() { - @ConfigEntry.BoundedDiscrete(max = 10, min = 0) - public float max; + float actualMin = Math.min(this.delayRange.min, this.delayRange.max); + float actualMax = Math.max(this.delayRange.min, this.delayRange.max); + this.delayRange.min = Math.max(actualMin, 0); + this.delayRange.max = Math.max(actualMax, 0); - DelayRange(float min, float max) { - this.min = min; - this.max = max; + this.greetings = + greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); } - public int getRandomDelayInTicks() { - float actualMin = Math.min(this.min, this.max); - float actualMax = Math.max(this.min, this.max); - float min = Math.max(actualMin, 0); - float max = Math.max(actualMax, 0); - float randomDelay = (float) (Math.random() * (max - min + 1)) + min; - return Math.round(randomDelay * 20); + public static class DelayRange { + @ConfigEntry.BoundedDiscrete(max = 100) + public float min; + + @ConfigEntry.BoundedDiscrete(max = 100) + public float max; + + DelayRange(float min, float max) { + this.min = min; + this.max = max; + } + + public int getRandomDelayInTicks() { + float actualMin = Math.min(this.min, this.max); + float actualMax = Math.max(this.min, this.max); + float min = Math.max(actualMin, 0); + float max = Math.max(actualMax, 0); + float randomDelay = (float) (Math.random() * (max - min + 1)) + min; + return Math.round(randomDelay * 20); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/GreeterBroConfig.java b/src/client/java/com/padbro/greeterbro/client/config/GreeterBroConfig.java index 39628d2..ddb23bf 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/GreeterBroConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/GreeterBroConfig.java @@ -6,31 +6,31 @@ @Config(name = "GreeterBro") public class GreeterBroConfig extends PartitioningSerializer.GlobalData { - @ConfigEntry.Category("general") - @ConfigEntry.Gui.TransitiveObject - public GeneralConfig generalConfig = new GeneralConfig(); + @ConfigEntry.Category("general") + @ConfigEntry.Gui.TransitiveObject + public GeneralConfig generalConfig = new GeneralConfig(); - @ConfigEntry.Category("afk") - @ConfigEntry.Gui.TransitiveObject - public AfkConfig afkConfig = new AfkConfig(); + @ConfigEntry.Category("afk") + @ConfigEntry.Gui.TransitiveObject + public AfkConfig afkConfig = new AfkConfig(); - @ConfigEntry.Category("returningPlayer") - @ConfigEntry.Gui.TransitiveObject - public ReturningPlayerConfig returningPlayerConfig = new ReturningPlayerConfig(); + @ConfigEntry.Category("returningPlayer") + @ConfigEntry.Gui.TransitiveObject + public ReturningPlayerConfig returningPlayerConfig = new ReturningPlayerConfig(); - @ConfigEntry.Category("firstJoin") - @ConfigEntry.Gui.TransitiveObject - public FirstJoinConfig firstJoinConfig = new FirstJoinConfig(); + @ConfigEntry.Category("firstJoin") + @ConfigEntry.Gui.TransitiveObject + public FirstJoinConfig firstJoinConfig = new FirstJoinConfig(); - @ConfigEntry.Category("nameChange") - @ConfigEntry.Gui.TransitiveObject - public NameChangeConfig nameChangeConfig = new NameChangeConfig(); + @ConfigEntry.Category("nameChange") + @ConfigEntry.Gui.TransitiveObject + public NameChangeConfig nameChangeConfig = new NameChangeConfig(); - @ConfigEntry.Category("specialGreetings") - @ConfigEntry.Gui.TransitiveObject - public SpecialGreetingsConfig specialGreetings = new SpecialGreetingsConfig(); + @ConfigEntry.Category("specialGreetings") + @ConfigEntry.Gui.TransitiveObject + public SpecialGreetingsConfig specialGreetings = new SpecialGreetingsConfig(); - @ConfigEntry.Category("blacklist") - @ConfigEntry.Gui.TransitiveObject - public BlacklistConfig blacklistConfig = new BlacklistConfig(); + @ConfigEntry.Category("blacklist") + @ConfigEntry.Gui.TransitiveObject + public BlacklistConfig blacklistConfig = new BlacklistConfig(); } diff --git a/src/client/java/com/padbro/greeterbro/client/config/GreeterBroModMenuImplementation.java b/src/client/java/com/padbro/greeterbro/client/config/GreeterBroModMenuImplementation.java index 8f5353a..96ed5f8 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/GreeterBroModMenuImplementation.java +++ b/src/client/java/com/padbro/greeterbro/client/config/GreeterBroModMenuImplementation.java @@ -2,11 +2,11 @@ import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.autoconfig.AutoConfig; +import me.shedaniel.autoconfig.AutoConfigClient; public class GreeterBroModMenuImplementation implements ModMenuApi { - @Override - public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> AutoConfig.getConfigScreen(GreeterBroConfig.class, parent).get(); - } + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return parent -> AutoConfigClient.getConfigScreen(GreeterBroConfig.class, parent).get(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/NameChangeConfig.java b/src/client/java/com/padbro/greeterbro/client/config/NameChangeConfig.java index 7c4a3d1..39a8171 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/NameChangeConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/NameChangeConfig.java @@ -1,25 +1,28 @@ package com.padbro.greeterbro.client.config; -import java.util.List; -import java.util.stream.Collectors; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; +import java.util.List; +import java.util.stream.Collectors; + @Config(name = "nameChange") public class NameChangeConfig implements ConfigData { - public boolean enable = true; + public boolean enable = true; - @ConfigEntry.Gui.Tooltip public String customMessage = ""; + @ConfigEntry.Gui.Tooltip + public String customMessage = ""; - @ConfigEntry.BoundedDiscrete(max = 100) - @ConfigEntry.Gui.Tooltip public int greetingChance = 100; + @ConfigEntry.Gui.Tooltip + public int greetingChance = 100; - @ConfigEntry.Gui.Tooltip public List greetings = List.of(); + @ConfigEntry.Gui.Tooltip + public List greetings = List.of(); - @Override - public void validatePostLoad() { - this.greetings = - greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); - } + @Override + public void validatePostLoad() { + this.greetings = + greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/ReturningPlayerConfig.java b/src/client/java/com/padbro/greeterbro/client/config/ReturningPlayerConfig.java index add3c44..799c191 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/ReturningPlayerConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/ReturningPlayerConfig.java @@ -1,33 +1,36 @@ package com.padbro.greeterbro.client.config; -import java.util.List; -import java.util.stream.Collectors; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; import me.shedaniel.autoconfig.annotation.ConfigEntry.Gui.EnumHandler.EnumDisplayOption; +import java.util.List; +import java.util.stream.Collectors; + @Config(name = "returningPlayer") public class ReturningPlayerConfig implements ConfigData { - public boolean enable = true; + public boolean enable = true; - @ConfigEntry.Gui.Tooltip public boolean cacheOnJoin = true; + @ConfigEntry.Gui.Tooltip + public boolean cacheOnJoin = true; - @ConfigEntry.BoundedDiscrete(max = 10) - public int ignoreForMin = 5; + public int ignoreForMin = 5; - @ConfigEntry.Gui.Tooltip - @ConfigEntry.Gui.EnumHandler(option = EnumDisplayOption.BUTTON) - public CacheClearType cacheClearType = CacheClearType.OnJoin; + @ConfigEntry.Gui.Tooltip + @ConfigEntry.Gui.EnumHandler(option = EnumDisplayOption.BUTTON) + public CacheClearType cacheClearType = CacheClearType.OnJoin; - @ConfigEntry.BoundedDiscrete(max = 100) - @ConfigEntry.Gui.Tooltip public int greetingChance = 100; + @ConfigEntry.BoundedDiscrete(max = 100) + @ConfigEntry.Gui.Tooltip + public int greetingChance = 100; - @ConfigEntry.Gui.Tooltip public List greetings = List.of("Welcome back", "wb", "o/"); + @ConfigEntry.Gui.Tooltip + public List greetings = List.of("Welcome back", "wb", "o/"); - @Override - public void validatePostLoad() { - this.greetings = - greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); - } + @Override + public void validatePostLoad() { + this.greetings = + greetings.stream().filter(s -> !s.trim().isEmpty()).collect(Collectors.toList()); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/config/SpecialGreetingsConfig.java b/src/client/java/com/padbro/greeterbro/client/config/SpecialGreetingsConfig.java index 6512123..87699af 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/SpecialGreetingsConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/SpecialGreetingsConfig.java @@ -1,58 +1,60 @@ package com.padbro.greeterbro.client.config; -import java.util.List; -import java.util.Objects; -import java.util.Optional; import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + @Config(name = "specialGreetings") public class SpecialGreetingsConfig implements ConfigData { - @ConfigEntry.Gui.Tooltip public List specialGreetings = List.of(); - - public static class SpecialGreeting { - @ConfigEntry.Gui.Tooltip String player; - @ConfigEntry.Gui.Tooltip - @ConfigEntry.BoundedDiscrete(max = 100) - public int greetingChance; - - @ConfigEntry.Gui.Tooltip public List greetings; + public List specialGreetings = List.of(); - @ConfigEntry.Gui.Tooltip public List returningGreetings; - - SpecialGreeting() { - this.player = ""; - this.greetingChance = 100; - this.greetings = List.of("Good to see you", "I was waiting for you"); - this.returningGreetings = List.of("You are back :D", "Where have you been?"); + public Optional getForPlayer(String player) { + return this.specialGreetings.stream() + .filter(specialGreeting -> player.equals(specialGreeting.player)) + .findFirst(); } - } - public Optional getForPlayer(String player) { - return this.specialGreetings.stream() - .filter(specialGreeting -> player.equals(specialGreeting.player)) - .findFirst(); - } + @Override + public void validatePostLoad() { + this.specialGreetings = + this.specialGreetings.stream() + .filter( + specialGreeting -> { + if (Objects.equals(specialGreeting.player, "")) { + return false; + } + specialGreeting.greetings = + specialGreeting.greetings.stream().filter(s -> !s.trim().isEmpty()).toList(); + specialGreeting.returningGreetings = + specialGreeting.returningGreetings.stream() + .filter(s -> !s.trim().isEmpty()) + .toList(); + return true; + }) + .toList(); + } - @Override - public void validatePostLoad() { - this.specialGreetings = - this.specialGreetings.stream() - .filter( - specialGreeting -> { - if (Objects.equals(specialGreeting.player, "")) { - return false; - } - specialGreeting.greetings = - specialGreeting.greetings.stream().filter(s -> !s.trim().isEmpty()).toList(); - specialGreeting.returningGreetings = - specialGreeting.returningGreetings.stream() - .filter(s -> !s.trim().isEmpty()) - .toList(); - return true; - }) - .toList(); - } + public static class SpecialGreeting { + @ConfigEntry.Gui.Tooltip + @ConfigEntry.BoundedDiscrete(max = 100) + public int greetingChance; + @ConfigEntry.Gui.Tooltip + public List greetings; + @ConfigEntry.Gui.Tooltip + public List returningGreetings; + @ConfigEntry.Gui.Tooltip + String player; + + SpecialGreeting() { + this.player = ""; + this.greetingChance = 100; + this.greetings = List.of("Good to see you", "I was waiting for you"); + this.returningGreetings = List.of("You are back :D", "Where have you been?"); + } + } } diff --git a/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java b/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java index f1a13bf..a50ba44 100644 --- a/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java +++ b/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java @@ -4,45 +4,46 @@ import com.padbro.greeterbro.client.config.AfkConfig; import com.padbro.greeterbro.client.config.AfkNotifyType; import com.padbro.greeterbro.client.config.GeneralConfig; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.entity.Entity; + import java.time.Instant; import java.time.temporal.ChronoUnit; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.entity.Entity; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; public class AfkManager { - private static final MinecraftClient minecraftInstance = MinecraftClient.getInstance(); - public static boolean isAfk = false; - static GeneralConfig config = GreeterBroClient.getConfig().generalConfig; - static AfkConfig afkConfig = GreeterBroClient.getConfig().afkConfig; - private static double previousPitch; - private static double previousYaw; - private static Instant lastActiveAt = Instant.now(); + private static final Minecraft minecraftInstance = Minecraft.getInstance(); + public static boolean isAfk = false; + static GeneralConfig config = GreeterBroClient.getConfig().generalConfig; + static AfkConfig afkConfig = GreeterBroClient.getConfig().afkConfig; + private static double previousPitch; + private static double previousYaw; + private static Instant lastActiveAt = Instant.now(); - public static void onTick() { - if (!config.enable || !afkConfig.enable) { - return; - } + public static void onTick() { + if (!config.enable || !afkConfig.enable) { + return; + } - if (isPlayerActive()) { - setLastActiveNow(true); - return; - } + if (isPlayerActive()) { + setLastActiveNow(true); + return; + } - if (isAfk) { - return; - } + if (isAfk) { + return; + } - boolean isBefore = - lastActiveAt.isBefore(Instant.now().minus(afkConfig.afkTime, ChronoUnit.MINUTES)); + boolean isBefore = + lastActiveAt.isBefore(Instant.now().minus(afkConfig.afkTime, ChronoUnit.MINUTES)); - if (isBefore) { - goAfk(); + if (isBefore) { + goAfk(); + } } - } public static void setLastActiveNow(boolean notify) { lastActiveAt = Instant.now(); @@ -51,47 +52,47 @@ public static void setLastActiveNow(boolean notify) { } } - public static void goAfk() { - notifyPlayer(Text.translatable("text.message.GreeterBro.afk.enter_afk")); - isAfk = true; - } - - public static void leaveAfk() { - notifyPlayer(Text.translatable("text.message.GreeterBro.afk.leave_afk")); - isAfk = false; - } - - private static void notifyPlayer(MutableText message) { - if (afkConfig.notifyType == AfkNotifyType.Disabled) { - return; + public static void goAfk() { + notifyPlayer(Component.translatable("text.message.GreeterBro.afk.enter_afk")); + isAfk = true; } - ClientPlayerEntity player = minecraftInstance.player; - if (player != null) { - Formatting format = - afkConfig.notifyType == AfkNotifyType.Overlay ? Formatting.YELLOW : Formatting.GRAY; - player.sendMessage(message.formatted(format), afkConfig.notifyType == AfkNotifyType.Overlay); + + public static void leaveAfk() { + notifyPlayer(Component.translatable("text.message.GreeterBro.afk.leave_afk")); + isAfk = false; } - } - private static boolean isPlayerActive() { - Entity cameraEntity = minecraftInstance.getCameraEntity(); - if (cameraEntity != null - && (previousPitch != cameraEntity.getPitch() || previousYaw != cameraEntity.getYaw())) { - previousPitch = cameraEntity.getPitch(); - previousYaw = cameraEntity.getYaw(); - return true; + private static void notifyPlayer(MutableComponent message) { + if (afkConfig.notifyType == AfkNotifyType.Disabled) { + return; + } + LocalPlayer player = minecraftInstance.player; + if (player != null) { + ChatFormatting format = + afkConfig.notifyType == AfkNotifyType.Overlay ? ChatFormatting.YELLOW : ChatFormatting.GRAY; + player.displayClientMessage(message.withStyle(format), afkConfig.notifyType == AfkNotifyType.Overlay); + } } - return minecraftInstance.options.forwardKey.isPressed() - || minecraftInstance.options.backKey.isPressed() - || minecraftInstance.options.rightKey.isPressed() - || minecraftInstance.options.leftKey.isPressed() - || minecraftInstance.options.sprintKey.isPressed() - || minecraftInstance.options.jumpKey.isPressed() - || minecraftInstance.options.sneakKey.isPressed() - || minecraftInstance.options.useKey.isPressed() - || minecraftInstance.options.attackKey.isPressed() - || minecraftInstance.options.playerListKey.isPressed() - || minecraftInstance.options.togglePerspectiveKey.isPressed(); - } + private static boolean isPlayerActive() { + Entity cameraEntity = minecraftInstance.getCameraEntity(); + if (cameraEntity != null + && (previousPitch != cameraEntity.getXRot() || previousYaw != cameraEntity.getYRot())) { + previousPitch = cameraEntity.getXRot(); + previousYaw = cameraEntity.getYRot(); + return true; + } + + return minecraftInstance.options.keyUp.isDown() + || minecraftInstance.options.keyDown.isDown() + || minecraftInstance.options.keyRight.isDown() + || minecraftInstance.options.keyLeft.isDown() + || minecraftInstance.options.keySprint.isDown() + || minecraftInstance.options.keyJump.isDown() + || minecraftInstance.options.keyShift.isDown() + || minecraftInstance.options.keyUse.isDown() + || minecraftInstance.options.keyAttack.isDown() + || minecraftInstance.options.keyPlayerList.isDown() + || minecraftInstance.options.keyTogglePerspective.isDown(); + } } diff --git a/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java b/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java index a83a69d..dec554f 100644 --- a/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java +++ b/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java @@ -4,24 +4,24 @@ import com.padbro.greeterbro.client.config.GreeterBroConfig; public class MigrationManager { - public static void migrate() { - boolean migrated = false; - GreeterBroConfig config = GreeterBroClient.getConfig(); - int configVersion = config.generalConfig.configVersion; + public static void migrate() { + boolean migrated = false; + GreeterBroConfig config = GreeterBroClient.getConfig(); + int configVersion = config.generalConfig.configVersion; - if (configVersion < 1) { - if (config.generalConfig.delayRange.min != 3.0 - && config.generalConfig.delayRange.max != 5.0) { - config.generalConfig.delayRange.max /= 20; - config.generalConfig.delayRange.min /= 20; - } + if (configVersion < 1) { + if (config.generalConfig.delayRange.min != 3.0 + && config.generalConfig.delayRange.max != 5.0) { + config.generalConfig.delayRange.max /= 20; + config.generalConfig.delayRange.min /= 20; + } - config.generalConfig.configVersion = 1; - migrated = true; - } + config.generalConfig.configVersion = 1; + migrated = true; + } - if (migrated) { - GreeterBroClient.saveConfig(); + if (migrated) { + GreeterBroClient.saveConfig(); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java b/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java index 02ff6ca..7f1fa86 100644 --- a/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java +++ b/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java @@ -1,47 +1,48 @@ package com.padbro.greeterbro.client.managers; +import org.jetbrains.annotations.Nullable; + import java.util.LinkedList; import java.util.List; import java.util.Objects; -import org.jetbrains.annotations.Nullable; public class TickManager { - private static final List tasks = new LinkedList<>(); + private static final List tasks = new LinkedList<>(); - public static void scheduleTask(ScheduledTask task) { - tasks.add(task); - } + public static void scheduleTask(ScheduledTask task) { + tasks.add(task); + } - public static void cancelTaskByPlayerName(@Nullable String playerName) { - if (playerName != null) { - tasks.removeIf(task -> Objects.equals(task.playerName, playerName)); + public static void cancelTaskByPlayerName(@Nullable String playerName) { + if (playerName != null) { + tasks.removeIf(task -> Objects.equals(task.playerName, playerName)); + } } - } - - public static void onTick() { - for (ScheduledTask task : tasks) { - if (task.remainingTicks <= 0) { - task.run(); - tasks.remove(task); - return; - } - task.remainingTicks--; + + public static void onTick() { + for (ScheduledTask task : tasks) { + if (task.remainingTicks <= 0) { + task.run(); + tasks.remove(task); + return; + } + task.remainingTicks--; + } } - } - public static class ScheduledTask { - final Runnable task; - int remainingTicks; - String playerName; + public static class ScheduledTask { + final Runnable task; + int remainingTicks; + String playerName; - public ScheduledTask(int delayInTicks, Runnable task, String playerName) { - this.task = task; - this.remainingTicks = delayInTicks; - this.playerName = playerName; - } + public ScheduledTask(int delayInTicks, Runnable task, String playerName) { + this.task = task; + this.remainingTicks = delayInTicks; + this.playerName = playerName; + } - public void run() { - this.task.run(); + public void run() { + this.task.run(); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java b/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java index e623996..33fa67f 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java @@ -1,22 +1,17 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.JoinCache; -import com.padbro.greeterbro.client.managers.TickManager; -import com.padbro.greeterbro.client.managers.TickManager.ScheduledTask; import com.padbro.greeterbro.client.config.GreeterBroConfig; import com.padbro.greeterbro.client.config.SpecialGreetingsConfig.SpecialGreeting; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Random; -import java.util.regex.Pattern; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.network.message.MessageHandler; -import net.minecraft.text.Text; -import net.minecraft.text.TranslatableTextContent; +import com.padbro.greeterbro.client.managers.AfkManager; +import com.padbro.greeterbro.client.managers.TickManager; +import com.padbro.greeterbro.client.managers.TickManager.ScheduledTask; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.chat.ChatListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.contents.TranslatableContents; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -24,204 +19,210 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(MessageHandler.class) +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; +import java.util.regex.Pattern; + +@Mixin(ChatListener.class) public class ChatMixin { - @Inject(method = "onGameMessage", at = @At("HEAD")) - public void onMessage(Text message, boolean overlay, CallbackInfo ci) { - GreeterBroConfig config = GreeterBroClient.getConfig(); - if (!config.generalConfig.enable - || MinecraftClient.getInstance().player == null - || (config.afkConfig.enable && AfkManager.isAfk)) { + @Inject(method = "handleSystemMessage", at = @At("HEAD")) + public void onMessage(Component message, boolean overlay, CallbackInfo ci) { + GreeterBroConfig config = GreeterBroClient.getConfig(); + if (!config.generalConfig.enable + || Minecraft.getInstance().player == null + || (config.afkConfig.enable && AfkManager.isAfk)) { - return; - } + return; + } - List greetingList; - String player; - int chance; - String currentPlayerName = MinecraftClient.getInstance().player.getName().getString(); - - if (this.isFirstJoin(message)) { - greetingList = config.firstJoinConfig.greetings; - player = getPlayerName(message, config.firstJoinConfig.customMessage); - chance = config.firstJoinConfig.greetingChance; - } else if (this.isNameChange(message)) { - greetingList = config.nameChangeConfig.greetings; - player = getPlayerName(message, config.nameChangeConfig.customMessage); - chance = config.nameChangeConfig.greetingChance; - } else if (this.isJoinMessage(message)) { - greetingList = config.generalConfig.greetings; - player = getPlayerName(message, config.generalConfig.customMessage); - chance = config.generalConfig.greetingChance; - } else if (this.isLeaveMessage(message) && config.generalConfig.cancelOnLeave) { - player = getPlayerName(message, config.generalConfig.customLeaveMessage); - TickManager.cancelTaskByPlayerName(player); - return; - } else { - return; - } + List greetingList; + String player; + int chance; + String currentPlayerName = Minecraft.getInstance().player.getName().getString(); + + if (this.isFirstJoin(message)) { + greetingList = config.firstJoinConfig.greetings; + player = getPlayerName(message, config.firstJoinConfig.customMessage); + chance = config.firstJoinConfig.greetingChance; + } else if (this.isNameChange(message)) { + greetingList = config.nameChangeConfig.greetings; + player = getPlayerName(message, config.nameChangeConfig.customMessage); + chance = config.nameChangeConfig.greetingChance; + } else if (this.isJoinMessage(message)) { + greetingList = config.generalConfig.greetings; + player = getPlayerName(message, config.generalConfig.customMessage); + chance = config.generalConfig.greetingChance; + } else if (this.isLeaveMessage(message) && config.generalConfig.cancelOnLeave) { + player = getPlayerName(message, config.generalConfig.customLeaveMessage); + TickManager.cancelTaskByPlayerName(player); + return; + } else { + return; + } - if (player != null) { - if (config.blacklistConfig.players.contains(player)) { - return; - } + if (player != null) { + if (config.blacklistConfig.players.contains(player)) { + return; + } - if (!config.generalConfig.enableOwnJoin && player.equals(currentPlayerName)) { - return; - } + if (!config.generalConfig.enableOwnJoin && player.equals(currentPlayerName)) { + return; + } + + Optional specialGreeting = config.specialGreetings.getForPlayer(player); + if (specialGreeting.isPresent()) { + greetingList = specialGreeting.get().greetings; + chance = specialGreeting.get().greetingChance; + } + + JoinCache joinCache = GreeterBroClient.getJoinCache(); + + if (config.returningPlayerConfig.enable) { + if (joinCache.hasRecentlyJoined(player)) { + return; + } + if (joinCache.hasJoined(player) && !player.equals(currentPlayerName)) { + if (specialGreeting.isPresent()) { + greetingList = specialGreeting.get().returningGreetings; + chance = specialGreeting.get().greetingChance; + } else { + greetingList = config.returningPlayerConfig.greetings; + chance = config.returningPlayerConfig.greetingChance; + } + } + } + + joinCache.add(player); + } - Optional specialGreeting = config.specialGreetings.getForPlayer(player); - if (specialGreeting.isPresent()) { - greetingList = specialGreeting.get().greetings; - chance = specialGreeting.get().greetingChance; - } + if (Math.random() > (double) chance / 100) { + return; + } - JoinCache joinCache = GreeterBroClient.getJoinCache(); + TickManager.cancelTaskByPlayerName(player); + + List finalGreetingList = greetingList; + TickManager.scheduleTask( + new ScheduledTask( + config.generalConfig.delayRange.getRandomDelayInTicks(), + () -> { + LocalPlayer currentPlayer = Minecraft.getInstance().player; + if (currentPlayer == null) { + return; + } + Random rand = new Random(); + String greetingTemplate = + finalGreetingList.get(rand.nextInt(finalGreetingList.size())); + String greeting = greetingTemplate.replace("%player%", player != null ? player : ""); + if (!greeting.isEmpty()) { + currentPlayer.connection.sendChat(greeting); + } + }, + player)); + } - if (config.returningPlayerConfig.enable) { - if (joinCache.hasRecentlyJoined(player)) { - return; + @Unique + private String getPlayerName(Component message, @Nullable String customMessage) { + // 1. Try Translatable content (vanilla join/rename messages) + if (message.getContents() instanceof TranslatableContents translatable) { + if (translatable.getArgs().length > 0) { + return translatable.getArgument(0).getString(); + } } - if (joinCache.hasJoined(player) && !player.equals(currentPlayerName)) { - if (specialGreeting.isPresent()) { - greetingList = specialGreeting.get().returningGreetings; - chance = specialGreeting.get().greetingChance; - } else { - greetingList = config.returningPlayerConfig.greetings; - chance = config.returningPlayerConfig.greetingChance; - } + + for (Component sibling : message.getSiblings()) { + if (sibling.getContents() instanceof TranslatableContents translatable) { + if (translatable.getArgs().length > 0) { + return translatable.getArgument(0).getString(); + } + } } - } - joinCache.add(player); - } + String flatMessage = message.getString(); + if (customMessage == null || customMessage.isEmpty()) { + return null; + } - if (Math.random() > (double) chance / 100) { - return; - } + Pattern pattern = Pattern.compile(customMessage); + var matcher = pattern.matcher(flatMessage); - TickManager.cancelTaskByPlayerName(player); + if (matcher.matches() && matcher.groupCount() >= 1) { + return matcher.group(1); + } - List finalGreetingList = greetingList; - TickManager.scheduleTask( - new ScheduledTask( - config.generalConfig.delayRange.getRandomDelayInTicks(), - () -> { - ClientPlayerEntity currentPlayer = MinecraftClient.getInstance().player; - if (currentPlayer == null) { - return; - } - Random rand = new Random(); - String greetingTemplate = - finalGreetingList.get(rand.nextInt(finalGreetingList.size())); - String greeting = greetingTemplate.replace("%player%", player != null ? player : ""); - if (!greeting.isEmpty()) { - currentPlayer.networkHandler.sendChatMessage(greeting); - } - }, - player)); - } - - @Unique - private String getPlayerName(Text message, @Nullable String customMessage) { - // 1. Try Translatable content (vanilla join/rename messages) - if (message.getContent() instanceof TranslatableTextContent translatable) { - if (translatable.getArgs().length > 0) { - return translatable.getArg(0).getString(); - } + return null; // Couldn't extract player name } - for (Text sibling : message.getSiblings()) { - if (sibling.getContent() instanceof TranslatableTextContent translatable) { - if (translatable.getArgs().length > 0) { - return translatable.getArg(0).getString(); - } - } + @Unique + private boolean isJoinMessage(Component message) { + String joinMessageKey = "multiplayer.player.joined"; + return this.hasKey(message, joinMessageKey) + || this.hasContent(message, GreeterBroClient.getConfig().generalConfig.customMessage); } - String flatMessage = message.getString(); - if (customMessage == null || customMessage.isEmpty()) { - return null; + @Unique + private boolean isFirstJoin(Component message) { + if (!GreeterBroClient.getConfig().firstJoinConfig.enable) { + return false; + } + return this.hasContent(message, GreeterBroClient.getConfig().firstJoinConfig.customMessage); } - Pattern pattern = Pattern.compile(customMessage); - var matcher = pattern.matcher(flatMessage); - - if (matcher.matches() && matcher.groupCount() >= 1) { - return matcher.group(1); + @Unique + private boolean isNameChange(Component message) { + if (!GreeterBroClient.getConfig().nameChangeConfig.enable) { + return false; + } + String nameChangeKey = "multiplayer.player.joined.renamed"; + return this.hasKey(message, nameChangeKey) + || this.hasContent(message, GreeterBroClient.getConfig().nameChangeConfig.customMessage); } - return null; // Couldn't extract player name - } + @Unique + private boolean hasKey(Component message, String key) { + String vanishKey = "text.vanish.chat.hidden"; + // Vanilla join message + if (message.getContents() instanceof TranslatableContents translatable) { + String messageKey = translatable.getKey(); + return Objects.equals(key, messageKey); + } - @Unique - private boolean isJoinMessage(Text message) { - String joinMessageKey = "multiplayer.player.joined"; - return this.hasKey(message, joinMessageKey) - || this.hasContent(message, GreeterBroClient.getConfig().generalConfig.customMessage); - } + // StyledChat modified default message + boolean hasKey = false; + for (Component sibling : message.getSiblings()) { + if (sibling.getContents() instanceof TranslatableContents translatable) { + String messageKey = translatable.getKey(); + + // ignore if user is in vanish + if (Objects.equals(messageKey, vanishKey)) { + return false; + } + if (Objects.equals(messageKey, key)) { + hasKey = true; + } + } + } - @Unique - private boolean isFirstJoin(Text message) { - if (!GreeterBroClient.getConfig().firstJoinConfig.enable) { - return false; + return hasKey; } - return this.hasContent(message, GreeterBroClient.getConfig().firstJoinConfig.customMessage); - } - @Unique - private boolean isNameChange(Text message) { - if (!GreeterBroClient.getConfig().nameChangeConfig.enable) { - return false; + @Unique + private boolean isLeaveMessage(Component message) { + String leaveMessageKey = "multiplayer.player.left"; + return this.hasKey(message, leaveMessageKey) + || this.hasContent(message, GreeterBroClient.getConfig().generalConfig.customLeaveMessage); } - String nameChangeKey = "multiplayer.player.joined.renamed"; - return this.hasKey(message, nameChangeKey) - || this.hasContent(message, GreeterBroClient.getConfig().nameChangeConfig.customMessage); - } - - @Unique - private boolean hasKey(Text message, String key) { - String vanishKey = "text.vanish.chat.hidden"; - // Vanilla join message - if (message.getContent() instanceof TranslatableTextContent translatable) { - String messageKey = translatable.getKey(); - return Objects.equals(key, messageKey); - } - - // StyledChat modified default message - boolean hasKey = false; - for (Text sibling : message.getSiblings()) { - if (sibling.getContent() instanceof TranslatableTextContent translatable) { - String messageKey = translatable.getKey(); - // ignore if user is in vanish - if (Objects.equals(messageKey, vanishKey)) { - return false; - } - if (Objects.equals(messageKey, key)) { - hasKey = true; + @Unique + private boolean hasContent(Component message, String content) { + String messageString = message.getString().trim(); + if (Objects.equals(content, "") || Objects.equals(messageString, "")) { + return false; } - } - } - - return hasKey; - } - - @Unique - private boolean isLeaveMessage(Text message) { - String leaveMessageKey = "multiplayer.player.left"; - return this.hasKey(message, leaveMessageKey) - || this.hasContent(message, GreeterBroClient.getConfig().generalConfig.customLeaveMessage); - } - - @Unique - private boolean hasContent(Text message, String content) { - String messageString = message.getString().trim(); - if (Objects.equals(content, "") || Objects.equals(messageString, "")) { - return false; + Pattern pattern = Pattern.compile(content); + return pattern.matcher(messageString).matches(); } - Pattern pattern = Pattern.compile(content); - return pattern.matcher(messageString).matches(); - } } diff --git a/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java b/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java index ac4e50e..4ba2344 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java @@ -1,30 +1,30 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; +import com.padbro.greeterbro.client.managers.AfkManager; +import net.minecraft.client.multiplayer.ClientPacketListener; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) +@Mixin(ClientPacketListener.class) public class OnChatSendMixin { - @Inject(method = "sendChatMessage", at = @At("HEAD")) - private void onSendChatMessage(String content, CallbackInfo ci) { - this.onMessageSend(content, ci); - } + @Inject(method = "sendChat", at = @At("HEAD")) + private void onSendChatMessage(String content, CallbackInfo ci) { + this.onMessageSend(content, ci); + } - @Inject(method = "sendChatCommand", at = @At("HEAD")) - private void onSendCommandMessage(String content, CallbackInfo ci) { - this.onMessageSend(content, ci); - } + @Inject(method = "sendCommand", at = @At("HEAD")) + private void onSendCommandMessage(String content, CallbackInfo ci) { + this.onMessageSend(content, ci); + } - @Unique - private void onMessageSend(String content, CallbackInfo ci) { - if (GreeterBroClient.getConfig().afkConfig.enable) { - AfkManager.setLastActiveNow(true); + @Unique + private void onMessageSend(String content, CallbackInfo ci) { + if (GreeterBroClient.getConfig().afkConfig.enable) { + AfkManager.setLastActiveNow(true); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java b/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java index fd67d8b..ba2f3bf 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java @@ -1,64 +1,65 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.JoinCache; -import com.padbro.greeterbro.client.managers.TickManager; import com.padbro.greeterbro.client.config.GreeterBroConfig; -import java.util.List; -import java.util.Random; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; +import com.padbro.greeterbro.client.managers.AfkManager; +import com.padbro.greeterbro.client.managers.TickManager; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.protocol.game.ClientboundLoginPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) +import java.util.List; +import java.util.Random; + +@Mixin(ClientPacketListener.class) public class OnGameJoinMixin { - @Inject(at = @At("RETURN"), method = "onGameJoin") - public void onReady(GameJoinS2CPacket packet, CallbackInfo ci) { - GreeterBroClient.isJoining = true; - GreeterBroConfig config = GreeterBroClient.getConfig(); - JoinCache joinCache = GreeterBroClient.getJoinCache(); - if (!config.generalConfig.enable) { - return; - } + @Inject(at = @At("RETURN"), method = "handleLogin") + public void onReady(ClientboundLoginPacket packet, CallbackInfo ci) { + GreeterBroClient.isJoining = true; + GreeterBroConfig config = GreeterBroClient.getConfig(); + JoinCache joinCache = GreeterBroClient.getJoinCache(); + if (!config.generalConfig.enable) { + return; + } - if (config.afkConfig.enable) { - AfkManager.isAfk = false; - AfkManager.setLastActiveNow(false); - } + if (config.afkConfig.enable) { + AfkManager.isAfk = false; + AfkManager.setLastActiveNow(false); + } - if (joinCache.shouldClearOnJoin()) { - GreeterBroClient.getJoinCache().clear(); - } + if (joinCache.shouldClearOnJoin()) { + GreeterBroClient.getJoinCache().clear(); + } - if (config.generalConfig.enableOwnJoin) { - List greetingList = config.generalConfig.greetings; + if (config.generalConfig.enableOwnJoin) { + List greetingList = config.generalConfig.greetings; - ClientPlayerEntity player = MinecraftClient.getInstance().player; - if (player == null) { - return; - } - TickManager.scheduleTask( - new TickManager.ScheduledTask( - config.generalConfig.delayRange.getRandomDelayInTicks(), - () -> { - ClientPlayerEntity currentPlayer = MinecraftClient.getInstance().player; - if (currentPlayer == null) { - return; - } - Random rand = new Random(); - String greetingTemplate = greetingList.get(rand.nextInt(greetingList.size())); - String greeting = greetingTemplate.replaceAll("\\s*%player%", ""); - if (!greeting.isEmpty()) { - currentPlayer.networkHandler.sendChatMessage(greeting); - } - }, - player.getName().getString())); + LocalPlayer player = Minecraft.getInstance().player; + if (player == null) { + return; + } + TickManager.scheduleTask( + new TickManager.ScheduledTask( + config.generalConfig.delayRange.getRandomDelayInTicks(), + () -> { + LocalPlayer currentPlayer = Minecraft.getInstance().player; + if (currentPlayer == null) { + return; + } + Random rand = new Random(); + String greetingTemplate = greetingList.get(rand.nextInt(greetingList.size())); + String greeting = greetingTemplate.replaceAll("\\s*%player%", ""); + if (!greeting.isEmpty()) { + currentPlayer.connection.sendChat(greeting); + } + }, + player.getName().getString())); + } } - } } diff --git a/src/client/java/com/padbro/greeterbro/client/mixin/OnPlayerListMixin.java b/src/client/java/com/padbro/greeterbro/client/mixin/OnPlayerListMixin.java index 56f55dd..4e85924 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/OnPlayerListMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/OnPlayerListMixin.java @@ -3,34 +3,35 @@ import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.JoinCache; import com.padbro.greeterbro.client.config.GreeterBroConfig; -import java.util.List; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) +import java.util.List; + +@Mixin(ClientPacketListener.class) public class OnPlayerListMixin { - @Inject(method = "onPlayerList", at = @At("TAIL")) - private void onPlayerList(PlayerListS2CPacket packet, CallbackInfo ci) { - if (!GreeterBroClient.isJoining) { - return; - } + @Inject(method = "handlePlayerInfoUpdate", at = @At("TAIL")) + private void onPlayerList(ClientboundPlayerInfoUpdatePacket packet, CallbackInfo ci) { + if (!GreeterBroClient.isJoining) { + return; + } - GreeterBroConfig config = GreeterBroClient.getConfig(); - if (!config.returningPlayerConfig.cacheOnJoin) { - return; - } + GreeterBroConfig config = GreeterBroClient.getConfig(); + if (!config.returningPlayerConfig.cacheOnJoin) { + return; + } - List players = packet.getPlayerAdditionEntries(); - JoinCache joinCache = GreeterBroClient.getJoinCache(); - for (PlayerListS2CPacket.Entry entry : players) { - if (entry.profile() != null) { - joinCache.add(entry.profile().name()); - } + List players = packet.newEntries(); + JoinCache joinCache = GreeterBroClient.getJoinCache(); + for (ClientboundPlayerInfoUpdatePacket.Entry entry : players) { + if (entry.profile() != null) { + joinCache.add(entry.profile().name()); + } + } + GreeterBroClient.isJoining = false; } - GreeterBroClient.isJoining = false; - } } diff --git a/src/client/resources/assets/greeterbro/lang/en_us.json b/src/client/resources/assets/greeterbro/lang/en_us.json index 9f9819f..4aa6b1c 100644 --- a/src/client/resources/assets/greeterbro/lang/en_us.json +++ b/src/client/resources/assets/greeterbro/lang/en_us.json @@ -60,7 +60,6 @@ "text.autoconfig.GreeterBro.option.returningPlayerConfig.cacheClearType.never": "Never", "text.autoconfig.GreeterBro.option.returningPlayerConfig.greetings": "Greetings", "text.autoconfig.GreeterBro.option.returningPlayerConfig.greetings.@Tooltip": "List of greetings to choose from.", - "text.autoconfig.GreeterBro.category.specialGreetings": "Special Greetings", "text.autoconfig.GreeterBro.option.specialGreetings.specialGreetings": "List of special greetings", "text.autoconfig.GreeterBro.option.specialGreetings.specialGreetings.@Tooltip": "The list of all special greetings for specific players.", @@ -73,7 +72,6 @@ "text.autoconfig.GreeterBro.option.SpecialGreeting.greetings.@Tooltip": "List of greetings to choose from.", "text.autoconfig.GreeterBro.option.SpecialGreeting.returningGreetings": "Returning greetings", "text.autoconfig.GreeterBro.option.SpecialGreeting.returningGreetings.@Tooltip": "List of greetings to use when the player returns.\nRequires the \"Returning player\" config to be enabled.", - "text.autoconfig.GreeterBro.category.blacklist": "Blacklist", "text.autoconfig.GreeterBro.option.blacklistConfig.players": "Players", "text.autoconfig.GreeterBro.title": "GreeterBro", diff --git a/src/main/java/com/padbro/greeterbro/GreeterBro.java b/src/main/java/com/padbro/greeterbro/GreeterBro.java index 05cfa57..dc6c97d 100644 --- a/src/main/java/com/padbro/greeterbro/GreeterBro.java +++ b/src/main/java/com/padbro/greeterbro/GreeterBro.java @@ -4,6 +4,7 @@ public class GreeterBro implements ModInitializer { - @Override - public void onInitialize() {} + @Override + public void onInitialize() { + } }