aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets
diff options
context:
space:
mode:
authorvicisacat <victor.branchu@gmail.com>2024-03-22 08:43:08 +0100
committervicisacat <victor.branchu@gmail.com>2024-04-12 17:18:23 +0200
commitaf46b0c6b8d38d876e59e523d4af4c939053a988 (patch)
tree5ec72bf9d67c16922fff7a124f62cfcb18f1347a /src/main/java/de/hysky/skyblocker/skyblock/auction/widgets
parent5041bdec5268c77638ca1d1e61093433e4d191e2 (diff)
downloadSkyblocker-af46b0c6b8d38d876e59e523d4af4c939053a988.tar.gz
Skyblocker-af46b0c6b8d38d876e59e523d4af4c939053a988.tar.bz2
Skyblocker-af46b0c6b8d38d876e59e523d4af4c939053a988.zip
start
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/auction/widgets')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/AuctionTypeWidget.java66
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/CategoryTabWidget.java61
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SliderWidget.java110
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SortWidget.java66
4 files changed, 303 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/AuctionTypeWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/AuctionTypeWidget.java
new file mode 100644
index 00000000..64410d72
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/AuctionTypeWidget.java
@@ -0,0 +1,66 @@
+package de.hysky.skyblocker.skyblock.auction.widgets;
+
+import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.auction.SlotClickHandler;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.math.MathHelper;
+
+public class AuctionTypeWidget extends SliderWidget<AuctionTypeWidget.Option> {
+
+ /**
+ * @param x x position
+ * @param y y position
+ * @param slotClick IDK figure it out
+ */
+ public AuctionTypeWidget(int x, int y, SlotClickHandler slotClick) {
+ super(x, y, 17, 17, Text.literal("Auction Type Widget"), slotClick, Option.ALL);
+ }
+
+ public enum Option implements OptionInfo {
+ ALL("all.png"),
+ BIN("bin.png"),
+ AUC("auctions.png");
+
+ private final Identifier texture;
+ private static final String prefix = "textures/gui/auctions_gui/auction_type_widget/";
+ private static final Identifier HOVER_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, prefix + "hover.png");
+ private static final Identifier BACK_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE,prefix + "back.png");
+
+ Option(String textureName) {
+ texture = new Identifier(SkyblockerMod.NAMESPACE, prefix + textureName);
+ }
+ private static final AuctionTypeWidget.Option[] values = values();
+ public static AuctionTypeWidget.Option get(int ordinal) {return values[MathHelper.clamp(ordinal, 0, values.length-1)];}
+
+ @Override
+ public boolean isVertical() {
+ return true;
+ }
+
+ @Override
+ public int getOffset() {
+ return 4 * ordinal();
+ }
+
+ @Override
+ public int[] getOptionSize() {
+ return new int[]{17, 9};
+ }
+
+ @Override
+ public Identifier getOptionTexture() {
+ return texture;
+ }
+
+ @Override
+ public Identifier getBackTexture() {
+ return BACK_TEXTURE;
+ }
+
+ @Override
+ public Identifier getHoverTexture() {
+ return HOVER_TEXTURE;
+ }
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/CategoryTabWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/CategoryTabWidget.java
new file mode 100644
index 00000000..6c515e50
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/CategoryTabWidget.java
@@ -0,0 +1,61 @@
+package de.hysky.skyblocker.skyblock.auction.widgets;
+
+import de.hysky.skyblocker.skyblock.auction.SlotClickHandler;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.ButtonTextures;
+import net.minecraft.client.gui.widget.ToggleButtonWidget;
+import net.minecraft.client.item.TooltipContext;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.Identifier;
+import org.jetbrains.annotations.NotNull;
+
+public class CategoryTabWidget extends ToggleButtonWidget {
+ private static final ButtonTextures TEXTURES = new ButtonTextures(new Identifier("recipe_book/tab"), new Identifier("recipe_book/tab_selected"));
+
+ public void setIcon(@NotNull ItemStack icon) {
+ this.icon = icon.copy();
+ }
+
+ private @NotNull ItemStack icon;
+ private final SlotClickHandler slotClick;
+ private int slotId = -1;
+
+ public CategoryTabWidget(@NotNull ItemStack icon, SlotClickHandler slotClick) {
+ super(0, 0, 35, 27, false);
+ this.icon = icon.copy(); // copy prevents item disappearing on click
+ this.slotClick = slotClick;
+ setTextures(TEXTURES);
+ }
+
+ @Override
+ public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
+ if (textures == null) return;
+ Identifier identifier = textures.get(true, this.toggled);
+ int x = getX();
+ if (toggled) x-=2;
+ //RenderSystem.disableDepthTest();
+ context.drawGuiTexture(identifier, x, this.getY(), this.width, this.height);
+ //RenderSystem.enableDepthTest();
+ context.drawItem(icon, x+9, getY()+5);
+
+ if (isMouseOver(mouseX, mouseY)) {
+ context.getMatrices().push();
+ //context.getMatrices().translate(0, 0, 500f);
+ context.drawTooltip(MinecraftClient.getInstance().textRenderer, icon.getTooltip(MinecraftClient.getInstance().player, TooltipContext.BASIC), mouseX, mouseY);
+ context.getMatrices().pop();
+ }
+
+ }
+
+ public void setSlotId(int slotId) {
+ this.slotId = slotId;
+ }
+
+ @Override
+ public void onClick(double mouseX, double mouseY) {
+ if (this.toggled || slotId == -1) return;
+ slotClick.click(slotId);
+ this.setToggled(true);
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SliderWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SliderWidget.java
new file mode 100644
index 00000000..97543d23
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SliderWidget.java
@@ -0,0 +1,110 @@
+package de.hysky.skyblocker.skyblock.auction.widgets;
+
+import de.hysky.skyblocker.skyblock.auction.SlotClickHandler;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
+import net.minecraft.client.gui.widget.ClickableWidget;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+import java.util.function.Consumer;
+import java.util.function.DoubleConsumer;
+
+// This is kinda excessive, but I thought it was a good idea
+public class SliderWidget<E extends Enum<E> & SliderWidget.OptionInfo> extends ClickableWidget {
+ private final SlotClickHandler clickSlot;
+ private int button = 0;
+ private int slotId = -1;
+
+ protected E current;
+
+ float posProgress;
+
+ /**
+ *
+ * @param x x position
+ * @param y y position
+ * @param width width
+ * @param height height
+ * @param message probably useless, just put the widget name
+ * @param clickSlot the parent AuctionsBrowser
+ * @param defaultOption the default option <strong>should be the one at ordinal 0</strong>
+ */
+ public SliderWidget(int x, int y, int width, int height, Text message, SlotClickHandler clickSlot, E defaultOption) {
+ super(x, y, width, height, message);
+ this.clickSlot = clickSlot;
+ this.current = defaultOption;
+ posProgress = current.getOffset();
+ }
+
+ @Override
+ protected void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
+ if (posProgress < current.getOffset()) {
+ posProgress += delta * 5;
+ if (posProgress > current.getOffset()) posProgress = current.getOffset();
+ } else if (posProgress > current.getOffset()) {
+ posProgress -= delta * 5;
+ if (posProgress < current.getOffset()) posProgress = current.getOffset();
+ }
+
+
+ context.getMatrices().push();
+ context.getMatrices().translate(getX(), getY(), 0);
+
+ int x = current.isVertical() ? 0: Math.round(posProgress);
+ int y = current.isVertical() ? Math.round(posProgress): 0;
+
+ int optionWidth = current.getOptionSize()[0];
+ int optionHeight = current.getOptionSize()[1];
+
+ //context.drawText(parent.getTextRender(), String.valueOf(slotId), 0, -9, Colors.RED, true);
+ context.drawTexture(current.getBackTexture(), 0, 0, 0, 0, getWidth(), getHeight(), getWidth(), getHeight());
+ context.drawTexture(current.getOptionTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight);
+ if (isHovered()) {
+ context.drawTexture(current.getHoverTexture(), x, y, 0, 0, optionWidth, optionHeight, optionWidth, optionHeight);
+
+ }
+ context.getMatrices().pop();
+ }
+
+ @Override
+ public void onClick(double mouseX, double mouseY) {
+ if (slotId == -1) return;
+ clickSlot.click(slotId, button);
+ super.onClick(mouseX, mouseY);
+ }
+
+ @Override
+ protected boolean isValidClickButton(int button) {
+ this.button = button;
+ return super.isValidClickButton(button) || button == 1;
+ }
+
+ public void setSlotId(int slotId) {
+ this.slotId = slotId;
+ }
+
+ public void setCurrent(E current) {
+ this.current = current;
+ }
+
+ @Override
+ protected void appendClickableNarrations(NarrationMessageBuilder builder) {}
+ public interface OptionInfo {
+ boolean isVertical();
+
+ /**
+ * @return The current option's position offset from the first option's position
+ */
+ int getOffset();
+
+ int[] getOptionSize();
+
+ Identifier getOptionTexture();
+
+ Identifier getBackTexture();
+
+ Identifier getHoverTexture();
+
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SortWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SortWidget.java
new file mode 100644
index 00000000..62c3a497
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/widgets/SortWidget.java
@@ -0,0 +1,66 @@
+package de.hysky.skyblocker.skyblock.auction.widgets;
+
+import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.skyblock.auction.SlotClickHandler;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.math.MathHelper;
+
+public class SortWidget extends SliderWidget<SortWidget.Option> {
+
+ /**
+ * @param x x position
+ * @param y y position
+ * @param clickSlot the parent AuctionsBrowser
+ */
+ public SortWidget(int x, int y, SlotClickHandler clickSlot) {
+ super(x, y, 36, 9, Text.literal("Sort Widget"), clickSlot, Option.HIGH);
+ }
+
+ public enum Option implements OptionInfo {
+ HIGH("high.png"),
+ LOW("low.png"),
+ SOON("soon.png"),
+ RAND("rand.png");
+
+ private final Identifier texture;
+ private static final String prefix = "textures/gui/auctions_gui/sort_widget/";
+ private static final Identifier HOVER_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, prefix + "hover.png");
+ private static final Identifier BACK_TEXTURE = new Identifier(SkyblockerMod.NAMESPACE,prefix + "back.png");
+
+ Option(String textureName) {
+ texture = new Identifier(SkyblockerMod.NAMESPACE, prefix + textureName);
+ }
+ public Identifier getOptionTexture() {
+ return texture;
+ }
+
+ private static final Option[] values = values();
+ public static Option get(int ordinal) {return values[MathHelper.clamp(ordinal, 0, values.length-1)];}
+
+ @Override
+ public boolean isVertical() {
+ return false;
+ }
+
+ @Override
+ public int getOffset() {
+ return 5 * ordinal();
+ }
+
+ @Override
+ public int[] getOptionSize() {
+ return new int[]{21, 9};
+ }
+
+ @Override
+ public Identifier getBackTexture() {
+ return BACK_TEXTURE;
+ }
+
+ @Override
+ public Identifier getHoverTexture() {
+ return HOVER_TEXTURE;
+ }
+ }
+}