diff --git a/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java b/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java index 674f241..0d72c3a 100644 --- a/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java +++ b/src/client/java/com/padbro/greeterbro/client/GreeterBroClient.java @@ -2,6 +2,9 @@ import com.padbro.greeterbro.client.commands.CommandManager; import com.padbro.greeterbro.client.config.GreeterBroConfig; +import com.padbro.greeterbro.client.managers.AfkManager; +import com.padbro.greeterbro.client.managers.MigrationManager; +import com.padbro.greeterbro.client.managers.TickManager; import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.ConfigHolder; import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer; @@ -34,6 +37,7 @@ public static void saveConfig() { @Override public void onInitializeClient() { config = AutoConfig.register(GreeterBroConfig.class, Toml4jConfigSerializer::new); + MigrationManager.migrate(); joinCache = JoinCache.loadCache(); 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 6bee200..edcfe19 100644 --- a/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java +++ b/src/client/java/com/padbro/greeterbro/client/commands/AfkCommand.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; -import com.padbro.greeterbro.client.AfkManager; +import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.config.AfkNotifyType; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; 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 473b160..f011da8 100644 --- a/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java +++ b/src/client/java/com/padbro/greeterbro/client/config/GeneralConfig.java @@ -6,10 +6,10 @@ import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; -import javax.xml.transform.Source; - @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; @@ -17,7 +17,8 @@ public class GeneralConfig implements ConfigData { @ConfigEntry.Gui.Tooltip public String customMessage = ""; @ConfigEntry.BoundedDiscrete(max = 100) - @ConfigEntry.Gui.Tooltip public int greetingChance = 100; + @ConfigEntry.Gui.Tooltip + public int greetingChance = 100; public boolean cancelOnLeave = true; @ConfigEntry.Gui.Tooltip public String customLeaveMessage = ""; @@ -25,12 +26,13 @@ public class GeneralConfig implements ConfigData { @ConfigEntry.Gui.Tooltip public List greetings = List.of("Hello", "o/"); @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) - public DelayRange delayRange = new DelayRange(20, 60); + public DelayRange delayRange = new DelayRange(3, 5); @Override public void validatePostLoad() { - int actualMin = Math.min(this.delayRange.min, this.delayRange.max); - int actualMax = Math.max(this.delayRange.min, this.delayRange.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); @@ -39,21 +41,24 @@ public void validatePostLoad() { } public static class DelayRange { - int min; + @ConfigEntry.BoundedDiscrete(max = 10, min = 0) + public float min; - int max; + @ConfigEntry.BoundedDiscrete(max = 10, min = 0) + public float max; - DelayRange(int min, int max) { + DelayRange(float min, float max) { this.min = min; this.max = max; } - public int getRandomDelay() { - int actualMin = Math.min(this.min, this.max); - int actualMax = Math.max(this.min, this.max); - int min = Math.max(actualMin, 0); - int max = Math.max(actualMax, 0); - return (int) (Math.random() * (max - min + 1)) + min; + 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/AfkManager.java b/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java similarity index 96% rename from src/client/java/com/padbro/greeterbro/client/AfkManager.java rename to src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java index b3ac4f7..f1a13bf 100644 --- a/src/client/java/com/padbro/greeterbro/client/AfkManager.java +++ b/src/client/java/com/padbro/greeterbro/client/managers/AfkManager.java @@ -1,5 +1,6 @@ -package com.padbro.greeterbro.client; +package com.padbro.greeterbro.client.managers; +import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.config.AfkConfig; import com.padbro.greeterbro.client.config.AfkNotifyType; import com.padbro.greeterbro.client.config.GeneralConfig; @@ -11,7 +12,6 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -import org.jetbrains.annotations.Nullable; public class AfkManager { private static final MinecraftClient minecraftInstance = MinecraftClient.getInstance(); diff --git a/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java b/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java new file mode 100644 index 0000000..a83a69d --- /dev/null +++ b/src/client/java/com/padbro/greeterbro/client/managers/MigrationManager.java @@ -0,0 +1,27 @@ +package com.padbro.greeterbro.client.managers; + +import com.padbro.greeterbro.client.GreeterBroClient; +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; + + 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; + } + + if (migrated) { + GreeterBroClient.saveConfig(); + } + } +} diff --git a/src/client/java/com/padbro/greeterbro/client/TickManager.java b/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java similarity index 95% rename from src/client/java/com/padbro/greeterbro/client/TickManager.java rename to src/client/java/com/padbro/greeterbro/client/managers/TickManager.java index 98a8622..02ff6ca 100644 --- a/src/client/java/com/padbro/greeterbro/client/TickManager.java +++ b/src/client/java/com/padbro/greeterbro/client/managers/TickManager.java @@ -1,4 +1,4 @@ -package com.padbro.greeterbro.client; +package com.padbro.greeterbro.client.managers; import java.util.LinkedList; import java.util.List; 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 be6a44d..e623996 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/ChatMixin.java @@ -1,10 +1,10 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.AfkManager; +import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.JoinCache; -import com.padbro.greeterbro.client.TickManager; -import com.padbro.greeterbro.client.TickManager.ScheduledTask; +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; @@ -106,7 +106,7 @@ public void onMessage(Text message, boolean overlay, CallbackInfo ci) { List finalGreetingList = greetingList; TickManager.scheduleTask( new ScheduledTask( - config.generalConfig.delayRange.getRandomDelay(), + config.generalConfig.delayRange.getRandomDelayInTicks(), () -> { ClientPlayerEntity currentPlayer = MinecraftClient.getInstance().player; if (currentPlayer == null) { 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 3a6eaa9..ac4e50e 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/OnChatSendMixin.java @@ -1,6 +1,6 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.AfkManager; +import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import org.spongepowered.asm.mixin.Mixin; 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 0fd91b0..fd67d8b 100644 --- a/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java +++ b/src/client/java/com/padbro/greeterbro/client/mixin/OnGameJoinMixin.java @@ -1,9 +1,9 @@ package com.padbro.greeterbro.client.mixin; -import com.padbro.greeterbro.client.AfkManager; +import com.padbro.greeterbro.client.managers.AfkManager; import com.padbro.greeterbro.client.GreeterBroClient; import com.padbro.greeterbro.client.JoinCache; -import com.padbro.greeterbro.client.TickManager; +import com.padbro.greeterbro.client.managers.TickManager; import com.padbro.greeterbro.client.config.GreeterBroConfig; import java.util.List; import java.util.Random; @@ -45,7 +45,7 @@ public void onReady(GameJoinS2CPacket packet, CallbackInfo ci) { } TickManager.scheduleTask( new TickManager.ScheduledTask( - config.generalConfig.delayRange.getRandomDelay(), + config.generalConfig.delayRange.getRandomDelayInTicks(), () -> { ClientPlayerEntity currentPlayer = MinecraftClient.getInstance().player; if (currentPlayer == null) { diff --git a/src/client/resources/assets/greeterbro/lang/en_us.json b/src/client/resources/assets/greeterbro/lang/en_us.json index 616b139..9f9819f 100644 --- a/src/client/resources/assets/greeterbro/lang/en_us.json +++ b/src/client/resources/assets/greeterbro/lang/en_us.json @@ -13,7 +13,7 @@ "text.autoconfig.GreeterBro.option.generalConfig.customLeaveMessage.@Tooltip": "Custom leave message sent by the server.\nRegex supported.\nThe first capture group will be used as the player name.", "text.autoconfig.GreeterBro.option.generalConfig.greetings": "Greetings", "text.autoconfig.GreeterBro.option.generalConfig.greetings.@Tooltip": "List of greetings to choose from.", - "text.autoconfig.GreeterBro.option.generalConfig.delayRange": "Range of delay in ticks for the auto greeting", + "text.autoconfig.GreeterBro.option.generalConfig.delayRange": "Range of delay in seconds for the auto greeting", "text.autoconfig.GreeterBro.option.generalConfig.delayRange.min": "Min", "text.autoconfig.GreeterBro.option.generalConfig.delayRange.max": "Max", "text.autoconfig.GreeterBro.option.generalConfig.customFirstJoinMessage": "Custom first join message",