From 58974e524cd0ceccdd1e88e11680807126d6afe6 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:42:30 -0500 Subject: 1.21.4-rc3 --- .../mixins/InGameOverlayRendererMixin.java | 2 +- .../mixins/PlayerSkinTextureDownloaderMixin.java | 67 ++++++ .../skyblocker/mixins/PlayerSkinTextureMixin.java | 73 ------- .../hysky/skyblocker/skyblock/InventorySearch.java | 2 +- .../skyblock/chat/ChatRulesConfigListWidget.java | 4 +- .../partyfinder/FinderSettingsContainer.java | 10 + .../dungeon/partyfinder/OptionDropdownWidget.java | 15 +- .../dungeon/partyfinder/PartyEntryListWidget.java | 2 +- .../dungeon/partyfinder/RangedValueWidget.java | 10 + .../skyblock/fancybars/EditBarColorPopup.java | 10 + .../skyblock/fancybars/EditBarWidget.java | 12 +- .../skyblocker/skyblock/itemlist/ItemListTab.java | 93 --------- .../skyblock/itemlist/ItemListWidget.java | 136 ------------ .../skyblock/itemlist/ResultButtonWidget.java | 53 ----- .../skyblock/itemlist/SearchResultsWidget.java | 228 --------------------- .../skyblock/itemlist/UpcomingEventsTab.java | 168 --------------- .../profileviewer/utils/SubPageSelectButton.java | 2 +- .../skyblock/shortcut/ShortcutsConfigScreen.java | 4 +- .../skyblock/waypoint/DropdownWidget.java | 22 +- .../skyblocker/utils/render/RenderHelper.java | 6 +- .../utils/render/SkyblockerRenderLayers.java | 2 +- 21 files changed, 142 insertions(+), 779 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureDownloaderMixin.java delete mode 100644 src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListTab.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/UpcomingEventsTab.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java index d3b79efe..38c93253 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/InGameOverlayRendererMixin.java @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(InGameOverlayRenderer.class) public class InGameOverlayRendererMixin { - @ModifyArg(method = "renderFireOverlay", index = 2, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/BufferBuilder;vertex(Lorg/joml/Matrix4f;FFF)Lnet/minecraft/client/render/VertexConsumer;")) + @ModifyArg(method = "renderFireOverlay", index = 2, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexConsumer;vertex(Lorg/joml/Matrix4f;FFF)Lnet/minecraft/client/render/VertexConsumer;")) private static float configureFlameHeight(float y) { return y - (0.5f - ((float) SkyblockerConfigManager.get().uiAndVisuals.flameOverlay.flameHeight / 200.0f)); } diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureDownloaderMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureDownloaderMixin.java new file mode 100644 index 00000000..fe9702c9 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureDownloaderMixin.java @@ -0,0 +1,67 @@ +package de.hysky.skyblocker.mixins; + +import java.awt.Color; +import java.util.Set; + +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.CallbackInfoReturnable; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import com.llamalad7.mixinextras.sugar.Share; +import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.item.PlayerHeadHashCache; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.client.texture.NativeImage; +import net.minecraft.client.texture.PlayerSkinTextureDownloader; +import net.minecraft.util.math.ColorHelper; + +@Mixin(PlayerSkinTextureDownloader.class) +public class PlayerSkinTextureDownloaderMixin { + @Unique + private static final Set STRIP_DE_FACTO_TRANSPARENT_PIXELS = Set.of( + "4f3b91b6aa7124f30ed4ad1b2bb012a82985a33640555e18e792f96af8f58ec6", /*Titanium Necklace*/ + "49821410631186c6f3fbbae5f0ef5b947f475eb32027a8aad0a456512547c209", /*Titanium Cloak*/ + "4162303bcdd770aebe7fd19fa26371390a7515140358548084361b5056cdc4e6" /*Titanium Belt*/); + @Unique + private static final float BRIGHTNESS_THRESHOLD = 0.1f; + + @Inject(method = "remapTexture", at = @At("HEAD")) + private static void skyblocker$determineSkinSource(NativeImage image, String uri, CallbackInfoReturnable cir, @Share("isSkyblockSkinTexture") LocalBooleanRef isSkyblockSkinTexture) { + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.dontStripSkinAlphaValues) { + String skinTextureHash = PlayerHeadHashCache.getSkinHash(uri); + int skinHash = skinTextureHash.hashCode(); + isSkyblockSkinTexture.set(PlayerHeadHashCache.contains(skinHash)); + + //Hypixel had the grand idea of using black pixels in place of actual transparent pixels on the titanium equipment so here we go! + if (STRIP_DE_FACTO_TRANSPARENT_PIXELS.contains(skinTextureHash)) { + stripDeFactoTransparentPixels(image); + } + } + } + + @WrapWithCondition(method = "remapTexture", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinTextureDownloader;stripAlpha(Lnet/minecraft/client/texture/NativeImage;IIII)V")) + private static boolean skyblocker$dontStripAlphaValues(NativeImage image, int x1, int y1, int x2, int y2, @Share("isSkyblockSkinTexture") LocalBooleanRef isSkyblockSkinTexture) { + return !isSkyblockSkinTexture.get(); + } + + @Unique + private static void stripDeFactoTransparentPixels(NativeImage image) { + int height = image.getHeight(); + int width = image.getWidth(); + + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + int color = image.getColorArgb(x, y); + float[] hsb = Color.RGBtoHSB((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, null); + + //Work around "fake" transparent pixels - Thanks Hypixel I totally appreciate this! + if (hsb[2] <= BRIGHTNESS_THRESHOLD) image.setColorArgb(x, y, ColorHelper.withAlpha(0x00, color & 0x00FFFFFF)); + } + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java deleted file mode 100644 index a9c07adc..00000000 --- a/src/main/java/de/hysky/skyblocker/mixins/PlayerSkinTextureMixin.java +++ /dev/null @@ -1,73 +0,0 @@ -package de.hysky.skyblocker.mixins; - -import java.awt.Color; -import java.util.Set; - -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.CallbackInfoReturnable; - -import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.llamalad7.mixinextras.sugar.Share; -import com.llamalad7.mixinextras.sugar.ref.LocalBooleanRef; - -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.item.PlayerHeadHashCache; -import de.hysky.skyblocker.utils.Utils; -import net.minecraft.client.texture.NativeImage; -import net.minecraft.client.texture.PlayerSkinTexture; -import net.minecraft.util.math.ColorHelper; - -@Mixin(PlayerSkinTexture.class) -public class PlayerSkinTextureMixin { - @Unique - private static final Set STRIP_DE_FACTO_TRANSPARENT_PIXELS = Set.of( - "4f3b91b6aa7124f30ed4ad1b2bb012a82985a33640555e18e792f96af8f58ec6", /*Titanium Necklace*/ - "49821410631186c6f3fbbae5f0ef5b947f475eb32027a8aad0a456512547c209", /*Titanium Cloak*/ - "4162303bcdd770aebe7fd19fa26371390a7515140358548084361b5056cdc4e6" /*Titanium Belt*/); - @Unique - private static final float BRIGHTNESS_THRESHOLD = 0.1f; - - @Shadow - @Final - private String url; - - @Inject(method = "remapTexture", at = @At("HEAD")) - private void skyblocker$determineSkinSource(NativeImage image, CallbackInfoReturnable cir, @Share("isSkyblockSkinTexture") LocalBooleanRef isSkyblockSkinTexture) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().uiAndVisuals.dontStripSkinAlphaValues) { - String skinTextureHash = PlayerHeadHashCache.getSkinHash(this.url); - int skinHash = skinTextureHash.hashCode(); - isSkyblockSkinTexture.set(PlayerHeadHashCache.contains(skinHash)); - - //Hypixel had the grand idea of using black pixels in place of actual transparent pixels on the titanium equipment so here we go! - if (STRIP_DE_FACTO_TRANSPARENT_PIXELS.contains(skinTextureHash)) { - stripDeFactoTransparentPixels(image); - } - } - } - - @WrapWithCondition(method = "remapTexture", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PlayerSkinTexture;stripAlpha(Lnet/minecraft/client/texture/NativeImage;IIII)V")) - private boolean skyblocker$dontStripAlphaValues(NativeImage image, int x1, int y1, int x2, int y2, @Share("isSkyblockSkinTexture") LocalBooleanRef isSkyblockSkinTexture) { - return !isSkyblockSkinTexture.get(); - } - - @Unique - private static void stripDeFactoTransparentPixels(NativeImage image) { - int height = image.getHeight(); - int width = image.getWidth(); - - for (int x = 0; x < width; x++) { - for (int y = 0; y < height; y++) { - int color = image.getColorArgb(x, y); - float[] hsb = Color.RGBtoHSB((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF, null); - - //Work around "fake" transparent pixels - Thanks Hypixel I totally appreciate this! - if (hsb[2] <= BRIGHTNESS_THRESHOLD) image.setColorArgb(x, y, ColorHelper.withAlpha(0x00, color & 0x00FFFFFF)); - } - } - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java b/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java index 6ca1f236..d0e1b9f6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/InventorySearch.java @@ -68,7 +68,7 @@ public class InventorySearch { // Unfocus when clicking outside @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (isFocused() && !clicked(mouseX, mouseY)) { + if (isFocused() && !isMouseOver(mouseX, mouseY)) { setFocused(false); return false; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java index 1fb763e2..97d593a2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/ChatRulesConfigListWidget.java @@ -124,7 +124,7 @@ public class ChatRulesConfigListWidget extends ElementListWidget { - oldScrollAmount = getScrollAmount(); + oldScrollAmount = getScrollY(); client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.config.chat.chatRules.screen.deleteQuestion"), Text.translatable("skyblocker.config.chat.chatRules.screen.deleteWarning", chatRule.getName()), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); }) .size(50, 20) @@ -155,7 +155,7 @@ public class ChatRulesConfigListWidget extends ElementListWidget= 0 && y >= 10 && x < getWidth() && y < 26)) return false; if (screen.isWaitingForServer()) return false; if (isOpen) { @@ -74,7 +72,14 @@ public class OptionDropdownWidget extends ElementListWidget { if (children().isEmpty()) { Text string = Text.translatable("skyblocker.partyFinder.loadingError"); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawTextWrapped(textRenderer, string, getRowLeft(), getY() + 10, getRowWidth(), 0xFFFFFFFF); + context.drawWrappedText(textRenderer, string, getRowLeft(), getY() + 10, getRowWidth(), 0xFFFFFFFF, false); } else super.renderWidget(context, mouseX, mouseY, delta); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/RangedValueWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/RangedValueWidget.java index 0fcd9d1b..fc6f09ff 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/RangedValueWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/partyfinder/RangedValueWidget.java @@ -266,4 +266,14 @@ public class RangedValueWidget extends ContainerWidget { @Override protected void appendClickableNarrations(NarrationMessageBuilder builder) {} + + @Override + protected int getContentsHeightWithPadding() { + return 0; + } + + @Override + protected double getDeltaYPerScroll() { + return 0; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarColorPopup.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarColorPopup.java index 64e79bab..c98e18f8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarColorPopup.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarColorPopup.java @@ -113,5 +113,15 @@ public class EditBarColorPopup extends AbstractPopupScreen { super.setY(y); textFieldWidget.setY(getY()); } + + @Override + protected int getContentsHeightWithPadding() { + return 0; + } + + @Override + protected double getDeltaYPerScroll() { + return 0; + } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarWidget.java index f74d53da..e3a94bcd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/fancybars/EditBarWidget.java @@ -324,4 +324,14 @@ public class EditBarWidget extends ContainerWidget { this.onChange = onChange; } } -} + + @Override + protected int getContentsHeightWithPadding() { + return 0; + } + + @Override + protected double getDeltaYPerScroll() { + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListTab.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListTab.java deleted file mode 100644 index 3493216b..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListTab.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.hysky.skyblocker.skyblock.itemlist; - -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -import java.util.List; - -@Deprecated(forRemoval = true) -public class ItemListTab extends ItemListWidget.TabContainerWidget { - - private SearchResultsWidget results; - private final MinecraftClient client; - private TextFieldWidget searchField; - - public ItemListTab(int x, int y, MinecraftClient client, TextFieldWidget searchField) { - super(x, y, Text.literal("Item List Tab")); - this.client = client; - this.searchField = searchField; - if (ItemRepository.filesImported()) { - this.results = new SearchResultsWidget(this.client, x - 9, y - 9 ); - this.results.updateSearchResult(searchField == null ? "": this.searchField.getText()); - } - } - - @Override - public List children() { - return List.of(results, searchField); - } - - @Override - protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - MatrixStack matrices = context.getMatrices(); - matrices.push(); - matrices.translate(0.0D, 0.0D, 100.0D); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - int x = getX(); - int y = getY(); - - // all coordinates offseted -9 - if (!ItemRepository.filesImported() && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { - Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - context.drawTextWithShadow(this.client.textRenderer, hintText, x + 16, y + 7, -1); - } else if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) { - Text hintText = (Text.translatable("gui.recipebook.search_hint")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - context.drawTextWithShadow(this.client.textRenderer, hintText, x + 16, y + 7, -1); - } else { - this.searchField.render(context, mouseX, mouseY, delta); - } - if (ItemRepository.filesImported()) { - if (results == null) { - this.results = new SearchResultsWidget(this.client, x - 9, y - 9); - } - this.results.updateSearchResult(this.searchField.getText()); - this.results.render(context, mouseX, mouseY, delta); - } - matrices.pop(); - } - - @Override - protected void appendClickableNarrations(NarrationMessageBuilder builder) {} - - public void setSearchField(TextFieldWidget searchField) { - this.searchField = searchField; - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (!visible) return false; - if (this.searchField.mouseClicked(mouseX, mouseY, button) && this.results != null) { - this.results.closeRecipeView(); - this.searchField.setFocused(true); - return true; - } else if (results != null) { - this.searchField.setFocused(false); - - return this.results.mouseClicked(mouseX, mouseY, button); - } - - return false; - } - - @Override - public void drawTooltip(DrawContext context, int mouseX, int mouseY) { - if (this.results != null) this.results.drawTooltip(context, mouseX, mouseY); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListWidget.java deleted file mode 100644 index 62458c0d..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemListWidget.java +++ /dev/null @@ -1,136 +0,0 @@ -package de.hysky.skyblocker.skyblock.itemlist; - -import de.hysky.skyblocker.mixins.accessors.RecipeBookWidgetAccessor; -import de.hysky.skyblocker.utils.render.gui.SideTabButtonWidget; -import it.unimi.dsi.fastutil.Pair; -import it.unimi.dsi.fastutil.objects.ObjectObjectImmutablePair; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ContainerWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.screen.AbstractRecipeScreenHandler; -import net.minecraft.text.Text; - -import java.util.ArrayList; -import java.util.List; - -@Environment(value = EnvType.CLIENT) -@Deprecated(forRemoval = true) -public class ItemListWidget /*extends RecipeBookWidget*/ { - /*private int parentWidth; - private int parentHeight; - private int leftOffset; - - private TabContainerWidget currentTabContent; - private final List> tabs = new ArrayList<>(2); - private ItemListTab itemListTab; - - private static int currentTab = 0; - - public ItemListWidget() { - super(); - } - - @Override - public void initialize(int parentWidth, int parentHeight, MinecraftClient client, boolean narrow, AbstractRecipeScreenHandler craftingScreenHandler) { - super.initialize(parentWidth, parentHeight, client, narrow, craftingScreenHandler); - this.parentWidth = parentWidth; - this.parentHeight = parentHeight; - this.leftOffset = narrow ? 0 : 86; - TextFieldWidget searchField = ((RecipeBookWidgetAccessor) this).getSearchField(); - int x = (parentWidth - 147) / 2 - leftOffset; - int y = (parentHeight - 166) / 2; - - // Init all the tabs, content and the tab button on the left - tabs.clear(); - - // Item List - itemListTab = new ItemListTab(x + 9, y + 9, this.client, searchField); - SideTabButtonWidget itemListTabButton = new SideTabButtonWidget(x - 30, y + 3, currentTab == 0, new ItemStack(Items.CRAFTING_TABLE)); - itemListTabButton.setTooltip(Tooltip.of(Text.literal("Item List"))); - if (currentTab == 0) currentTabContent = itemListTab; - tabs.add(new ObjectObjectImmutablePair<>( - itemListTabButton, - this.itemListTab)); - - // Upcoming Events - UpcomingEventsTab upcomingEventsTab = new UpcomingEventsTab(x + 9, y + 9, this.client); - SideTabButtonWidget eventsTabButtonWidget = new SideTabButtonWidget(x - 30, y + 3 + 27, currentTab == 1, new ItemStack(Items.CLOCK)); - eventsTabButtonWidget.setTooltip(Tooltip.of(Text.literal("Upcoming Events"))); - if (currentTab == 1) currentTabContent = upcomingEventsTab; - tabs.add(new ObjectObjectImmutablePair<>( - eventsTabButtonWidget, - upcomingEventsTab - )); - - } - - @Override - public void reset() { - super.reset(); - if (itemListTab != null) itemListTab.setSearchField(((RecipeBookWidgetAccessor) this).getSearchField()); - } - - @Override - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - if (this.isOpen()) { - int i = (this.parentWidth - 147) / 2 - this.leftOffset; - int j = (this.parentHeight - 166) / 2; - // Draw the texture - context.drawTexture(TEXTURE, i, j, 1, 1, 147, 166); - // Draw the tab's content - if (currentTabContent != null) currentTabContent.render(context, mouseX, mouseY, delta); - // Draw the tab buttons - for (Pair tab : tabs) { - tab.left().render(context, mouseX, mouseY, delta); - } - - } - } - - @Override - public void drawTooltip(DrawContext context, int x, int y, int mouseX, int mouseY) { - if (this.isOpen() && currentTabContent != null) { - this.currentTabContent.drawTooltip(context, mouseX, mouseY); - } - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (this.isOpen() && this.client.player != null && !this.client.player.isSpectator()) { - // check if a tab is clicked - for (Pair tab : tabs) { - if (tab.first().mouseClicked(mouseX, mouseY, button) && currentTabContent != tab.right()) { - for (Pair tab2 : tabs) { - tab2.first().setToggled(false); - } - tab.first().setToggled(true); - currentTabContent = tab.right(); - currentTab = tabs.indexOf(tab); - return true; - } - } - // click the tab content - if (currentTabContent != null) return currentTabContent.mouseClicked(mouseX, mouseY, button); - else return false; - } else return false; - }*/ - - /** - * A container widget but with a fixed width and height and a drawTooltip method to implement - */ - public abstract static class TabContainerWidget extends ContainerWidget { - - public TabContainerWidget(int x, int y, Text text) { - super(x, y, 131, 150, text); - } - - public abstract void drawTooltip(DrawContext context, int mouseX, int mouseY); - } -} \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java deleted file mode 100644 index 91c7a7bc..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ /dev/null @@ -1,53 +0,0 @@ -package de.hysky.skyblocker.skyblock.itemlist; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; - -import java.util.List; - -@Deprecated(forRemoval = true) -public class ResultButtonWidget extends ClickableWidget { - private static final Identifier BACKGROUND_TEXTURE = Identifier.ofVanilla("recipe_book/slot_craftable"); - - protected ItemStack itemStack = null; - - public ResultButtonWidget(int x, int y) { - super(x, y, 25, 25, Text.literal("")); - } - - protected void setItemStack(ItemStack itemStack) { - this.active = !itemStack.isEmpty(); - this.visible = true; - this.itemStack = itemStack; - } - - protected void clearItemStack() { - this.visible = false; - this.itemStack = null; - } - - @Override - public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - MinecraftClient client = MinecraftClient.getInstance(); - context.drawGuiTexture(RenderLayer::getGuiTextured, BACKGROUND_TEXTURE, this.getX(), this.getY(), this.getWidth(), this.getHeight()); - context.drawItem(this.itemStack, this.getX() + 4, this.getY() + 4); - context.drawStackOverlay(client.textRenderer, itemStack, this.getX() + 4, this.getY() + 4); - } - - public void renderTooltip(DrawContext context, int mouseX, int mouseY) { - MinecraftClient client = MinecraftClient.getInstance(); - if (client.currentScreen == null) return; - List tooltip = Screen.getTooltipFromItem(client, this.itemStack); - client.currentScreen.setTooltip(tooltip.stream().map(Text::asOrderedText).toList()); - } - - @Override - protected void appendClickableNarrations(NarrationMessageBuilder builder) {} -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java deleted file mode 100644 index 19bd05cc..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ /dev/null @@ -1,228 +0,0 @@ -package de.hysky.skyblocker.skyblock.itemlist; - -import com.mojang.blaze3d.systems.RenderSystem; -import de.hysky.skyblocker.utils.ItemUtils; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.ButtonTextures; -import net.minecraft.client.gui.widget.ToggleButtonWidget; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.text.OrderedText; -import net.minecraft.text.StringVisitable; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; -import net.minecraft.util.Language; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -@Deprecated(forRemoval = true) -public class SearchResultsWidget implements Drawable, Element { - private static final ButtonTextures PAGE_FORWARD_TEXTURES = new ButtonTextures(Identifier.ofVanilla("recipe_book/page_forward"), Identifier.ofVanilla("recipe_book/page_forward_highlighted")); - private static final ButtonTextures PAGE_BACKWARD_TEXTURES = new ButtonTextures(Identifier.ofVanilla("recipe_book/page_backward"), Identifier.ofVanilla("recipe_book/page_backward_highlighted")); - private static final int COLS = 5; - private static final int MAX_TEXT_WIDTH = 124; - private static final String ELLIPSIS = "..."; - - private final MinecraftClient client; - private final int parentX; - private final int parentY; - - private final List searchResults = new ArrayList<>(); - private List recipeResults = new ArrayList<>(); - private String searchText = null; - private final List resultButtons = new ArrayList<>(); - private final ToggleButtonWidget nextPageButton; - private final ToggleButtonWidget prevPageButton; - private int currentPage = 0; - private int pageCount = 0; - private boolean displayRecipes = false; - - public SearchResultsWidget(MinecraftClient client, int parentX, int parentY) { - this.client = client; - this.parentX = parentX; - this.parentY = parentY; - int gridX = parentX + 11; - int gridY = parentY + 31; - int rows = 4; - for (int i = 0; i < rows; ++i) - for (int j = 0; j < COLS; ++j) { - int x = gridX + j * 25; - int y = gridY + i * 25; - resultButtons.add(new ResultButtonWidget(x, y)); - } - this.nextPageButton = new ToggleButtonWidget(parentX + 93, parentY + 137, 12, 17, false); - this.nextPageButton.setTextures(PAGE_FORWARD_TEXTURES); - this.prevPageButton = new ToggleButtonWidget(parentX + 38, parentY + 137, 12, 17, true); - this.prevPageButton.setTextures(PAGE_BACKWARD_TEXTURES); - } - - public void closeRecipeView() { - this.currentPage = 0; - this.pageCount = (this.searchResults.size() - 1) / resultButtons.size() + 1; - this.displayRecipes = false; - this.updateButtons(); - } - - protected void updateSearchResult(String searchText) { - searchText = searchText.toLowerCase(Locale.ENGLISH); - - if (!searchText.equals(this.searchText)) { - this.searchText = searchText; - this.searchResults.clear(); - for (ItemStack entry : ItemRepository.getItems()) { - String name = entry.getName().toString().toLowerCase(Locale.ENGLISH); - LoreComponent lore = entry.getOrDefault(DataComponentTypes.LORE, LoreComponent.DEFAULT); - if (name.contains(this.searchText) || lore.lines().stream().map(Text::getString).anyMatch(s -> s.contains(this.searchText))) - this.searchResults.add(entry); - } - this.currentPage = 0; - this.pageCount = (this.searchResults.size() - 1) / resultButtons.size() + 1; - this.displayRecipes = false; - this.updateButtons(); - } - } - - private void updateButtons() { - if (this.displayRecipes) { - SkyblockCraftingRecipe recipe = this.recipeResults.get(this.currentPage); - for (ResultButtonWidget button : resultButtons) - button.clearItemStack(); - resultButtons.get(5).setItemStack(recipe.getGrid().getFirst()); - resultButtons.get(6).setItemStack(recipe.getGrid().get(1)); - resultButtons.get(7).setItemStack(recipe.getGrid().get(2)); - resultButtons.get(10).setItemStack(recipe.getGrid().get(3)); - resultButtons.get(11).setItemStack(recipe.getGrid().get(4)); - resultButtons.get(12).setItemStack(recipe.getGrid().get(5)); - resultButtons.get(15).setItemStack(recipe.getGrid().get(6)); - resultButtons.get(16).setItemStack(recipe.getGrid().get(7)); - resultButtons.get(17).setItemStack(recipe.getGrid().get(8)); - resultButtons.get(14).setItemStack(recipe.getResult()); - } else { - for (int i = 0; i < resultButtons.size(); ++i) { - int index = this.currentPage * resultButtons.size() + i; - if (index < this.searchResults.size()) { - resultButtons.get(i).setItemStack(this.searchResults.get(index)); - } else { - resultButtons.get(i).clearItemStack(); - } - } - } - this.prevPageButton.active = this.currentPage > 0; - this.nextPageButton.active = this.currentPage < this.pageCount - 1; - } - - public void render(DrawContext context, int mouseX, int mouseY, float delta) { - TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - RenderSystem.disableDepthTest(); - if (this.displayRecipes) { - //Craft text - usually a requirement for the recipe - String craftText = this.recipeResults.get(this.currentPage).getCraftText(); - if (textRenderer.getWidth(craftText) > MAX_TEXT_WIDTH) { - drawTooltip(textRenderer, context, craftText, this.parentX + 11, this.parentY + 31, mouseX, mouseY); - craftText = textRenderer.trimToWidth(craftText, MAX_TEXT_WIDTH) + ELLIPSIS; - } - context.drawTextWithShadow(textRenderer, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); - - //Item name - Text resultText = this.recipeResults.get(this.currentPage).getResult().getName(); - if (textRenderer.getWidth(resultText) > MAX_TEXT_WIDTH) { - drawTooltip(textRenderer, context, resultText, this.parentX + 11, this.parentY + 43, mouseX, mouseY); - StringVisitable trimmed = StringVisitable.concat(textRenderer.trimToWidth(resultText, MAX_TEXT_WIDTH), StringVisitable.plain(ELLIPSIS)); - OrderedText ordered = Language.getInstance().reorder(trimmed); - - context.drawTextWithShadow(textRenderer, ordered, this.parentX + 11, this.parentY + 43, 0xffffffff); - } else { - context.drawTextWithShadow(textRenderer, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); - } - - //Arrow pointing to result item from the recipe - context.drawTextWithShadow(textRenderer, "▶", this.parentX + 96, this.parentY + 90, 0xaaffffff); - } - for (ResultButtonWidget button : resultButtons) - button.render(context, mouseX, mouseY, delta); - if (this.pageCount > 1) { - String string = (this.currentPage + 1) + "/" + this.pageCount; - int dx = this.client.textRenderer.getWidth(string) / 2; - context.drawText(textRenderer, string, this.parentX - dx + 73, this.parentY + 141, -1, false); - } - if (this.prevPageButton.active) this.prevPageButton.render(context, mouseX, mouseY, delta); - if (this.nextPageButton.active) this.nextPageButton.render(context, mouseX, mouseY, delta); - RenderSystem.enableDepthTest(); - } - - /** - * Used for drawing tooltips over truncated text - */ - private void drawTooltip(TextRenderer textRenderer, DrawContext context, Text text, int textX, int textY, int mouseX, int mouseY){ - RenderSystem.disableDepthTest(); - if (mouseX >= textX && mouseX <= textX + MAX_TEXT_WIDTH + 4 && mouseY >= textY && mouseY <= textY + 9) { - context.drawTooltip(textRenderer, text, mouseX, mouseY); - } - RenderSystem.enableDepthTest(); - } - - /** - * @see #drawTooltip(TextRenderer, DrawContext, Text, int, int, int, int) - */ - private void drawTooltip(TextRenderer textRenderer, DrawContext context, String text, int textX, int textY, int mouseX, int mouseY){ - drawTooltip(textRenderer, context, Text.of(text), textX, textY, mouseX, mouseY); - } - - public void drawTooltip(DrawContext context, int mouseX, int mouseY) { - RenderSystem.disableDepthTest(); - for (ResultButtonWidget button : resultButtons) - if (button.isMouseOver(mouseX, mouseY)) - button.renderTooltip(context, mouseX, mouseY); - RenderSystem.enableDepthTest(); - } - - public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { - for (ResultButtonWidget button : resultButtons) - if (button.mouseClicked(mouseX, mouseY, mouseButton)) { - String internalName = ItemUtils.getItemId(button.itemStack); - if (internalName.isEmpty()) { - continue; - } - List recipes = ItemRepository.getRecipes(internalName); - if (!recipes.isEmpty()) { - this.recipeResults = recipes; - this.currentPage = 0; - this.pageCount = recipes.size(); - this.displayRecipes = true; - this.updateButtons(); - } - return true; - } - if (this.prevPageButton.mouseClicked(mouseX, mouseY, mouseButton)) { - --this.currentPage; - this.updateButtons(); - return true; - } - if (this.nextPageButton.mouseClicked(mouseX, mouseY, mouseButton)) { - ++this.currentPage; - this.updateButtons(); - return true; - } - return false; - } - - private boolean focused = false; - - @Override - public void setFocused(boolean focused) { - this.focused = focused; - } - - @Override - public boolean isFocused() { - return focused; - } - -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/UpcomingEventsTab.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/UpcomingEventsTab.java deleted file mode 100644 index f59fe809..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/UpcomingEventsTab.java +++ /dev/null @@ -1,168 +0,0 @@ -package de.hysky.skyblocker.skyblock.itemlist; - -import de.hysky.skyblocker.mixins.accessors.DrawContextInvoker; -import de.hysky.skyblocker.skyblock.events.EventNotifications; -import de.hysky.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; -import de.hysky.skyblocker.utils.SkyblockTime; -import de.hysky.skyblocker.utils.scheduler.MessageScheduler; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.Element; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner; -import net.minecraft.client.gui.tooltip.TooltipComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; -import net.minecraft.text.MutableText; -import net.minecraft.text.Style; -import net.minecraft.text.Text; -import net.minecraft.util.Colors; -import net.minecraft.util.Formatting; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.LinkedList; -import java.util.List; - -@Deprecated(forRemoval = true) -public class UpcomingEventsTab extends ItemListWidget.TabContainerWidget { - private static final ItemStack CLOCK = new ItemStack(Items.CLOCK); - private final MinecraftClient client; - private final List events; - - public UpcomingEventsTab(int x, int y, MinecraftClient client) { - super(x, y, Text.literal("Upcoming Events Tab")); - this.client = client; - events = EventNotifications.getEvents().entrySet() - .stream() - .sorted(Comparator.comparingLong(a -> a.getValue().isEmpty() ? Long.MAX_VALUE : a.getValue().peekFirst().start())) - .map(stringLinkedListEntry -> new EventRenderer(stringLinkedListEntry.getKey(), stringLinkedListEntry.getValue())) - .toList(); - } - - @Override - public void drawTooltip(DrawContext context, int mouseX, int mouseY) { - if (hovered != null) { - ((DrawContextInvoker) context).invokeDrawTooltip(this.client.textRenderer, hovered.getTooltip(), mouseX, mouseY, HoveredTooltipPositioner.INSTANCE, null); - } - } - - @Override - public List children() { - return List.of(); - } - - private EventRenderer hovered = null; - - @Override - protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { - int x = getX(); - int y = getY(); - context.enableScissor(x, y, getRight(), getBottom()); - context.drawItem(CLOCK, x, y + 4); - context.drawText(this.client.textRenderer, "Upcoming Events", x + 17, y + 7, -1, true); - - int eventsY = y + 7 + 24; - hovered = null; - for (EventRenderer eventRenderer : events) { - eventRenderer.render(context, x + 1, eventsY, mouseX, mouseY); - if (isMouseOver(mouseX, mouseY) && eventRenderer.isMouseOver(mouseX, mouseY, x+1, eventsY)) hovered = eventRenderer; - eventsY += eventRenderer.getHeight(); - - } - context.disableScissor(); - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (hovered != null && hovered.getWarpCommand() != null) { - MessageScheduler.INSTANCE.sendMessageAfterCooldown(hovered.getWarpCommand()); - return true; - } - return false; - } - - @Override - protected void appendClickableNarrations(NarrationMessageBuilder builder) { - - } - - public static class EventRenderer { - - private final LinkedList events; - private final String eventName; - - public EventRenderer(String eventName, LinkedList events) { - this.events = events; - this.eventName = eventName; - } - - public void render(DrawContext context, int x, int y, int mouseX, int mouseY) { - long time = System.currentTimeMillis() / 1000; - TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - context.drawText(textRenderer, Text.literal(eventName).fillStyle(Style.EMPTY.withUnderline(isMouseOver(mouseX, mouseY, x, y))), x, y, -1, true); - if (events.isEmpty()) { - context.drawText(textRenderer, Text.literal(" ").append(Text.translatable("skyblocker.events.tab.noMore")), x, y + textRenderer.fontHeight, Colors.GRAY, false); - } else if (events.peekFirst().start() > time) { - MutableText formatted = Text.literal(" ").append(Text.translatable("skyblocker.events.tab.startsIn", SkyblockTime.formatTime((int) (events.peekFirst().start() - time)))).formatted(Formatting.YELLOW); - context.drawText(textRenderer, formatted, x, y + textRenderer.fontHeight, -1, true); - } else { - MutableText formatted = Text.literal(" ").append(Text.translatable( "skyblocker.events.tab.endsIn", SkyblockTime.formatTime((int) (events.peekFirst().start() + events.peekFirst().duration() - time)))).formatted(Formatting.GREEN); - context.drawText(textRenderer, formatted, x, y + textRenderer.fontHeight, -1, true); - } - - } - - public int getHeight() { - return 20; - } - - public boolean isMouseOver(int mouseX, int mouseY, int x, int y) { - return mouseX >= x && mouseX <= x + 131 && mouseY >= y && mouseY <= y+getHeight(); - } - - public List getTooltip() { - List components = new ArrayList<>(); - if (events.peekFirst() == null) return components; - if (eventName.equals(EventNotifications.JACOBS)) { - components.add(new JacobsTooltip(events.peekFirst().extras())); - } - //noinspection DataFlowIssue - if (events.peekFirst().warpCommand() != null) { - components.add(TooltipComponent.of(Text.translatable("skyblocker.events.tab.clickToWarp").formatted(Formatting.ITALIC).asOrderedText())); - } - - return components; - } - - public @Nullable String getWarpCommand() { - if (events.isEmpty()) return null; - return events.peek().warpCommand(); - } - } - - private record JacobsTooltip(String[] crops) implements TooltipComponent { - private static final ItemStack BARRIER = new ItemStack(Items.BARRIER); - - @Override - public int getHeight(TextRenderer textRenderer) { - return 20; - } - - @Override - public int getWidth(TextRenderer textRenderer) { - return 16 * 3 + 4; - } - - @Override - public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { - for (int i = 0; i < crops.length; i++) { - String crop = crops[i]; - context.drawItem(JacobsContestWidget.FARM_DATA.getOrDefault(crop, BARRIER), x + 18 * i, y + 2); - } - } - - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/SubPageSelectButton.java b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/SubPageSelectButton.java index 9c23edaa..eea424d6 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/SubPageSelectButton.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/profileviewer/utils/SubPageSelectButton.java @@ -44,7 +44,7 @@ public class SubPageSelectButton extends ClickableWidget { } @Override - protected boolean clicked(double mouseX, double mouseY) { + public boolean isMouseOver(double mouseX, double mouseY) { return this.active && this.visible &&(mouseX > getX() + 1 && mouseX < getX() + 19 && mouseY > getY() + 1 && mouseY < getY() + 19); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java index 66735511..62d58304 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/shortcut/ShortcutsConfigScreen.java @@ -49,7 +49,7 @@ public class ShortcutsConfigScreen extends Screen { GridWidget.Adder adder = gridWidget.createAdder(2); buttonDelete = ButtonWidget.builder(Text.translatable("selectServer.deleteButton"), button -> { if (client != null && shortcutsConfigListWidget.getSelectedOrNull() instanceof ShortcutsConfigListWidget.ShortcutEntry shortcutEntry) { - scrollAmount = shortcutsConfigListWidget.getScrollAmount(); + scrollAmount = shortcutsConfigListWidget.getScrollY(); client.setScreen(new ConfirmScreen(this::deleteEntry, Text.translatable("skyblocker.shortcuts.deleteQuestion"), Text.stringifiedTranslatable("skyblocker.shortcuts.deleteWarning", shortcutEntry), Text.translatable("selectServer.deleteButton"), ScreenTexts.CANCEL)); } }).build(); @@ -74,7 +74,7 @@ public class ShortcutsConfigScreen extends Screen { shortcutsConfigListWidget.removeEntry(shortcutEntry); } client.setScreen(this); // Re-inits the screen and keeps the old instance of ShortcutsConfigListWidget - shortcutsConfigListWidget.setScrollAmount(scrollAmount); + shortcutsConfigListWidget.setScrollY(scrollAmount); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java index 724cb461..1d8bf63f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/waypoint/DropdownWidget.java @@ -21,12 +21,11 @@ public class DropdownWidget extends ElementListWidget protected boolean open; public DropdownWidget(MinecraftClient minecraftClient, int x, int y, int width, int maxHeight, List entries, Consumer selectCallback, T selected) { - super(minecraftClient, width, Math.min((entries.size() + 1) * ENTRY_HEIGHT + 8, maxHeight), y, ENTRY_HEIGHT); + super(minecraftClient, width, Math.min((entries.size() + 1) * ENTRY_HEIGHT + 8, maxHeight), y, ENTRY_HEIGHT, ENTRY_HEIGHT + 4); setX(x); this.entries = entries; this.selectCallback = selectCallback; this.selected = selected; - setRenderHeader(true, ENTRY_HEIGHT + 4); for (T entry : entries) { addEntry(new Entry<>(this, entry)); } @@ -43,9 +42,16 @@ public class DropdownWidget extends ElementListWidget } @Override - protected boolean clickedHeader(int x, int y) { - open = !open; - return true; + public boolean mouseClicked(double mouseX, double mouseY, int button) { + boolean superClicked = super.mouseClicked(mouseX, mouseY, button); + + if (!superClicked && this.getEntryAtPosition(mouseX, mouseY) == null) { + if ((!open && this.isMouseOver(mouseX, mouseY)) || open) open = !open; + + return true; + } + + return superClicked; } @Override @@ -58,8 +64,8 @@ public class DropdownWidget extends ElementListWidget context.getMatrices().push(); context.getMatrices().translate(0, 0, 100); - int y = getY() - (int) getScrollAmount(); - int height = getMaxPosition(); + int y = getY() - (int) getScrollY(); + int height = getContentsHeightWithPadding(); context.fill(getX(), y, getX() + width, y + headerHeight, 0xFF000000); context.drawHorizontalLine(getX(), getX() + width, y, 0xFFFFFFFF); @@ -95,7 +101,7 @@ public class DropdownWidget extends ElementListWidget protected void select(T entry) { selected = entry; open = false; - setScrollAmount(0); + setScrollY(0); if (selected != prevSelected) { selectCallback.accept(entry); prevSelected = selected; diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java index 8980f348..c861f9f3 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/RenderHelper.java @@ -319,12 +319,8 @@ public class RenderHelper { VertexConsumerProvider.Immediate consumers = VertexConsumerProvider.immediate(ALLOCATOR); - RenderSystem.depthFunc(throughWalls ? GL11.GL_ALWAYS : GL11.GL_LEQUAL); - - textRenderer.draw(text, xOffset, yOffset, 0xFFFFFFFF, false, positionMatrix, consumers, TextRenderer.TextLayerType.SEE_THROUGH, 0, LightmapTextureManager.MAX_LIGHT_COORDINATE); + textRenderer.draw(text, xOffset, yOffset, 0xFFFFFFFF, false, positionMatrix, consumers, throughWalls ? TextRenderer.TextLayerType.SEE_THROUGH : TextRenderer.TextLayerType.NORMAL, 0, LightmapTextureManager.MAX_LIGHT_COORDINATE); consumers.draw(); - - RenderSystem.depthFunc(GL11.GL_LEQUAL); } /** diff --git a/src/main/java/de/hysky/skyblocker/utils/render/SkyblockerRenderLayers.java b/src/main/java/de/hysky/skyblocker/utils/render/SkyblockerRenderLayers.java index 51707b43..bba6e673 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/SkyblockerRenderLayers.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/SkyblockerRenderLayers.java @@ -28,7 +28,7 @@ public class SkyblockerRenderLayers { public static final MultiPhase FILLED_THROUGH_WALLS = RenderLayer.of("filled_through_walls", VertexFormats.POSITION_COLOR, DrawMode.TRIANGLE_STRIP, RenderLayer.CUTOUT_BUFFER_SIZE, false, true, MultiPhaseParameters.builder() .program(RenderPhase.POSITION_COLOR_PROGRAM) - .cull(Cull.DISABLE_CULLING) + .cull(Cull.ENABLE_CULLING) .layering(RenderPhase.POLYGON_OFFSET_LAYERING) .transparency(DEFAULT_TRANSPARENCY) .depthTest(DepthTest.ALWAYS_DEPTH_TEST) -- cgit