summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java45
-rw-r--r--src/main/java/club/eviltransgenders/autoreconnect/mixin/ConnectScreenMixin.java20
-rw-r--r--src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java26
-rw-r--r--src/main/resources/assets/rosas-auto-reconnect/lang/en_us.json3
-rw-r--r--src/main/resources/autoreconnect.mixins.json13
-rw-r--r--src/main/resources/fabric.mod.json32
6 files changed, 139 insertions, 0 deletions
diff --git a/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java b/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java
new file mode 100644
index 0000000..d756c23
--- /dev/null
+++ b/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java
@@ -0,0 +1,45 @@
+package club.eviltransgenders.autoreconnect;
+
+import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.minecraft.client.gui.components.Button;
+import net.minecraft.client.gui.screens.ConnectScreen;
+import net.minecraft.client.gui.screens.DisconnectedScreen;
+import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
+import net.minecraft.client.gui.screens.Screen;
+import net.minecraft.client.gui.screens.TitleScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.multiplayer.resolver.ServerAddress;
+import net.minecraft.client.multiplayer.ServerData;
+import net.minecraft.network.chat.Component;
+
+public final class AutoReconnect implements ClientModInitializer {
+ private static AutoReconnect instance;
+ private long reconnectTimer;
+ public ServerData lastServerData;
+
+ @Override
+ public void onInitializeClient() {
+ instance = this;
+ ScreenEvents.AFTER_INIT.register(this::afterScreenInit);
+ }
+
+ public void afterScreenInit(Minecraft client, Screen screen, int scaledWidth, int scaledHeight) {
+ if (screen instanceof DisconnectedScreen) {
+ this.reconnectTimer = 5 * 20;
+ ScreenEvents.afterTick(screen).register(this::afterScreenTick);
+ }
+ }
+
+ public void afterScreenTick(Screen screen) {
+ if (--this.reconnectTimer <= 0) {
+ ConnectScreen.startConnecting(new JoinMultiplayerScreen(new TitleScreen()), Minecraft.getInstance(), ServerAddress.parseString(this.lastServerData.ip), this.lastServerData, false, null);
+ } else {
+ ((Button) screen.children().getLast()).setMessage(Component.translatable("gui.autoreconnect.reconnect", this.reconnectTimer / 20));
+ }
+ }
+
+ public static AutoReconnect getInstance() {
+ return instance;
+ }
+}
diff --git a/src/main/java/club/eviltransgenders/autoreconnect/mixin/ConnectScreenMixin.java b/src/main/java/club/eviltransgenders/autoreconnect/mixin/ConnectScreenMixin.java
new file mode 100644
index 0000000..dd2e4a1
--- /dev/null
+++ b/src/main/java/club/eviltransgenders/autoreconnect/mixin/ConnectScreenMixin.java
@@ -0,0 +1,20 @@
+package club.eviltransgenders.autoreconnect.mixin;
+
+import club.eviltransgenders.autoreconnect.AutoReconnect;
+import net.minecraft.client.gui.screens.ConnectScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.multiplayer.resolver.ServerAddress;
+import net.minecraft.client.multiplayer.ServerData;
+import net.minecraft.client.multiplayer.TransferState;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.Mixin;
+
+@Mixin(ConnectScreen.class)
+public abstract class ConnectScreenMixin {
+ @Inject(at = @At("HEAD"), method = "connect")
+ private void updateLastServerData(Minecraft client, ServerAddress hostAndPort, ServerData serverData, TransferState transferState, CallbackInfo ci) {
+ AutoReconnect.getInstance().lastServerData = serverData;
+ }
+}
diff --git a/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java b/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java
new file mode 100644
index 0000000..99a59f9
--- /dev/null
+++ b/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java
@@ -0,0 +1,26 @@
+package club.eviltransgenders.autoreconnect.mixin;
+
+import net.minecraft.client.gui.components.Button;
+import net.minecraft.client.gui.layouts.LinearLayout;
+import net.minecraft.client.gui.screens.DisconnectedScreen;
+import net.minecraft.network.chat.Component;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+
+@Mixin(DisconnectedScreen.class)
+public abstract class DisconnectedScreenMixin {
+ @Shadow
+ @Final
+ private LinearLayout layout;
+
+ @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/layouts/LinearLayout;visitWidgets(Ljava/util/function/Consumer;)V"), method = "init")
+ private void addAutoReconnectButtons(CallbackInfo ci) {
+ Button reconnectButton = Button.builder(Component.translatable("gui.autoreconnect.reconnect"), btn -> {}).width(200).build();
+ this.layout.addChild(reconnectButton);
+ this.layout.arrangeElements();
+ }
+}
diff --git a/src/main/resources/assets/rosas-auto-reconnect/lang/en_us.json b/src/main/resources/assets/rosas-auto-reconnect/lang/en_us.json
new file mode 100644
index 0000000..1fc122d
--- /dev/null
+++ b/src/main/resources/assets/rosas-auto-reconnect/lang/en_us.json
@@ -0,0 +1,3 @@
+{
+ "gui.autoreconnect.reconnect": "Reconnect (%ss)"
+}
diff --git a/src/main/resources/autoreconnect.mixins.json b/src/main/resources/autoreconnect.mixins.json
new file mode 100644
index 0000000..dbddf24
--- /dev/null
+++ b/src/main/resources/autoreconnect.mixins.json
@@ -0,0 +1,13 @@
+{
+ "client": [
+ "ConnectScreenMixin",
+ "DisconnectedScreenMixin"
+ ],
+ "compatibilityLevel": "JAVA_21",
+ "injectors": {
+ "defaultRequire": 1
+ },
+ "minVersion": "0.8",
+ "package": "club.eviltransgenders.autoreconnect.mixin",
+ "required": true
+}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
new file mode 100644
index 0000000..4be2f64
--- /dev/null
+++ b/src/main/resources/fabric.mod.json
@@ -0,0 +1,32 @@
+{
+ "schemaVersion": 1,
+ "id": "rosas-auto-reconnect",
+ "version": "${version}",
+ "name": "Auto Reconnect",
+ "description": "Dead simple auto-reconnect mod",
+ "authors": [
+ {
+ "name": "Rosa (evilandqueer)",
+ "contact": {
+ "email": "rosaontheweb@proton.me"
+ }
+ }
+ ],
+ "contributors": [],
+ "contact": {
+ "issues": "https://codeberg.org/evilandqueer/rosas-auto-reconnect/issues",
+ "sources": "https://codeberg.org/evilandqueer/rosas-auto-reconnect"
+ },
+ "license": "Unlicense",
+ "icon": "icon.png",
+ "environment": "client",
+ "entrypoints": {
+ "client": ["club.eviltransgenders.autoreconnect.AutoReconnect"]
+ },
+ "mixins": ["autoreconnect.mixins.json"],
+ "depends": {
+ "fabric-api": ">=0.141.4+1.21.11",
+ "fabricloader": ">=0.17.3",
+ "minecraft": ">=1.21.11"
+ }
+}