From d9b1b909326328cc5fe9b9133196645352f13ccb Mon Sep 17 00:00:00 2001 From: tesselslate <46545045+tesselslate@users.noreply.github.com> Date: Sun, 11 Aug 2024 14:13:07 -0400 Subject: [PATCH 1/5] feature: clear queue when atum button is shift clicked --- .../mixin/compat/atum/OptionsScreenMixin.java | 72 +++++++++++++++++++ .../assets/seedqueue/lang/en_us.json | 2 + src/main/resources/seedqueue.mixins.json | 1 + 3 files changed, 75 insertions(+) create mode 100644 src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java diff --git a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java new file mode 100644 index 00000000..0008cd28 --- /dev/null +++ b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java @@ -0,0 +1,72 @@ +package me.contaria.seedqueue.mixin.compat.atum; + +import com.bawnorton.mixinsquared.TargetHandler; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import me.contaria.seedqueue.SeedQueue; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.options.OptionsScreen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; +import org.spongepowered.asm.mixin.Dynamic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = OptionsScreen.class, priority = 1500) +public abstract class OptionsScreenMixin extends Screen { + @Unique + private ButtonWidget atumButton; + + protected OptionsScreenMixin(Text title) { + super(title); + } + + @Unique + private boolean shouldClearQueue() { + return Screen.hasShiftDown() && SeedQueue.isActive(); + } + + @Dynamic + @TargetHandler( + mixin = "me.voidxwalker.autoreset.mixin.gui.OptionsScreenMixin", + name = "addStopResetsButton" + ) + @WrapOperation( + method = "@MixinSquared:Handler", + at = @At( + value = "NEW", + target = "(IIIILnet/minecraft/text/Text;Lnet/minecraft/client/gui/widget/ButtonWidget$PressAction;)Lnet/minecraft/client/gui/widget/ButtonWidget;" + ) + ) + private ButtonWidget stopQueueWhenShiftClicked(int x, int y, int width, int height, Text text, ButtonWidget.PressAction action, Operation original) { + this.atumButton = new ButtonWidget(x, y, width, height, text, button -> { + if (shouldClearQueue()) { + SeedQueue.stop(); + } else { + action.onPress(button); + } + }); + + return this.atumButton; + } + + @Inject( + method = "render(Lnet/minecraft/client/util/math/MatrixStack;IIF)V", + at = @At("HEAD") + ) + private void setAtumButtonText(CallbackInfo ci) { + if (atumButton == null) { + return; + } + + if (shouldClearQueue()) { + atumButton.setMessage(new TranslatableText("seedqueue.menu.clearQueue")); + } else { + atumButton.setMessage(new TranslatableText("atum.menu.stop_resets")); + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/seedqueue/lang/en_us.json b/src/main/resources/assets/seedqueue/lang/en_us.json index 4ba84149..ce90eee4 100644 --- a/src/main/resources/assets/seedqueue/lang/en_us.json +++ b/src/main/resources/assets/seedqueue/lang/en_us.json @@ -1,6 +1,8 @@ { "seedqueue.menu.clearing": "Clearing SeedQueue...", + "seedqueue.menu.clearQueue": "Clear Queue", + "seedqueue.menu.crash.title": "SeedQueue crashed!", "seedqueue.menu.crash.description": "Crashed with %s, check the log for more information.", diff --git a/src/main/resources/seedqueue.mixins.json b/src/main/resources/seedqueue.mixins.json index 12c35f9c..3ade96d6 100644 --- a/src/main/resources/seedqueue.mixins.json +++ b/src/main/resources/seedqueue.mixins.json @@ -28,6 +28,7 @@ "compat.atum.AtumMixin", "compat.atum.CreateWorldScreenMixin", "compat.atum.KeyboardMixin", + "compat.atum.OptionsScreenMixin", "compat.sodium.ChunkBuilder$WorkerRunnableMixin", "compat.sodium.ChunkBuilder$WorkerRunnableMixin2", "compat.sodium.ChunkBuilderMixin", From a57bbce8de65ac72e1586c50dde3ac87825baf38 Mon Sep 17 00:00:00 2001 From: tesselslate <46545045+tesselslate@users.noreply.github.com> Date: Sun, 11 Aug 2024 15:03:56 -0400 Subject: [PATCH 2/5] refactor: atum button style fixes --- .../mixin/compat/atum/OptionsScreenMixin.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java index 0008cd28..8a550688 100644 --- a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java +++ b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java @@ -25,11 +25,6 @@ protected OptionsScreenMixin(Text title) { super(title); } - @Unique - private boolean shouldClearQueue() { - return Screen.hasShiftDown() && SeedQueue.isActive(); - } - @Dynamic @TargetHandler( mixin = "me.voidxwalker.autoreset.mixin.gui.OptionsScreenMixin", @@ -43,15 +38,13 @@ private boolean shouldClearQueue() { ) ) private ButtonWidget stopQueueWhenShiftClicked(int x, int y, int width, int height, Text text, ButtonWidget.PressAction action, Operation original) { - this.atumButton = new ButtonWidget(x, y, width, height, text, button -> { + return this.atumButton = original.call(x, y, width, height, text, (ButtonWidget.PressAction)button -> { if (shouldClearQueue()) { SeedQueue.stop(); } else { action.onPress(button); } }); - - return this.atumButton; } @Inject( @@ -59,7 +52,7 @@ private ButtonWidget stopQueueWhenShiftClicked(int x, int y, int width, int heig at = @At("HEAD") ) private void setAtumButtonText(CallbackInfo ci) { - if (atumButton == null) { + if (this.atumButton == null) { return; } @@ -69,4 +62,9 @@ private void setAtumButtonText(CallbackInfo ci) { atumButton.setMessage(new TranslatableText("atum.menu.stop_resets")); } } + + @Unique + private boolean shouldClearQueue() { + return Screen.hasShiftDown() && SeedQueue.isActive(); + } } \ No newline at end of file From f8d060f6409132dd3ef0f7fafb1d2d079bd695ef Mon Sep 17 00:00:00 2001 From: tesselslate <46545045+tesselslate@users.noreply.github.com> Date: Sun, 11 Aug 2024 15:04:10 -0400 Subject: [PATCH 3/5] feature: show clear queue text only when hovered --- .../seedqueue/mixin/compat/atum/OptionsScreenMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java index 8a550688..00b9d692 100644 --- a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java +++ b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java @@ -56,7 +56,7 @@ private void setAtumButtonText(CallbackInfo ci) { return; } - if (shouldClearQueue()) { + if (shouldClearQueue() && this.atumButton.isHovered()) { atumButton.setMessage(new TranslatableText("seedqueue.menu.clearQueue")); } else { atumButton.setMessage(new TranslatableText("atum.menu.stop_resets")); From c9edbb219c89fecf61f91e8ec20a9a61ec47dac0 Mon Sep 17 00:00:00 2001 From: tesselslate <46545045+tesselslate@users.noreply.github.com> Date: Sun, 11 Aug 2024 15:23:03 -0400 Subject: [PATCH 4/5] refactor: use `this` everywhere --- .../seedqueue/mixin/compat/atum/OptionsScreenMixin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java index 00b9d692..5759a289 100644 --- a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java +++ b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java @@ -39,7 +39,7 @@ protected OptionsScreenMixin(Text title) { ) private ButtonWidget stopQueueWhenShiftClicked(int x, int y, int width, int height, Text text, ButtonWidget.PressAction action, Operation original) { return this.atumButton = original.call(x, y, width, height, text, (ButtonWidget.PressAction)button -> { - if (shouldClearQueue()) { + if (this.shouldClearQueue()) { SeedQueue.stop(); } else { action.onPress(button); @@ -56,10 +56,10 @@ private void setAtumButtonText(CallbackInfo ci) { return; } - if (shouldClearQueue() && this.atumButton.isHovered()) { - atumButton.setMessage(new TranslatableText("seedqueue.menu.clearQueue")); + if (this.shouldClearQueue() && this.atumButton.isHovered()) { + this.atumButton.setMessage(new TranslatableText("seedqueue.menu.clearQueue")); } else { - atumButton.setMessage(new TranslatableText("atum.menu.stop_resets")); + this.atumButton.setMessage(new TranslatableText("atum.menu.stop_resets")); } } From 0b41e6e73a6f8b1eef378eaa7bf957dbd02b8ba9 Mon Sep 17 00:00:00 2001 From: tesselslate <46545045+tesselslate@users.noreply.github.com> Date: Sun, 11 Aug 2024 15:28:50 -0400 Subject: [PATCH 5/5] refactor: do not extend Screen in mixin --- .../seedqueue/mixin/compat/atum/OptionsScreenMixin.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java index 5759a289..4ea0d386 100644 --- a/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java +++ b/src/main/java/me/contaria/seedqueue/mixin/compat/atum/OptionsScreenMixin.java @@ -17,14 +17,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(value = OptionsScreen.class, priority = 1500) -public abstract class OptionsScreenMixin extends Screen { +public abstract class OptionsScreenMixin { @Unique private ButtonWidget atumButton; - protected OptionsScreenMixin(Text title) { - super(title); - } - @Dynamic @TargetHandler( mixin = "me.voidxwalker.autoreset.mixin.gui.OptionsScreenMixin",