diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/duck/ListWidgetDuckProvider.java b/src/main/java/net/onpointcoding/enhancedsearchability/duck/ListWidgetDuckProvider.java index b9fc4fa..4aba309 100644 --- a/src/main/java/net/onpointcoding/enhancedsearchability/duck/ListWidgetDuckProvider.java +++ b/src/main/java/net/onpointcoding/enhancedsearchability/duck/ListWidgetDuckProvider.java @@ -14,7 +14,5 @@ public interface ListWidgetDuckProvider { List getSyncStoreRP(); - List getSyncStoreServer(); - void hideHeaderAndShift(); } diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerScreen.java b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerScreen.java index 97fab35..bee0654 100644 --- a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerScreen.java +++ b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerScreen.java @@ -1,20 +1,20 @@ package net.onpointcoding.enhancedsearchability.mixin; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; -import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.onpointcoding.enhancedsearchability.duck.ListWidgetDuckProvider; -import net.onpointcoding.enhancedsearchability.utils.ClearableTextFieldDual; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MultiplayerScreen.class) @@ -24,7 +24,6 @@ public class MixinMultiplayerScreen extends Screen { @Shadow private boolean initialized; private TextFieldWidget serverSearchBox; - private ButtonWidget serverClearButton; protected MixinMultiplayerScreen(Text title) { super(title); @@ -33,29 +32,31 @@ protected MixinMultiplayerScreen(Text title) { @Inject(method = "init", at = @At("TAIL")) private void injected_init(CallbackInfo ci) { MinecraftClient mc = MinecraftClient.getInstance(); - ClearableTextFieldDual a = addSearchBox(mc, this.serverListWidget, this.serverSearchBox); - this.serverSearchBox = a.getTextFieldWidget(); - this.serverClearButton = a.getClearButton(); + this.serverSearchBox = addSearchBox(mc, this.serverListWidget, this.serverSearchBox); + this.setInitialFocus(this.serverSearchBox); if (this.initialized) setupOriginalServerListOffset(this.serverListWidget); } + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/multiplayer/MultiplayerScreen;drawCenteredText(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;III)V")) + private void redirected_drawCenteredText(MatrixStack matrixStack, TextRenderer textRenderer, Text text, int centerX, int y, int color) { + drawCenteredText(matrixStack, this.textRenderer, this.title, this.width / 2, 8, 16777215); + } + void setupOriginalServerListOffset(MultiplayerServerListWidget multiplayerServerListWidget) { if (multiplayerServerListWidget instanceof ListWidgetDuckProvider duck) duck.hideHeaderAndShift(); } - ClearableTextFieldDual addSearchBox(MinecraftClient mc, MultiplayerServerListWidget serverListWidget, TextFieldWidget textFieldWidget) { - textFieldWidget = new TextFieldWidget(mc.textRenderer, serverListWidget.getRowLeft() - 1, 34, serverListWidget.getRowWidth() - 22, 18, textFieldWidget, new TranslatableText("enhancedsearchability.searchbox")); + TextFieldWidget addSearchBox(MinecraftClient mc, MultiplayerServerListWidget serverListWidget, TextFieldWidget textFieldWidget) { + textFieldWidget = new TextFieldWidget(mc.textRenderer, this.width / 2 - 100, 22, 200, 20, textFieldWidget, new TranslatableText("enhancedsearchability.searchbox")); textFieldWidget.setChangedListener((search) -> { if (serverListWidget instanceof ListWidgetDuckProvider duckProvider) duckProvider.filter(() -> search); }); this.addSelectableChild(textFieldWidget); - TextFieldWidget finalTextFieldWidget = textFieldWidget; - ButtonWidget clearButton = this.addDrawableChild(new ButtonWidget(serverListWidget.getRowLeft() + serverListWidget.getRowWidth() - 22, 33, 20, 20, new TranslatableText("enhancedsearchability.clearbutton"), buttonWidget -> finalTextFieldWidget.setText(""))); - return new ClearableTextFieldDual(textFieldWidget, clearButton); + return textFieldWidget; } @Inject(method = "render", at = @At("TAIL")) diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerServerListWidget.java b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerServerListWidget.java index aec6cf8..28bfee6 100644 --- a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerServerListWidget.java +++ b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinMultiplayerServerListWidget.java @@ -1,7 +1,6 @@ package net.onpointcoding.enhancedsearchability.mixin; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.gui.screen.pack.PackListWidget; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; @@ -24,15 +23,10 @@ @Mixin(MultiplayerServerListWidget.class) public class MixinMultiplayerServerListWidget extends AlwaysSelectedEntryListWidget implements ListWidgetDuckProvider { - @Shadow - @Final - private MultiplayerScreen screen; - @Shadow - @Final - private List lanServers; @Shadow @Final private MultiplayerServerListWidget.Entry scanningEntry; + private final List serverSyncStore = new ArrayList<>(); private final List lanServerSyncStore = new ArrayList<>(); private Supplier searchTextStore = () -> ""; @@ -93,14 +87,9 @@ public List getSyncStoreRP() { return null; } - @Override - public List getSyncStoreServer() { - return serverSyncStore; - } - @Override public void hideHeaderAndShift() { - this.top += 25; + this.top += 15; } @Override diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackListWidget.java b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackListWidget.java index 9f0d4e3..4552e87 100644 --- a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackListWidget.java +++ b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackListWidget.java @@ -1,7 +1,6 @@ package net.onpointcoding.enhancedsearchability.mixin; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerServerListWidget; import net.minecraft.client.gui.screen.pack.PackListWidget; import net.minecraft.client.gui.widget.EntryListWidget; import net.minecraft.text.Text; @@ -31,7 +30,7 @@ public MixinPackListWidget(MinecraftClient minecraftClient, int i, int j, int k, @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/pack/PackListWidget;setRenderHeader(ZI)V")) private void redirected_setRenderHeader(PackListWidget instance, boolean b, int i) { - this.setRenderHeader(b, i + 20); + this.setRenderHeader(b, i + 22); } @Override @@ -80,8 +79,4 @@ public List getSyncStoreRP() { return storeChildren; } - @Override - public List getSyncStoreServer() { - return null; - } } diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackScreen.java b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackScreen.java index 8125e87..bc8c4f1 100644 --- a/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackScreen.java +++ b/src/main/java/net/onpointcoding/enhancedsearchability/mixin/MixinPackScreen.java @@ -16,11 +16,9 @@ import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; import net.onpointcoding.enhancedsearchability.duck.ListWidgetDuckProvider; -import net.onpointcoding.enhancedsearchability.utils.ClearableTextFieldDual; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -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; @@ -38,17 +36,13 @@ public abstract class MixinPackScreen extends Screen { @Shadow @Final private ResourcePackOrganizer organizer; - @Unique + private TextFieldWidget availablePackSearchBox; - @Unique private TextFieldWidget selectedPackSearchBox; @Shadow public abstract void render(MatrixStack matrices, int mouseX, int mouseY, float delta); - private ButtonWidget availablePackClearButton; - private ButtonWidget selectedPackClearButton; - protected MixinPackScreen(Text text) { super(text); } @@ -56,12 +50,8 @@ protected MixinPackScreen(Text text) { @Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/pack/PackScreen;refresh()V", shift = At.Shift.BEFORE)) private void injected_init(CallbackInfo ci) { MinecraftClient mc = MinecraftClient.getInstance(); - ClearableTextFieldDual a = addSearchBox(mc, this.availablePackList, this.availablePackSearchBox, new TranslatableText("pack.available.title"), this.width / 2 - 4 - 200); - this.availablePackSearchBox = a.getTextFieldWidget(); - this.availablePackClearButton = a.getClearButton(); - ClearableTextFieldDual b = addSearchBox(mc, this.selectedPackList, this.selectedPackSearchBox, new TranslatableText("pack.selected.title"), this.width / 2 + 4); - this.selectedPackSearchBox = b.getTextFieldWidget(); - this.selectedPackClearButton = b.getClearButton(); + this.availablePackSearchBox = addSearchBox(mc, this.availablePackList, this.availablePackSearchBox); + this.selectedPackSearchBox = addSearchBox(mc, this.selectedPackList, this.selectedPackSearchBox); setupOriginalPackListOffset(this.availablePackList); setupOriginalPackListOffset(this.selectedPackList); @@ -72,16 +62,14 @@ void setupOriginalPackListOffset(PackListWidget packListWidget) { duck.hideHeaderAndShift(); } - ClearableTextFieldDual addSearchBox(MinecraftClient mc, PackListWidget packListWidget, TextFieldWidget textFieldWidget, Text packListHeader, int leftPos) { - textFieldWidget = new TextFieldWidget(mc.textRenderer, packListWidget.getRowLeft() - 1, 47, packListWidget.getRowWidth() - 22, 18, textFieldWidget, new TranslatableText("enhancedsearchability.searchbox")); + TextFieldWidget addSearchBox(MinecraftClient mc, PackListWidget packListWidget, TextFieldWidget textFieldWidget) { + textFieldWidget = new TextFieldWidget(mc.textRenderer, packListWidget.getRowLeft() - 1, 47, packListWidget.getRowWidth() - 2, 20, textFieldWidget, new TranslatableText("enhancedsearchability.searchbox")); textFieldWidget.setChangedListener((search) -> { if (packListWidget instanceof ListWidgetDuckProvider duckProvider) duckProvider.filter(() -> search); }); this.addSelectableChild(textFieldWidget); - TextFieldWidget finalTextFieldWidget = textFieldWidget; - ButtonWidget clearButton = this.addDrawableChild(new ButtonWidget(packListWidget.getRowLeft() + packListWidget.getRowWidth() - 22, 46, 20, 20, new TranslatableText("enhancedsearchability.clearbutton"), buttonWidget -> finalTextFieldWidget.setText(""))); - return new ClearableTextFieldDual(textFieldWidget, clearButton); + return textFieldWidget; } @Inject(method = "render", at = @At("TAIL")) @@ -152,14 +140,6 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { this.setFocused(this.selectedPackSearchBox); return true; } - if (this.availablePackClearButton != null && this.availablePackClearButton.mouseClicked(mouseX, mouseY, button)) { - this.setFocused(this.availablePackClearButton); - return true; - } - if (this.selectedPackClearButton != null && this.selectedPackClearButton.mouseClicked(mouseX, mouseY, button)) { - this.setFocused(this.selectedPackClearButton); - return true; - } return super.mouseClicked(mouseX, mouseY, button); } } diff --git a/src/main/java/net/onpointcoding/enhancedsearchability/utils/ClearableTextFieldDual.java b/src/main/java/net/onpointcoding/enhancedsearchability/utils/ClearableTextFieldDual.java deleted file mode 100644 index b5db149..0000000 --- a/src/main/java/net/onpointcoding/enhancedsearchability/utils/ClearableTextFieldDual.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.onpointcoding.enhancedsearchability.utils; - -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; - -public class ClearableTextFieldDual { - private final TextFieldWidget textFieldWidget; - private final ButtonWidget clearButton; - - public ClearableTextFieldDual(TextFieldWidget textFieldWidget, ButtonWidget clearButton) { - this.textFieldWidget = textFieldWidget; - this.clearButton = clearButton; - } - - public TextFieldWidget getTextFieldWidget() { - return textFieldWidget; - } - - public ButtonWidget getClearButton() { - return clearButton; - } -}