From 651fdf3eb7a59d9170fa11a104b73303780bcd85 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sat, 16 Mar 2024 18:23:29 +0100 Subject: Funky looking thing --- .../mixin/HandledScreenProviderMixin.java | 8 + .../item/SkyblockCraftingTableHandler.java | 68 +++++++ .../skyblock/item/SkyblockCraftingTableScreen.java | 208 +++++++++++++++++++++ .../gui/sprites/quick_craft/more_button.png | Bin 0 -> 210 bytes .../sprites/quick_craft/more_button_disabled.png | Bin 0 -> 201 bytes .../quick_craft/more_button_highlighted.png | Bin 0 -> 210 bytes .../sprites/quick_craft/quick_craft_overlay.png | Bin 0 -> 250 bytes 7 files changed, 284 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java create mode 100644 src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button.png create mode 100644 src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_disabled.png create mode 100644 src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_highlighted.png create mode 100644 src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/quick_craft_overlay.png (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java index 94eb53a5..35618798 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java @@ -3,6 +3,9 @@ package de.hysky.skyblocker.mixin; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; +import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableHandler; +import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableScreen; +import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ingame.HandledScreens; import net.minecraft.client.network.ClientPlayerEntity; @@ -41,6 +44,11 @@ public interface HandledScreenProviderMixin { client.setScreen(new PartyFinderScreen(containerScreenHandler, player.getInventory(), name)); } + ci.cancel(); + } else if (Utils.isOnSkyblock() && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { + SkyblockCraftingTableHandler skyblockCraftingTableHandler = new SkyblockCraftingTableHandler(containerScreenHandler, player.getInventory()); + client.player.currentScreenHandler = skyblockCraftingTableHandler; + client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableHandler, player.getInventory(), Text.literal("Craft Item"))); ci.cancel(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java new file mode 100644 index 00000000..0c2fb224 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java @@ -0,0 +1,68 @@ +package de.hysky.skyblocker.skyblock.item; + +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; + +import java.util.Arrays; + +public class SkyblockCraftingTableHandler extends GenericContainerScreenHandler { + + private static final int[] normalSlots = new int[]{ + 10, 11, 12, 16, + 19, 20, 21, 23, 25, + 28, 29, 30, 34 + }; + public SkyblockCraftingTableHandler(ScreenHandlerType type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) { + super(type, syncId, playerInventory, inventory, rows); + for (int i = 0; i < rows*9; i++) { + Slot originalSlot = slots.get(i); + if (Arrays.binarySearch(normalSlots, i) >= 0) { + int[] coords = getCoords(i); + Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), coords[0], coords[1]); + slot.id = i; + slots.set(i, slot); + } else { + DisabledSlot slot = new DisabledSlot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y); + slot.id = i; + slots.set(i, slot); + } + } + int yOffset = (rows - 4) * 18 + 19; + for (int i = rows*9; i < slots.size(); i++) { + Slot originalSlot = slots.get(i); + Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y - yOffset); + slot.id = i; + slots.set(i, slot); + } + } + + public SkyblockCraftingTableHandler(GenericContainerScreenHandler handler, PlayerInventory playerInventory) { + this(handler.getType(), handler.syncId, playerInventory, handler.getInventory(), handler.getRows()); + } + + private int[] getCoords(int slot) { + if (slot == 23) return new int[]{124, 35}; + if (slot == 16 || slot == 25 || slot == 34) { + int y = (slot/9 - 1) * 18 + 8; + return new int[]{174, y}; + } + int gridX = slot%9 - 1; + int gridY = slot/9 - 1; + return new int[]{30 + gridX*18, 17+gridY*18}; + } + + public static class DisabledSlot extends Slot { + + public DisabledSlot(Inventory inventory, int index, int x, int y) { + super(inventory, index, x, y); + } + + @Override + public boolean isEnabled() { + return false; + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java new file mode 100644 index 00000000..2dbf1868 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java @@ -0,0 +1,208 @@ +package de.hysky.skyblocker.skyblock.item; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.skyblock.itemlist.ItemListWidget; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.ButtonTextures; +import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; +import net.minecraft.client.gui.tooltip.Tooltip; +import net.minecraft.client.gui.widget.TexturedButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.recipe.Recipe; +import net.minecraft.recipe.RecipeEntry; +import net.minecraft.recipe.RecipeMatcher; +import net.minecraft.recipe.book.RecipeBookCategory; +import net.minecraft.screen.AbstractRecipeScreenHandler; +import net.minecraft.screen.ScreenHandlerType; +import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.RotationAxis; + +public class SkyblockCraftingTableScreen extends HandledScreen { + private static final Identifier TEXTURE = new Identifier("textures/gui/container/crafting_table.png"); + protected static final ButtonTextures MORE_CRAFTS_TEXTURES = new ButtonTextures( + new Identifier(SkyblockerMod.NAMESPACE, "quick_craft/more_button"), + new Identifier(SkyblockerMod.NAMESPACE, "quick_craft/more_button_disabled"), + new Identifier(SkyblockerMod.NAMESPACE, "quick_craft/more_button_highlighted")); + + protected static final Identifier QUICK_CRAFT = new Identifier(SkyblockerMod.NAMESPACE, "quick_craft/quick_craft_overlay"); + private final ItemListWidget recipeBook = new ItemListWidget(); + private boolean narrow; + private TexturedButtonWidget moreCraftsButton; + + public SkyblockCraftingTableScreen(SkyblockCraftingTableHandler handler, PlayerInventory inventory, Text title) { + super(handler, inventory, title); + this.backgroundWidth += 22; + } + + @Override + protected void init() { + super.init(); + this.narrow = this.width < 379; + this.recipeBook.initialize(this.width, this.height, this.client, this.narrow, new Dummy()); + this.x = this.recipeBook.findLeftEdge(this.width, this.backgroundWidth) + 11; + this.addDrawableChild(new TexturedButtonWidget(this.x + 5, this.height / 2 - 49, 20, 18, RecipeBookWidget.BUTTON_TEXTURES, button -> { + this.recipeBook.toggleOpen(); + this.x = this.recipeBook.findLeftEdge(this.width, this.backgroundWidth) + 11; + button.setPosition(this.x + 5, this.height / 2 - 49); + if(moreCraftsButton != null) moreCraftsButton.setPosition(this.x + 174, this.y+62); + })); + moreCraftsButton = new TexturedButtonWidget(this.x + 174, y + 62, 16, 16, MORE_CRAFTS_TEXTURES, + button -> this.onMouseClick(handler.slots.get(26), handler.slots.get(26).id, 0, SlotActionType.PICKUP)); + moreCraftsButton.setTooltipDelay(250); + moreCraftsButton.setTooltip(Tooltip.of(Text.literal("More crafts"))); + this.addDrawableChild(moreCraftsButton); + assert (client != null ? client.player : null) != null; + client.player.currentScreenHandler = handler; // recipe book replaces it with the Dummy one fucking DUMBASS + this.addSelectableChild(this.recipeBook); + this.setInitialFocus(this.recipeBook); + this.titleX = 29; + } + + @Override + public void handledScreenTick() { + super.handledScreenTick(); + this.recipeBook.update(); + if (moreCraftsButton == null) return; + ItemStack stack = handler.slots.get(26).getStack(); + moreCraftsButton.active = stack.isEmpty() || stack.isOf(Items.PLAYER_HEAD); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + if (this.recipeBook.isOpen() && this.narrow) { + this.renderBackground(context, mouseX, mouseY, delta); + this.recipeBook.render(context, mouseX, mouseY, delta); + } else { + super.render(context, mouseX, mouseY, delta); + this.recipeBook.render(context, mouseX, mouseY, delta); + this.recipeBook.drawGhostSlots(context, this.x, this.y, true, delta); + } + this.drawMouseoverTooltip(context, mouseX, mouseY); + this.recipeBook.drawTooltip(context, this.x, this.y, mouseX, mouseY); + MatrixStack matrices = context.getMatrices(); + matrices.push(); + String text = "Quick Craft™"; + matrices.translate(this.x + 173 - textRenderer.fontHeight, this.y + textRenderer.getWidth(text) + 7, 0); + matrices.multiply(RotationAxis.NEGATIVE_Z.rotationDegrees(90)); + context.drawText(textRenderer, text, 0, 0, 0x404040, false); + matrices.pop(); + } + + + @Override + protected void drawSlot(DrawContext context, Slot slot) { + if (slot.id == 23 && slot.getStack().isOf(Items.BARRIER)) return; + super.drawSlot(context, slot); + } + + @Override + protected void drawBackground(DrawContext context, float delta, int mouseX, int mouseY) { + int i = this.x; + int j = (this.height - this.backgroundHeight) / 2; + context.drawTexture(TEXTURE, i, j, 0, 0, this.backgroundWidth, this.backgroundHeight); + context.drawGuiTexture(QUICK_CRAFT, i+173, j, 0, 25, 84); + } + + @Override + protected boolean isPointWithinBounds(int x, int y, int width, int height, double pointX, double pointY) { + return (!this.narrow || !this.recipeBook.isOpen()) && super.isPointWithinBounds(x, y, width, height, pointX, pointY); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (this.recipeBook.mouseClicked(mouseX, mouseY, button)) { + this.setFocused(this.recipeBook); + return true; + } + if (this.narrow && this.recipeBook.isOpen()) { + return true; + } + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + protected boolean isClickOutsideBounds(double mouseX, double mouseY, int left, int top, int button) { + boolean bl = mouseX < (double)left || mouseY < (double)top || mouseX >= (double)(left + this.backgroundWidth) || mouseY >= (double)(top + this.backgroundHeight); + return this.recipeBook.isClickOutsideBounds(mouseX, mouseY, this.x, this.y, this.backgroundWidth, this.backgroundHeight, button) && bl; + } + + @Override + protected void onMouseClick(Slot slot, int slotId, int button, SlotActionType actionType) { + super.onMouseClick(slot, slotId, button, actionType); + this.recipeBook.slotClicked(slot); + // Don't make the more item head skull thing show up + if (slot != null && slot.id == 26) handler.setCursorStack(ItemStack.EMPTY); + } + + + static class Dummy extends AbstractRecipeScreenHandler { + + public Dummy() { + super(ScreenHandlerType.GENERIC_9X6, -69); + } + + @Override + public void populateRecipeFinder(RecipeMatcher finder) { + + } + + @Override + public void clearCraftingSlots() { + + } + + @Override + public boolean matches(RecipeEntry> recipe) { + return false; + } + + @Override + public int getCraftingResultSlotIndex() { + return 0; + } + + @Override + public int getCraftingWidth() { + return 0; + } + + @Override + public int getCraftingHeight() { + return 0; + } + + @Override + public int getCraftingSlotCount() { + return 0; + } + + @Override + public RecipeBookCategory getCategory() { + return RecipeBookCategory.CRAFTING; + } + + @Override + public boolean canInsertIntoSlot(int index) { + return false; + } + + @Override + public ItemStack quickMove(PlayerEntity player, int slot) { + return ItemStack.EMPTY; + } + + @Override + public boolean canUse(PlayerEntity player) { + return false; + } + } +} diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button.png new file mode 100644 index 00000000..7a6e3162 Binary files /dev/null and b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button.png differ diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_disabled.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_disabled.png new file mode 100644 index 00000000..02a22b4f Binary files /dev/null and b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_disabled.png differ diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_highlighted.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_highlighted.png new file mode 100644 index 00000000..be41b321 Binary files /dev/null and b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/more_button_highlighted.png differ diff --git a/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/quick_craft_overlay.png b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/quick_craft_overlay.png new file mode 100644 index 00000000..d8cf0c2b Binary files /dev/null and b/src/main/resources/assets/skyblocker/textures/gui/sprites/quick_craft/quick_craft_overlay.png differ -- cgit From 411c196e55db4ef90c48bfd3355ec508884582e0 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Sun, 17 Mar 2024 13:15:28 +0100 Subject: yeet the string and rename stuff --- .../mixin/HandledScreenProviderMixin.java | 8 +-- .../item/SkyblockCraftingTableHandler.java | 68 ---------------------- .../skyblock/item/SkyblockCraftingTableScreen.java | 19 ++---- .../item/SkyblockCraftingTableScreenHandler.java | 68 ++++++++++++++++++++++ 4 files changed, 77 insertions(+), 86 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java index 35618798..08a9ee6f 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java @@ -3,7 +3,7 @@ package de.hysky.skyblocker.mixin; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; -import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableHandler; +import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableScreenHandler; import de.hysky.skyblocker.skyblock.item.SkyblockCraftingTableScreen; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; @@ -46,9 +46,9 @@ public interface HandledScreenProviderMixin { ci.cancel(); } else if (Utils.isOnSkyblock() && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { - SkyblockCraftingTableHandler skyblockCraftingTableHandler = new SkyblockCraftingTableHandler(containerScreenHandler, player.getInventory()); - client.player.currentScreenHandler = skyblockCraftingTableHandler; - client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableHandler, player.getInventory(), Text.literal("Craft Item"))); + SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); + client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; + client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); ci.cancel(); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java deleted file mode 100644 index 0c2fb224..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -package de.hysky.skyblocker.skyblock.item; - -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; - -import java.util.Arrays; - -public class SkyblockCraftingTableHandler extends GenericContainerScreenHandler { - - private static final int[] normalSlots = new int[]{ - 10, 11, 12, 16, - 19, 20, 21, 23, 25, - 28, 29, 30, 34 - }; - public SkyblockCraftingTableHandler(ScreenHandlerType type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) { - super(type, syncId, playerInventory, inventory, rows); - for (int i = 0; i < rows*9; i++) { - Slot originalSlot = slots.get(i); - if (Arrays.binarySearch(normalSlots, i) >= 0) { - int[] coords = getCoords(i); - Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), coords[0], coords[1]); - slot.id = i; - slots.set(i, slot); - } else { - DisabledSlot slot = new DisabledSlot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y); - slot.id = i; - slots.set(i, slot); - } - } - int yOffset = (rows - 4) * 18 + 19; - for (int i = rows*9; i < slots.size(); i++) { - Slot originalSlot = slots.get(i); - Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y - yOffset); - slot.id = i; - slots.set(i, slot); - } - } - - public SkyblockCraftingTableHandler(GenericContainerScreenHandler handler, PlayerInventory playerInventory) { - this(handler.getType(), handler.syncId, playerInventory, handler.getInventory(), handler.getRows()); - } - - private int[] getCoords(int slot) { - if (slot == 23) return new int[]{124, 35}; - if (slot == 16 || slot == 25 || slot == 34) { - int y = (slot/9 - 1) * 18 + 8; - return new int[]{174, y}; - } - int gridX = slot%9 - 1; - int gridY = slot/9 - 1; - return new int[]{30 + gridX*18, 17+gridY*18}; - } - - public static class DisabledSlot extends Slot { - - public DisabledSlot(Inventory inventory, int index, int x, int y) { - super(inventory, index, x, y); - } - - @Override - public boolean isEnabled() { - return false; - } - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java index 2dbf1868..13c04e8b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java @@ -8,7 +8,6 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.TexturedButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.SimpleInventory; @@ -24,9 +23,8 @@ import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; import net.minecraft.util.Identifier; -import net.minecraft.util.math.RotationAxis; -public class SkyblockCraftingTableScreen extends HandledScreen { +public class SkyblockCraftingTableScreen extends HandledScreen { private static final Identifier TEXTURE = new Identifier("textures/gui/container/crafting_table.png"); protected static final ButtonTextures MORE_CRAFTS_TEXTURES = new ButtonTextures( new Identifier(SkyblockerMod.NAMESPACE, "quick_craft/more_button"), @@ -38,7 +36,7 @@ public class SkyblockCraftingTableScreen extends HandledScreen { this.recipeBook.toggleOpen(); @@ -88,13 +86,6 @@ public class SkyblockCraftingTableScreen extends HandledScreen { + static class DummyRecipeScreenHandler extends AbstractRecipeScreenHandler { - public Dummy() { + public DummyRecipeScreenHandler() { super(ScreenHandlerType.GENERIC_9X6, -69); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java new file mode 100644 index 00000000..1d66c661 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java @@ -0,0 +1,68 @@ +package de.hysky.skyblocker.skyblock.item; + +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; + +import java.util.Arrays; + +public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHandler { + + private static final int[] normalSlots = new int[]{ + 10, 11, 12, 16, + 19, 20, 21, 23, 25, + 28, 29, 30, 34 + }; + public SkyblockCraftingTableScreenHandler(ScreenHandlerType type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) { + super(type, syncId, playerInventory, inventory, rows); + for (int i = 0; i < rows*9; i++) { + Slot originalSlot = slots.get(i); + if (Arrays.binarySearch(normalSlots, i) >= 0) { + int[] coords = getCoords(i); + Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), coords[0], coords[1]); + slot.id = i; + slots.set(i, slot); + } else { + DisabledSlot slot = new DisabledSlot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y); + slot.id = i; + slots.set(i, slot); + } + } + int yOffset = (rows - 4) * 18 + 19; + for (int i = rows*9; i < slots.size(); i++) { + Slot originalSlot = slots.get(i); + Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y - yOffset); + slot.id = i; + slots.set(i, slot); + } + } + + public SkyblockCraftingTableScreenHandler(GenericContainerScreenHandler handler, PlayerInventory playerInventory) { + this(handler.getType(), handler.syncId, playerInventory, handler.getInventory(), handler.getRows()); + } + + private int[] getCoords(int slot) { + if (slot == 23) return new int[]{124, 35}; + if (slot == 16 || slot == 25 || slot == 34) { + int y = (slot/9 - 1) * 18 + 8; + return new int[]{174, y}; + } + int gridX = slot%9 - 1; + int gridY = slot/9 - 1; + return new int[]{30 + gridX*18, 17+gridY*18}; + } + + public static class DisabledSlot extends Slot { + + public DisabledSlot(Inventory inventory, int index, int x, int y) { + super(inventory, index, x, y); + } + + @Override + public boolean isEnabled() { + return false; + } + } +} -- cgit From 1efc40508a99accee0ec3f5cb3e8492a7b61d20c Mon Sep 17 00:00:00 2001 From: vicisacat Date: Tue, 19 Mar 2024 08:45:49 +0100 Subject: reformat whole file to the rescue! --- .../skyblock/item/SkyblockCraftingTableScreen.java | 6 +++--- .../skyblock/item/SkyblockCraftingTableScreenHandler.java | 13 +++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java index 13c04e8b..95cbbf4a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java @@ -51,7 +51,7 @@ public class SkyblockCraftingTableScreen extends HandledScreen this.onMouseClick(handler.slots.get(26), handler.slots.get(26).id, 0, SlotActionType.PICKUP)); @@ -100,7 +100,7 @@ public class SkyblockCraftingTableScreen extends HandledScreen= (double)(left + this.backgroundWidth) || mouseY >= (double)(top + this.backgroundHeight); + boolean bl = mouseX < (double) left || mouseY < (double) top || mouseX >= (double) (left + this.backgroundWidth) || mouseY >= (double) (top + this.backgroundHeight); return this.recipeBook.isClickOutsideBounds(mouseX, mouseY, this.x, this.y, this.backgroundWidth, this.backgroundHeight, button) && bl; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java index 1d66c661..04974ade 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreenHandler.java @@ -15,9 +15,10 @@ public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHa 19, 20, 21, 23, 25, 28, 29, 30, 34 }; + public SkyblockCraftingTableScreenHandler(ScreenHandlerType type, int syncId, PlayerInventory playerInventory, Inventory inventory, int rows) { super(type, syncId, playerInventory, inventory, rows); - for (int i = 0; i < rows*9; i++) { + for (int i = 0; i < rows * 9; i++) { Slot originalSlot = slots.get(i); if (Arrays.binarySearch(normalSlots, i) >= 0) { int[] coords = getCoords(i); @@ -31,7 +32,7 @@ public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHa } } int yOffset = (rows - 4) * 18 + 19; - for (int i = rows*9; i < slots.size(); i++) { + for (int i = rows * 9; i < slots.size(); i++) { Slot originalSlot = slots.get(i); Slot slot = new Slot(originalSlot.inventory, originalSlot.getIndex(), originalSlot.x, originalSlot.y - yOffset); slot.id = i; @@ -46,12 +47,12 @@ public class SkyblockCraftingTableScreenHandler extends GenericContainerScreenHa private int[] getCoords(int slot) { if (slot == 23) return new int[]{124, 35}; if (slot == 16 || slot == 25 || slot == 34) { - int y = (slot/9 - 1) * 18 + 8; + int y = (slot / 9 - 1) * 18 + 8; return new int[]{174, y}; } - int gridX = slot%9 - 1; - int gridY = slot/9 - 1; - return new int[]{30 + gridX*18, 17+gridY*18}; + int gridX = slot % 9 - 1; + int gridY = slot / 9 - 1; + return new int[]{30 + gridX * 18, 17 + gridY * 18}; } public static class DisabledSlot extends Slot { -- cgit From a0590e547cc9b033f1858afa6ca6d9d4c9e820b4 Mon Sep 17 00:00:00 2001 From: vicisacat Date: Tue, 2 Apr 2024 17:59:08 +0200 Subject: config --- src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java | 3 +++ .../de/hysky/skyblocker/config/categories/GeneralCategory.java | 7 +++++++ .../java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java | 6 +++--- src/main/resources/assets/skyblocker/lang/en_us.json | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 29678683..e696ef4f 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -159,6 +159,9 @@ public class SkyblockerConfig { @SerialEntry public boolean betterPartyFinder = true; + @SerialEntry + public boolean fancyCraftingUi = true; + @SerialEntry public boolean backpackPreviewWithoutShift = false; diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index fe73a6a7..bd35c00c 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -55,6 +55,13 @@ public class GeneralCategory { newValue -> config.general.compactorDeletorPreview = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.fancyCraftingUi")) + .binding(defaults.general.fancyCraftingUi, + () -> config.general.fancyCraftingUi, + newValue -> config.general.fancyCraftingUi = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.hideEmptyTooltips")) .binding(defaults.general.hideEmptyTooltips, diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java index 08a9ee6f..385b3950 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java @@ -22,11 +22,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public interface HandledScreenProviderMixin { @Inject(method = "open", at = @At("HEAD"), cancellable = true) default void skyblocker$open(Text name, ScreenHandlerType type, MinecraftClient client, int id, CallbackInfo ci) { - if (!SkyblockerConfigManager.get().general.betterPartyFinder) return; ClientPlayerEntity player = client.player; if (player == null) return; + if (!Utils.isOnSkyblock()) return; T screenHandler = type.create(id, player.getInventory()); - if (screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && PartyFinderScreen.possibleInventoryNames.contains(name.getString().toLowerCase())) { + if (SkyblockerConfigManager.get().general.betterPartyFinder && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && PartyFinderScreen.possibleInventoryNames.contains(name.getString().toLowerCase())) { if (client.currentScreen != null) { String lowerCase = client.currentScreen.getTitle().getString().toLowerCase(); if (lowerCase.contains("group builder")) return; @@ -45,7 +45,7 @@ public interface HandledScreenProviderMixin { } ci.cancel(); - } else if (Utils.isOnSkyblock() && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { + } else if (SkyblockerConfigManager.get().general.fancyCraftingUi && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index dd44b8fe..878b3652 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -154,6 +154,7 @@ "text.autoconfig.skyblocker.option.general.searchOverlay.enableCommands.@Tooltip": "Opens the bazaar search with \"/bzs\" and auction house with \"/ahs\". A re-log is required for this setting to be updated.", "text.autoconfig.skyblocker.option.general.searchOverlay.historyLabel": "History:", "text.autoconfig.skyblocker.option.general.betterPartyFinder": "Better Party Finder", + "text.autoconfig.skyblocker.option.general.fancyCraftingUi": "Fancy Crafting UI", "skyblocker.itemTooltip.nullMessage": "§cItem price information on tooltip will renew in max 60 seconds. If not, check latest.log", "skyblocker.itemTooltip.noData": "§cNo Data", -- cgit From 771f02b8d90181a298b84d6d64afcb8785fd7d0d Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 3 Apr 2024 16:51:00 -0400 Subject: Refactor Fancy Crafting Table --- .../java/de/hysky/skyblocker/config/SkyblockerConfig.java | 2 +- .../skyblocker/config/categories/GeneralCategory.java | 14 +++++++------- .../skyblocker/mixin/HandledScreenProviderMixin.java | 2 +- .../skyblock/item/SkyblockCraftingTableScreen.java | 15 +++++---------- src/main/resources/assets/skyblocker/lang/en_us.json | 2 +- 5 files changed, 15 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index e696ef4f..644e97f2 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -160,7 +160,7 @@ public class SkyblockerConfig { public boolean betterPartyFinder = true; @SerialEntry - public boolean fancyCraftingUi = true; + public boolean fancyCraftingTable = true; @SerialEntry public boolean backpackPreviewWithoutShift = false; diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index bd35c00c..adcb27a1 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -41,6 +41,13 @@ public class GeneralCategory { newValue -> config.general.betterPartyFinder = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.fancyCraftingTable")) + .binding(defaults.general.fancyCraftingTable, + () -> config.general.fancyCraftingTable, + newValue -> config.general.fancyCraftingTable = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift")) .binding(defaults.general.backpackPreviewWithoutShift, @@ -55,13 +62,6 @@ public class GeneralCategory { newValue -> config.general.compactorDeletorPreview = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.fancyCraftingUi")) - .binding(defaults.general.fancyCraftingUi, - () -> config.general.fancyCraftingUi, - newValue -> config.general.fancyCraftingUi = newValue) - .controller(ConfigUtils::createBooleanController) - .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.hideEmptyTooltips")) .binding(defaults.general.hideEmptyTooltips, diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java index 385b3950..975c9c51 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenProviderMixin.java @@ -45,7 +45,7 @@ public interface HandledScreenProviderMixin { } ci.cancel(); - } else if (SkyblockerConfigManager.get().general.fancyCraftingUi && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { + } else if (SkyblockerConfigManager.get().general.fancyCraftingTable && screenHandler instanceof GenericContainerScreenHandler containerScreenHandler && name.getString().toLowerCase().contains("craft item")) { SkyblockCraftingTableScreenHandler skyblockCraftingTableScreenHandler = new SkyblockCraftingTableScreenHandler(containerScreenHandler, player.getInventory()); client.player.currentScreenHandler = skyblockCraftingTableScreenHandler; client.setScreen(new SkyblockCraftingTableScreen(skyblockCraftingTableScreenHandler, player.getInventory(), Text.literal("Craft Item"))); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java index 95cbbf4a..14ddb238 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockCraftingTableScreen.java @@ -29,7 +29,8 @@ public class SkyblockCraftingTableScreen extends HandledScreen this.onMouseClick(handler.slots.get(26), handler.slots.get(26).id, 0, SlotActionType.PICKUP)); moreCraftsButton.setTooltipDelay(250); - moreCraftsButton.setTooltip(Tooltip.of(Text.literal("More crafts"))); + moreCraftsButton.setTooltip(Tooltip.of(Text.literal("More Crafts"))); this.addDrawableChild(moreCraftsButton); assert (client != null ? client.player : null) != null; client.player.currentScreenHandler = handler; // recipe book replaces it with the Dummy one fucking DUMBASS @@ -130,8 +131,6 @@ public class SkyblockCraftingTableScreen extends HandledScreen> recipe) { diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 878b3652..9ed5e4d0 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -154,7 +154,7 @@ "text.autoconfig.skyblocker.option.general.searchOverlay.enableCommands.@Tooltip": "Opens the bazaar search with \"/bzs\" and auction house with \"/ahs\". A re-log is required for this setting to be updated.", "text.autoconfig.skyblocker.option.general.searchOverlay.historyLabel": "History:", "text.autoconfig.skyblocker.option.general.betterPartyFinder": "Better Party Finder", - "text.autoconfig.skyblocker.option.general.fancyCraftingUi": "Fancy Crafting UI", + "text.autoconfig.skyblocker.option.general.fancyCraftingTable": "Fancy Crafting Table UI", "skyblocker.itemTooltip.nullMessage": "§cItem price information on tooltip will renew in max 60 seconds. If not, check latest.log", "skyblocker.itemTooltip.noData": "§cNo Data", -- cgit