aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-12-05 04:13:23 -0500
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-12-08 16:10:15 -0500
commita9855234c7ade3c46f4a94f98c434f12ee5fcd50 (patch)
tree9123c3841c6c224bcfb7a2d8af219295d3078f55 /src/main/java
parent54079b09a88b0c957f562922491bb80cf8d3c4c7 (diff)
downloadSkyblocker-a9855234c7ade3c46f4a94f98c434f12ee5fcd50.tar.gz
Skyblocker-a9855234c7ade3c46f4a94f98c434f12ee5fcd50.tar.bz2
Skyblocker-a9855234c7ade3c46f4a94f98c434f12ee5fcd50.zip
Fix Inventory Search clicking
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java20
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java44
2 files changed, 45 insertions, 19 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
index fc9381b9..c833d06c 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.mixins;
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
@@ -22,9 +23,11 @@ import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.container.ContainerSolver;
import de.hysky.skyblocker.utils.container.ContainerSolverManager;
+import net.fabricmc.fabric.api.client.screen.v1.Screens;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
+import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.ItemStack;
@@ -48,6 +51,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.regex.Matcher;
@@ -144,6 +148,22 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
}
}
+ @ModifyExpressionValue(method = "mouseClicked", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;mouseClicked(DDI)Z"))
+ public boolean skyblocker$passThroughSearchFieldUnfocusedClicks(boolean superClicked, double mouseX, double mouseY, int button) {
+ //Handle Search Field clicks - as of 1.21.4 the game will only send clicks to the selected element rather than trying to send one to each and stopping when the first returns true (if any).
+ if (!superClicked) {
+ Optional<ClickableWidget> searchField = Screens.getButtons(this).stream()
+ .filter(InventorySearch.SearchTextFieldWidget.class::isInstance)
+ .findFirst();
+
+ if (searchField.isPresent() && searchField.get().mouseClicked(mouseX, mouseY, button)) {
+ return true;
+ }
+ }
+
+ return superClicked;
+ }
+
/**
* Draws the unselected tabs in front of the background blur, but behind the main inventory, similar to creative inventory tabs
*/
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java b/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java
index d0e1b9f6..d1e147ce 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java
@@ -57,24 +57,7 @@ public class InventorySearch {
private static @NotNull TextFieldWidget getTextFieldWidget(HandledScreen<?> handledScreen) {
// Slightly modified text field widget
- TextFieldWidget textFieldWidget = new TextFieldWidget(Screens.getTextRenderer(handledScreen), 120, 20, Text.literal("Search Inventory")) {
- @Override
- public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
- // Makes the widget catch all key presses (except escape) to fix closing the inventory when pressing E
- // also check that the widget is focused and active
- return super.keyPressed(keyCode, scanCode, modifiers) || (keyCode != GLFW.GLFW_KEY_ESCAPE && this.isNarratable() && this.isFocused());
- }
-
- // Unfocus when clicking outside
- @Override
- public boolean mouseClicked(double mouseX, double mouseY, int button) {
- if (isFocused() && !isMouseOver(mouseX, mouseY)) {
- setFocused(false);
- return false;
- }
- return super.mouseClicked(mouseX, mouseY, button);
- }
- };
+ TextFieldWidget textFieldWidget = new SearchTextFieldWidget(handledScreen);
textFieldWidget.setPosition((handledScreen.width - textFieldWidget.getWidth()) / 2, 15);
textFieldWidget.setPlaceholder(Text.translatable("gui.socialInteractions.search_hint"));
textFieldWidget.setText(search); // Restore previous search
@@ -106,7 +89,6 @@ public class InventorySearch {
* Button to open the search bar, for accessibility reasons (pojav and general preferences)
*/
private static class SearchTextWidget extends TextWidget {
-
private final Text underlinedText;
private final Text normalText;
private final HandledScreen<?> screen;
@@ -137,4 +119,28 @@ public class InventorySearch {
super.renderWidget(context, mouseX, mouseY, delta);
}
}
+
+ public static class SearchTextFieldWidget extends TextFieldWidget {
+ public SearchTextFieldWidget(HandledScreen<?> handledScreen) {
+ super(Screens.getTextRenderer(handledScreen), 120, 20, Text.literal("Search Inventory"));
+ }
+
+ @Override
+ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
+ // Makes the widget catch all key presses (except escape) to fix closing the inventory when pressing E
+ // also check that the widget is focused and active
+ return super.keyPressed(keyCode, scanCode, modifiers) || (keyCode != GLFW.GLFW_KEY_ESCAPE && this.isNarratable() && this.isFocused());
+ }
+
+ // Unfocus when clicking outside
+ @Override
+ public boolean mouseClicked(double mouseX, double mouseY, int button) {
+ if (isFocused() && !isMouseOver(mouseX, mouseY)) {
+ setFocused(false);
+ return false;
+ }
+
+ return super.mouseClicked(mouseX, mouseY, button);
+ }
+ }
}