diff options
Diffstat (limited to 'src')
26 files changed, 392 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/accessor/SlotAccessor.java b/src/main/java/de/hysky/skyblocker/mixin/accessor/SlotAccessor.java new file mode 100644 index 00000000..2a0a418f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixin/accessor/SlotAccessor.java @@ -0,0 +1,14 @@ +package de.hysky.skyblocker.mixin.accessor; + +import net.minecraft.screen.slot.Slot; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(Slot.class) +public interface SlotAccessor { + + @Accessor("x") + void setX(int x); + @Accessor("y") + void setY(int y); +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java new file mode 100644 index 00000000..48b528ee --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionBrowserScreen.java @@ -0,0 +1,20 @@ +package de.hysky.skyblocker.skyblock.auction; + +import de.hysky.skyblocker.SkyblockerMod; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; + +public class AuctionBrowserScreen extends HandledScreen<AuctionHouseScreenHandler> { + protected static final Identifier TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/auctions_gui/browser/background.png"); + public AuctionBrowserScreen(AuctionHouseScreenHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + } + + @Override + protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { + context.drawTexture(TEXTURE, this.x, this.y, 0, 0, this.backgroundWidth, this.backgroundHeight); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java new file mode 100644 index 00000000..58adfc6c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/AuctionHouseScreenHandler.java @@ -0,0 +1,40 @@ +package de.hysky.skyblocker.skyblock.auction; + +import de.hysky.skyblocker.mixin.accessor.SlotAccessor; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.Inventory; +import net.minecraft.screen.GenericContainerScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.screen.slot.Slot; + +public class AuctionHouseScreenHandler extends GenericContainerScreenHandler { + public AuctionHouseScreenHandler(ScreenHandlerType<?> type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows, boolean isView) { + super(type, syncId, playerInventory, inventory, rows); + + int yOffset = (rows - 4) * 18; + // Shift player inventory by 2 pixels and also remove the yOffset + for (int i = rows*9; i < slots.size(); i++) { + SlotAccessor slotAccessor = (SlotAccessor) slots.get(i); + slotAccessor.setY(2-yOffset); + } + + if (isView) return; + // disable ALL THE OTHER SLOTS MWAHAHAHA and also move the good ones around and stuff + for (int i = 9; i < (rows-1)*9; i++) { + int lineI = i % 9; + Slot slot = slots.get(i); + if (lineI > 1 && lineI < 8) { + SlotAccessor slotAccessor = (SlotAccessor) slot; + slotAccessor.setX(8+ lineI * 18); + slotAccessor.setY(18 + (i/9 -1) * 18); + } else { + slots.set(i, new Slot(slot.inventory, slot.getIndex(), slot.x, slot.y){ + @Override + public boolean isEnabled() { + return false; + } + }); + } + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/auction/SlotClickHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/auction/SlotClickHandler.java new file mode 100644 index 00000000..b64a4583 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/auction/SlotClickHandler.java @@ -0,0 +1,11 @@ +package de.hysky.skyblocker.skyblock.auction; + +@FunctionalInterface +public interface SlotClickHandler { + + void click(int slot, int button); + + default void click(int slot) { + click(slot, 0); + } +} 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; + } + } +} diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/all.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/all.png Binary files differnew file mode 100644 index 00000000..8842041d --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/all.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/auctions.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/auctions.png Binary files differnew file mode 100644 index 00000000..1de6b9aa --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/auctions.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/back.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/back.png Binary files differnew file mode 100644 index 00000000..58e84c34 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/back.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/bin.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/bin.png Binary files differnew file mode 100644 index 00000000..b816a9fb --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/bin.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/hover.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/hover.png Binary files differnew file mode 100644 index 00000000..cb55b1f0 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/auction_type_widget/hover.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background.png Binary files differnew file mode 100644 index 00000000..ca52a9e8 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background_view.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background_view.png Binary files differnew file mode 100644 index 00000000..34bf95c4 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/browser/background_view.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/background.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/background.png Binary files differnew file mode 100644 index 00000000..d55e1973 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/background.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/hover.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/hover.png Binary files differnew file mode 100644 index 00000000..81ca8ef0 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/rarity_widget/hover.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/back.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/back.png Binary files differnew file mode 100644 index 00000000..890b98d7 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/back.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/high.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/high.png Binary files differnew file mode 100644 index 00000000..4e8a455a --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/high.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/hover.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/hover.png Binary files differnew file mode 100644 index 00000000..eeb6b1c6 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/hover.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/low.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/low.png Binary files differnew file mode 100644 index 00000000..c53864fc --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/low.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/rand.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/rand.png Binary files differnew file mode 100644 index 00000000..d7dea847 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/rand.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/soon.png b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/soon.png Binary files differnew file mode 100644 index 00000000..d72acf59 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/auctions_gui/sort_widget/soon.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/down_arrow_even.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/down_arrow_even.png Binary files differnew file mode 100644 index 00000000..94243d0a --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/down_arrow_even.png diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/up_arrow_even.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/up_arrow_even.png Binary files differnew file mode 100644 index 00000000..2243bb95 --- /dev/null +++ b/src/main/resources/assets/skyblocker/textures/gui/sprites/up_arrow_even.png diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 9f5f8240..9a911b86 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -52,5 +52,8 @@ ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + "accessor.SlotAccessor" + ] } |