From 25a8e9a787ae819343526ed655296c84f0c2b2be Mon Sep 17 00:00:00 2001 From: tildejustin Date: Sat, 21 Jun 2025 10:35:20 -0400 Subject: [PATCH 1/3] fix button location --- .../mixins/screen/OptionsScreenMixin.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/redlimerl/speedrunigt/mixins/screen/OptionsScreenMixin.java b/src/main/java/com/redlimerl/speedrunigt/mixins/screen/OptionsScreenMixin.java index be0ea1e0c..4065bf65b 100644 --- a/src/main/java/com/redlimerl/speedrunigt/mixins/screen/OptionsScreenMixin.java +++ b/src/main/java/com/redlimerl/speedrunigt/mixins/screen/OptionsScreenMixin.java @@ -3,14 +3,11 @@ import com.llamalad7.mixinextras.sugar.Local; import com.redlimerl.speedrunigt.SpeedRunIGTUpdateChecker; import com.redlimerl.speedrunigt.gui.screen.SpeedRunOptionScreen; -import com.redlimerl.speedrunigt.utils.ButtonWidgetHelper; -import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.OptionsScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.DirectionalLayoutWidget; -import net.minecraft.client.gui.widget.Positioner; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; @@ -26,20 +23,27 @@ public class OptionsScreenMixin extends Screen { private static final Identifier ENDER_EYE = new Identifier("textures/item/ender_eye.png"); private ButtonWidget timerButton; + private DirectionalLayoutWidget headerWidget; protected OptionsScreenMixin(Text title) { super(title); } - @Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/DirectionalLayoutWidget;add(Lnet/minecraft/client/gui/widget/Widget;)Lnet/minecraft/client/gui/widget/Widget;", ordinal = 1)) + @Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/option/OptionsScreen;initTabNavigation()V")) private void onInit(CallbackInfo ci, @Local(ordinal = 1) DirectionalLayoutWidget widget) { - timerButton = widget.add(ButtonWidget.builder(Text.empty(), (buttonWidget) -> { + headerWidget = widget; + timerButton = this.addDrawableChild(ButtonWidget.builder(Text.empty(), (buttonWidget) -> { if (this.client != null) { this.client.setScreen(new SpeedRunOptionScreen(this)); } }).size(20, 20).build()); } + @Inject(method = "initTabNavigation", at = @At("TAIL")) + private void onRescale(CallbackInfo ci) { + timerButton.setPosition(headerWidget.getX() - 25, headerWidget.getY()); + } + @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { super.render(context, mouseX, mouseY, delta); From adae7a826042ce66131e4e146a16f43b1bcd5a44 Mon Sep 17 00:00:00 2001 From: tildejustin Date: Sat, 21 Jun 2025 12:24:57 -0400 Subject: [PATCH 2/3] kinda hacky portal retiming for ssg --- .../mixins/ClientPlayerEntityMixin.java | 29 +++++++++++-------- .../speedrunigt/timer/InGameTimer.java | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java b/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java index 5402b50f2..a560924c5 100644 --- a/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java +++ b/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java @@ -18,6 +18,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -190,24 +191,28 @@ private void onMove(MovementType movementType, Vec3d vec3d, CallbackInfo ci) { } - private Long latestPortalEnter = null; - private int portalTick = 0; + private static int portalTick = 0; + private static Identifier lastDimension; @Inject(at = @At("HEAD"), method = "tick") public void updateNausea(CallbackInfo ci) { // Portal time update + // doesn't work if you ever exit but still have cooldown, unfortunately + // this version at least says inNetherPortal false when you get put on the other side so no 1.16.1 portal bug + if (lastDimension == null) { + lastDimension = this.clientWorld.getRegistryKey().getValue(); + } if (this.inNetherPortal) { - if (++portalTick >= 81 && !InGameTimerUtils.IS_CHANGING_DIMENSION) { - portalTick = 0; - if (InGameTimer.getInstance().getStatus() != TimerStatus.IDLE && client.isInSingleplayer()) { - latestPortalEnter = System.currentTimeMillis(); + ++portalTick; + } + else { + if (portalTick > 0) { + Identifier dimension = this.clientWorld.getRegistryKey().getValue(); + if (portalTick >= 81 && !lastDimension.equals(dimension)) { + InGameTimer.getInstance().tryExcludeIGT((portalTick - 80) * 50L, "nether portal lag"); } + lastDimension = dimension; + portalTick = 0; } - } else { - if (this.latestPortalEnter != null) { - InGameTimer.getInstance().tryExcludeIGT(System.currentTimeMillis() - this.latestPortalEnter, "nether portal lag"); - this.latestPortalEnter = null; - } - this.portalTick = 0; } } diff --git a/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java b/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java index bcdcd36b6..fcfd7f6f4 100644 --- a/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java +++ b/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java @@ -878,7 +878,7 @@ public void setWriteFiles(boolean writeFiles) { public void tryExcludeIGT(long igt, String reason) { this.excludedIGT += igt; - System.out.printf("[SpeedRunIGT] this play seems to be caught in specific lag(%s). excluded IGT for this time: .%s", reason, igt); + System.out.printf("[SpeedRunIGT] this play seems to be caught in specific lag(%s). excluded IGT for this time: %s\n", reason, igt); } public boolean isRTAMode() { From 543642ff516163ea23034148efb9d05e1876daec Mon Sep 17 00:00:00 2001 From: tildejustin Date: Mon, 14 Jul 2025 00:06:13 -0400 Subject: [PATCH 3/3] Revert "kinda hacky portal retiming for ssg" This reverts commit adae7a826042ce66131e4e146a16f43b1bcd5a44. --- .../mixins/ClientPlayerEntityMixin.java | 29 ++++++++----------- .../speedrunigt/timer/InGameTimer.java | 2 +- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java b/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java index a560924c5..5402b50f2 100644 --- a/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java +++ b/src/main/java/com/redlimerl/speedrunigt/mixins/ClientPlayerEntityMixin.java @@ -18,7 +18,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.util.Identifier; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -191,28 +190,24 @@ private void onMove(MovementType movementType, Vec3d vec3d, CallbackInfo ci) { } - private static int portalTick = 0; - private static Identifier lastDimension; + private Long latestPortalEnter = null; + private int portalTick = 0; @Inject(at = @At("HEAD"), method = "tick") public void updateNausea(CallbackInfo ci) { // Portal time update - // doesn't work if you ever exit but still have cooldown, unfortunately - // this version at least says inNetherPortal false when you get put on the other side so no 1.16.1 portal bug - if (lastDimension == null) { - lastDimension = this.clientWorld.getRegistryKey().getValue(); - } if (this.inNetherPortal) { - ++portalTick; - } - else { - if (portalTick > 0) { - Identifier dimension = this.clientWorld.getRegistryKey().getValue(); - if (portalTick >= 81 && !lastDimension.equals(dimension)) { - InGameTimer.getInstance().tryExcludeIGT((portalTick - 80) * 50L, "nether portal lag"); - } - lastDimension = dimension; + if (++portalTick >= 81 && !InGameTimerUtils.IS_CHANGING_DIMENSION) { portalTick = 0; + if (InGameTimer.getInstance().getStatus() != TimerStatus.IDLE && client.isInSingleplayer()) { + latestPortalEnter = System.currentTimeMillis(); + } + } + } else { + if (this.latestPortalEnter != null) { + InGameTimer.getInstance().tryExcludeIGT(System.currentTimeMillis() - this.latestPortalEnter, "nether portal lag"); + this.latestPortalEnter = null; } + this.portalTick = 0; } } diff --git a/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java b/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java index fcfd7f6f4..bcdcd36b6 100644 --- a/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java +++ b/src/main/java/com/redlimerl/speedrunigt/timer/InGameTimer.java @@ -878,7 +878,7 @@ public void setWriteFiles(boolean writeFiles) { public void tryExcludeIGT(long igt, String reason) { this.excludedIGT += igt; - System.out.printf("[SpeedRunIGT] this play seems to be caught in specific lag(%s). excluded IGT for this time: %s\n", reason, igt); + System.out.printf("[SpeedRunIGT] this play seems to be caught in specific lag(%s). excluded IGT for this time: .%s", reason, igt); } public boolean isRTAMode() {