diff --git a/src/main/java/land/chipmunk/chipmunkmod/Configuration.java b/src/main/java/land/chipmunk/chipmunkmod/Configuration.java index c70758e..433ec10 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/Configuration.java +++ b/src/main/java/land/chipmunk/chipmunkmod/Configuration.java @@ -10,6 +10,7 @@ public class Configuration { public CommandCore core = new CommandCore(); public Bots bots = new Bots(); public CustomChat customChat = new CustomChat(); + public String autoSkinUsername = "off"; public static class CommandManager { public String prefix = "."; diff --git a/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java b/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java index 6e32ad1..7e3e847 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java +++ b/src/main/java/land/chipmunk/chipmunkmod/command/CommandManager.java @@ -38,6 +38,7 @@ public class CommandManager { RainbowNameCommand.register(this.dispatcher); SayCommand.register(this.dispatcher); SelfCareCommand.register(this.dispatcher); + AutoSkinCommand.register(this.dispatcher); } public void executeCommand (String command) { diff --git a/src/main/java/land/chipmunk/chipmunkmod/commands/AutoSkinCommand.java b/src/main/java/land/chipmunk/chipmunkmod/commands/AutoSkinCommand.java new file mode 100644 index 0000000..c860ec3 --- /dev/null +++ b/src/main/java/land/chipmunk/chipmunkmod/commands/AutoSkinCommand.java @@ -0,0 +1,41 @@ +package land.chipmunk.chipmunkmod.commands; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.context.CommandContext; +import land.chipmunk.chipmunkmod.modules.SelfCare; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.text.Text; + +import static com.mojang.brigadier.arguments.StringArgumentType.getString; +import static com.mojang.brigadier.arguments.StringArgumentType.string; +import static land.chipmunk.chipmunkmod.command.CommandManager.argument; +import static land.chipmunk.chipmunkmod.command.CommandManager.literal; + +public class AutoSkinCommand { + public static void register (CommandDispatcher dispatcher) { + dispatcher.register( + literal("autoskin") + .then( + argument("username", string()) // i don't think theres an account with space(s) + .executes(AutoSkinCommand::execute) + ) + ); + } + + public static int execute(CommandContext context) { + final FabricClientCommandSource source = context.getSource(); + + final String username = getString(context, "username"); + + SelfCare.INSTANCE.skin(username); + + if (username.equals("off")) source.sendFeedback(Text.literal("Successfully disabled auto skin")); + else { + SelfCare.INSTANCE.hasSkin(false); + source.sendFeedback(Text.literal("Set your auto skin username to: " + username)); + } + + return Command.SINGLE_SUCCESS; + } +} diff --git a/src/main/java/land/chipmunk/chipmunkmod/modules/SelfCare.java b/src/main/java/land/chipmunk/chipmunkmod/modules/SelfCare.java index 3a6b4d0..db5e3cc 100644 --- a/src/main/java/land/chipmunk/chipmunkmod/modules/SelfCare.java +++ b/src/main/java/land/chipmunk/chipmunkmod/modules/SelfCare.java @@ -1,5 +1,6 @@ package land.chipmunk.chipmunkmod.modules; +import land.chipmunk.chipmunkmod.ChipmunkMod; import land.chipmunk.chipmunkmod.listeners.Listener; import land.chipmunk.chipmunkmod.listeners.ListenerManager; import lombok.Setter; @@ -17,20 +18,28 @@ import java.util.TimerTask; public class SelfCare extends Listener { private final MinecraftClient client; @Getter private final long interval; + @Getter private final long chatInterval; @Getter @Setter private boolean opEnabled = true; @Getter @Setter private boolean gamemodeEnabled = true; @Getter @Setter private boolean cspyEnabled = true; + @Getter @Setter private String skin; + private boolean cspy = false; + @Getter @Setter private boolean hasSkin = false; private Timer timer = null; + private Timer chatTimer = null; - public static final SelfCare INSTANCE = new SelfCare(MinecraftClient.getInstance(), 70L); + public static final SelfCare INSTANCE = new SelfCare(MinecraftClient.getInstance(), 70L, 500L); // make the intervals in config? - public SelfCare (MinecraftClient client, long interval) { + public SelfCare (MinecraftClient client, long interval, long chatInterval) { this.client = client; this.interval = interval; + this.chatInterval = chatInterval; + + this.skin = ChipmunkMod.CONFIG.autoSkinUsername == null ? "off" : ChipmunkMod.CONFIG.autoSkinUsername; // can this be null? ListenerManager.addListener(this); } @@ -42,18 +51,34 @@ public class SelfCare extends Listener { } }; - if (timer != null) cleanup(); + final TimerTask chatTask = new TimerTask() { + public void run () { + chatTick(); + } + }; + + if (timer != null || chatTimer != null) cleanup(); timer = new Timer(); + chatTimer = new Timer(); + timer.schedule(task, interval, interval); + chatTimer.schedule(chatTask, chatInterval, chatInterval); } public void cleanup () { - if (timer == null) return; + if (timer == null || chatTimer == null) return; timer.cancel(); timer.purge(); timer = null; + + chatTimer.cancel(); + chatTimer.purge(); + chatTimer = null; + + hasSkin = false; + // cspy too mabe? } @Override @@ -62,6 +87,12 @@ public class SelfCare extends Listener { if (stringMessage.equals("Successfully enabled CommandSpy")) cspy = true; else if (stringMessage.equals("Successfully disabled CommandSpy")) cspy = false; + + else if (stringMessage.equals("Successfully set your skin to " + skin + "'s")) hasSkin = true; + else if ( + stringMessage.equals("Successfully removed your skin") || + stringMessage.startsWith("Successfully set your skin to ") + ) hasSkin = false; } public void tick () { @@ -75,7 +106,13 @@ public class SelfCare extends Listener { if (player != null && !player.hasPermissionLevel(2) && opEnabled) { if (serverHasCommand("op")) networkHandler.sendChatCommand("op @s[type=player]"); } else if (client.player != null && !client.player.isCreative() && gamemodeEnabled) networkHandler.sendChatCommand("gamemode creative"); - else if (!cspy && cspyEnabled) { if (serverHasCommand("c")) networkHandler.sendChatCommand("c on"); } + } + + public void chatTick () { + final ClientPlayNetworkHandler networkHandler = client.getNetworkHandler(); + + if (!cspy && cspyEnabled) { if (serverHasCommand("c")) networkHandler.sendChatCommand("c on"); } + else if (!hasSkin && !skin.equals("off")) { if (serverHasCommand("skin")) networkHandler.sendChatCommand("skin " + skin); } } // TODO: Move this into a separate class related to server info gathering (and yes, I plan on making this d y n a m i c and require little to no configuration for most servers) diff --git a/src/main/resources/assets/chipmunkmod/default_config.json b/src/main/resources/assets/chipmunkmod/default_config.json index 0d7a94a..e3811f1 100644 --- a/src/main/resources/assets/chipmunkmod/default_config.json +++ b/src/main/resources/assets/chipmunkmod/default_config.json @@ -30,5 +30,7 @@ } ] } - } + }, + + "autoSkinUsername": "off" }