diff options
Diffstat (limited to 'src/main/java/de/hysky')
4 files changed, 87 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java index 29889c28..df0c058e 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java @@ -1,17 +1,30 @@ package de.hysky.skyblocker.mixin; import de.hysky.skyblocker.skyblock.item.HotbarSlotLock; +import de.hysky.skyblocker.utils.JoinWorldPlaceholderScreen; +import de.hysky.skyblocker.utils.ReconfiguringPlaceholderScreen; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.DownloadingTerrainScreen; +import net.minecraft.client.gui.screen.ReconfiguringScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import dev.cbyrne.betterinject.annotations.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(MinecraftClient.class) public abstract class MinecraftClientMixin { + + @Shadow + @Nullable + public abstract ClientPlayNetworkHandler getNetworkHandler(); + @Shadow @Nullable public ClientPlayerEntity player; @@ -22,4 +35,22 @@ public abstract class MinecraftClientMixin { HotbarSlotLock.handleInputEvents(player); } } + + //Remove Downloading Terrain Screen and Reconfiguring Screen + @ModifyVariable(at = @At("HEAD"), method = "setScreen", ordinal = 0, argsOnly = true) + public Screen modifySetScreen(Screen screen) { + if (Utils.isOnSkyblock()) { + if (screen instanceof DownloadingTerrainScreen) { + return null; + } else if (screen instanceof ReconfiguringScreen && this.getNetworkHandler() != null) { + return new ReconfiguringPlaceholderScreen(this.getNetworkHandler().getConnection()); + } + } + return screen; + } + + @ModifyArg(method = "joinWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;reset(Lnet/minecraft/client/gui/screen/Screen;)V"), index = 0) + private Screen modifyJoinWorld(Screen screen) { + return Utils.isOnSkyblock() ? new JoinWorldPlaceholderScreen() : screen; + } }
\ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/utils/BasePlaceholderScreen.java b/src/main/java/de/hysky/skyblocker/utils/BasePlaceholderScreen.java new file mode 100644 index 00000000..25c88318 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/BasePlaceholderScreen.java @@ -0,0 +1,20 @@ +package de.hysky.skyblocker.utils; + +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.text.Text; + +public abstract class BasePlaceholderScreen extends Screen { + + public BasePlaceholderScreen(Text title) { + super(title); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + } + + @Override + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/JoinWorldPlaceholderScreen.java b/src/main/java/de/hysky/skyblocker/utils/JoinWorldPlaceholderScreen.java new file mode 100644 index 00000000..a809314e --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/JoinWorldPlaceholderScreen.java @@ -0,0 +1,12 @@ +package de.hysky.skyblocker.utils; + +import net.minecraft.text.Text; + +public final class JoinWorldPlaceholderScreen extends BasePlaceholderScreen { + + private static final String SCREEN_TITLE = "Joining World Screen"; + + public JoinWorldPlaceholderScreen() { + super(Text.literal(SCREEN_TITLE)); + } +} diff --git a/src/main/java/de/hysky/skyblocker/utils/ReconfiguringPlaceholderScreen.java b/src/main/java/de/hysky/skyblocker/utils/ReconfiguringPlaceholderScreen.java new file mode 100644 index 00000000..c2333bb8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/ReconfiguringPlaceholderScreen.java @@ -0,0 +1,24 @@ +package de.hysky.skyblocker.utils; + +import net.minecraft.network.ClientConnection; +import net.minecraft.text.Text; + +public final class ReconfiguringPlaceholderScreen extends BasePlaceholderScreen { + private static final String SCREEN_TITLE = "Reconfig Screen"; + + private final ClientConnection connection; + + public ReconfiguringPlaceholderScreen(final ClientConnection connection) { + super(Text.literal(SCREEN_TITLE)); + this.connection = connection; + } + + @Override + public void tick() { + if (this.connection.isOpen()) { + this.connection.tick(); + } else { + this.connection.handleDisconnection(); + } + } +} |