From 06698c436b05bfdb5e3be80f85d057f10948d26f Mon Sep 17 00:00:00 2001 From: GeorgeRNG Date: Sat, 8 Apr 2023 13:02:46 +0100 Subject: [PATCH] Add autojoin --- .../dev/dfonline/codeclient/CodeClient.java | 15 +++- .../dfonline/codeclient/config/Config.java | 76 ++++++++++++++++--- .../codeclient/mixin/MTitleScreen.java | 25 ++++++ src/main/resources/CodeClient.mixins.json | 3 +- 4 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 src/main/java/dev/dfonline/codeclient/mixin/MTitleScreen.java diff --git a/src/main/java/dev/dfonline/codeclient/CodeClient.java b/src/main/java/dev/dfonline/codeclient/CodeClient.java index 2ec5226c..b92de72f 100644 --- a/src/main/java/dev/dfonline/codeclient/CodeClient.java +++ b/src/main/java/dev/dfonline/codeclient/CodeClient.java @@ -39,7 +39,7 @@ public class CodeClient implements ModInitializer { public static final MinecraftClient MC = MinecraftClient.getInstance(); public static final Gson gson = new Gson(); private static KeyBinding editBind; - + public static AutoJoin autoJoin = AutoJoin.NONE; @NotNull public static Action currentAction = new None(); @@ -68,6 +68,10 @@ public static void onTick() { while(editBind.isPressed()) { MC.setScreen(new DevInventoryScreen(MC.player)); } + if(autoJoin == AutoJoin.PLOT) { + MC.getNetworkHandler().sendCommand("join " + Config.getConfig().AutoJoinPlotId); + autoJoin = AutoJoin.NONE; + } } @Override @@ -81,6 +85,9 @@ public void onInitialize() { LOGGER.error(e.getMessage()); } } + if(Config.getConfig().AutoJoin) { + autoJoin = AutoJoin.GAME; + } editBind = KeyBindingHelper.registerKeyBinding(new KeyBinding( "key.codeclient.actionpallete", @@ -93,4 +100,10 @@ public void onInitialize() { Commands.register(dispatcher); }); } + + public enum AutoJoin { + NONE, + GAME, + PLOT + } } diff --git a/src/main/java/dev/dfonline/codeclient/config/Config.java b/src/main/java/dev/dfonline/codeclient/config/Config.java index 6e7f84bf..3e71da19 100644 --- a/src/main/java/dev/dfonline/codeclient/config/Config.java +++ b/src/main/java/dev/dfonline/codeclient/config/Config.java @@ -21,6 +21,10 @@ public class Config { public boolean CCDBUG = true; public boolean CustomBlockInteractions = true; public boolean CustomTagInteraction = false; + public boolean AutoJoin = false; + public Node AutoNode = Node.None; + public boolean AutoJoinPlot = false; + public int AutoJoinPlotId = 0; private void save() { try { @@ -32,6 +36,10 @@ private void save() { object.addProperty("CCDBUG",CCDBUG); object.addProperty("CustomBlockInteractions",CustomBlockInteractions); object.addProperty("CustomTagInteraction",CustomTagInteraction); + object.addProperty("AutoJoin", AutoJoin); + object.addProperty("AutoNode",AutoNode.name()); + object.addProperty("AutoJoinPlot",AutoJoinPlot); + object.addProperty("AutoJoinPlotId",AutoJoinPlotId); FileManager.writeFile("options.json", object.toString()); } catch (Exception e) { CodeClient.LOGGER.info("Couldn't save config: " + e); @@ -129,20 +137,70 @@ public YetAnotherConfigLib getLibConfig() { .controller(TickBoxController::new) .build()) .build()) + .category(ConfigCategory.createBuilder() + .name(Text.literal("AutoJoin")) + .tooltip(Text.literal("If and where to auto join")) + .option(Option.createBuilder(boolean.class) + .name(Text.literal("Enabled")) + .tooltip(Text.literal("If CodeClient should automatically connect you to DF.")) + .binding( + false, + () -> AutoJoin, + opt -> AutoJoin = opt + ) + .controller(TickBoxController::new) + .build()) + .option(Option.createBuilder(Node.class) + .name(Text.literal("Node")) + .tooltip(Text.literal("Which node you should be sent to, or have DF handle it.")) + .binding( + Node.None, + () -> AutoNode, + opt -> AutoNode = opt + ) + .controller(EnumController::new) +// .available(AutoJoin) + .build()) + .option(Option.createBuilder(boolean.class) + .name(Text.literal("Auto join plot")) + .tooltip(Text.literal("If you should automatically be sent to a plot.")) + .binding( + false, + () -> AutoJoinPlot, + opt -> AutoJoinPlot = opt + ) + .controller(TickBoxController::new) + .build()) + .option(Option.createBuilder(int.class) + .name(Text.literal("Plot ID")) + .tooltip(Text.literal("The plot ID of the plot to automatically join, if enabled.")) + .binding( + 0, + () -> AutoJoinPlotId, + opt -> AutoJoinPlotId = opt + ) + .controller(IntegerFieldController::new) + .build()) + .build()) .save(this::save) .build(); } public enum Node { - None, - Node1, - Node2, - Node3, - Node4, - Node5, - Node6, - Node7, - Beta, + None(""), + Node1("node1."), + Node2("node2."), + Node3("node3."), + Node4("node4."), + Node5("node5."), + Node6("node6."), + Node7("node7."), + Beta("beta."); + + public final String prepend; + Node(String prepend) { + this.prepend = prepend; + } } public Config() { diff --git a/src/main/java/dev/dfonline/codeclient/mixin/MTitleScreen.java b/src/main/java/dev/dfonline/codeclient/mixin/MTitleScreen.java new file mode 100644 index 00000000..7a68f213 --- /dev/null +++ b/src/main/java/dev/dfonline/codeclient/mixin/MTitleScreen.java @@ -0,0 +1,25 @@ +package dev.dfonline.codeclient.mixin; + +import dev.dfonline.codeclient.CodeClient; +import dev.dfonline.codeclient.config.Config; +import net.minecraft.client.gui.screen.ConnectScreen; +import net.minecraft.client.gui.screen.TitleScreen; +import net.minecraft.client.network.ServerAddress; +import net.minecraft.client.network.ServerInfo; +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(TitleScreen.class) +public class MTitleScreen { + @Inject(method = "init", at = @At("RETURN")) + public void onInit(CallbackInfo ci) { + if(CodeClient.autoJoin == CodeClient.AutoJoin.GAME) { + ServerInfo info = new ServerInfo("DiamondFire", Config.getConfig().AutoNode.prepend + "mcdiamondfire.com", false); + ConnectScreen.connect((TitleScreen)(Object)this, CodeClient.MC, ServerAddress.parse(info.address), info); + + CodeClient.autoJoin =Config.getConfig().AutoJoinPlot ? CodeClient.AutoJoin.PLOT : CodeClient.AutoJoin.NONE; + } + } +} diff --git a/src/main/resources/CodeClient.mixins.json b/src/main/resources/CodeClient.mixins.json index 9926b4a9..612b84ea 100644 --- a/src/main/resources/CodeClient.mixins.json +++ b/src/main/resources/CodeClient.mixins.json @@ -14,7 +14,8 @@ "MInGameHud", "MInGameOverlayRenderer", "MLivingEntity", - "MPlayerEntity" + "MPlayerEntity", + "MTitleScreen" ], "injectors": { "defaultRequire": 1