diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/CraftingMenuExtension.java b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/CraftingMenuExtension.java index 6bdd45e8..5b6d7ff7 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/CraftingMenuExtension.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/CraftingMenuExtension.java @@ -2,4 +2,5 @@ public interface CraftingMenuExtension { VirtualPlayerInventory lt$getVirtualPlayerInventory(); + VirtualCraftingInventory lt$getVirtualCraftingInventory(); } diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/VirtualCraftingInventory.java b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/VirtualCraftingInventory.java new file mode 100644 index 00000000..eebe473a --- /dev/null +++ b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/extention/VirtualCraftingInventory.java @@ -0,0 +1,33 @@ +package xyz.violaflower.legacy_tweaks.client.gui.extention; + +import net.minecraft.world.inventory.Slot; +import org.jetbrains.annotations.NotNull; + +import java.util.Iterator; + +public interface VirtualCraftingInventory extends Iterable { + int getWidth(); + int getHeight(); + default int getSize() { return getWidth()*getHeight(); } + Slot getCraftingSlot(int num); + // 0-indexed + default Slot getCraftingSlot(int x, int y) { return getCraftingSlot(x+y*getWidth()); } + Slot getResultSlot(); + + @Override + default @NotNull Iterator iterator() { + return new Iterator<>() { + int i = 0; + + @Override + public boolean hasNext() { + return i < getSize(); + } + + @Override + public Slot next() { + return getCraftingSlot(i++); + } + }; + } +} diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/screen/legacy/screens/inventory/crafting/LegacyQuickCraftingScreen.java b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/screen/legacy/screens/inventory/crafting/LegacyQuickCraftingScreen.java index b0390c72..8bfe9e5c 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/screen/legacy/screens/inventory/crafting/LegacyQuickCraftingScreen.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/client/gui/screen/legacy/screens/inventory/crafting/LegacyQuickCraftingScreen.java @@ -8,6 +8,7 @@ import net.minecraft.world.inventory.Slot; import xyz.violaflower.legacy_tweaks.client.gui.extention.CraftingMenuExtension; import xyz.violaflower.legacy_tweaks.client.gui.extention.SlotExtension; +import xyz.violaflower.legacy_tweaks.client.gui.extention.VirtualCraftingInventory; import xyz.violaflower.legacy_tweaks.client.gui.screen.legacy.screens.inventory.LegacyAbstractContainerScreen; import xyz.violaflower.legacy_tweaks.util.client.screen.graphics.GraphicsUtil; import xyz.violaflower.legacy_tweaks.util.common.assets.Sprites; @@ -44,6 +45,26 @@ private static T arr(T } menu.lt$getVirtualPlayerInventory().iterateSlots().forEach(f -> ((SlotExtension)f).lt$setSize(14 + 1 / 3f)); }//554 534 + int craXo = 0; + int craYo = 0; + VirtualCraftingInventory slots = menu.lt$getVirtualCraftingInventory(); + int width1 = slots.getWidth(); + for (Slot slot : slots) { + //58,386 + if (!(slot instanceof SlotExtension extension)) continue; + extension.lt$setVisualX(59/3f+craXo*70f/3); + extension.lt$setVisualY(387/3f+craYo*70f/3); + if (++craXo >= width1) { + craXo = 0; + craYo++; + } + extension.lt$setSize(21); + } + if (slots.getResultSlot() instanceof SlotExtension extension) { + extension.lt$setSize(97/3f);//381 437 + extension.lt$setVisualX(380/3f); + extension.lt$setVisualY(436/3f); + } return menu; } diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/CraftingMenuMixin.java b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/CraftingMenuMixin.java index a67b8663..cab9fe13 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/CraftingMenuMixin.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/CraftingMenuMixin.java @@ -4,26 +4,34 @@ import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import org.jetbrains.annotations.NotNull; +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 xyz.violaflower.legacy_tweaks.client.gui.extention.CraftingMenuExtension; +import xyz.violaflower.legacy_tweaks.client.gui.extention.VirtualCraftingInventory; import xyz.violaflower.legacy_tweaks.client.gui.extention.VirtualPlayerInventory; import java.util.Iterator; @Mixin(CraftingMenu.class) public abstract class CraftingMenuMixin extends RecipeBookMenu implements CraftingMenuExtension { + @Shadow @Final private static int CRAFT_SLOT_START; + + @Shadow @Final public static int RESULT_SLOT; + public CraftingMenuMixin(MenuType menuType, int containerId) { super(menuType, containerId); } + @Unique + private void assertSlot(int slot, int min, int max) { + if (slot >= min && slot < max) return; + throw new IllegalArgumentException(); + } @Override public VirtualPlayerInventory lt$getVirtualPlayerInventory() { return new VirtualPlayerInventory() { - private void assertSlot(int slot, int min, int max) { - if (slot >= min && slot < max) return; - throw new IllegalArgumentException(); - } @Override public Slot getSlot(int slot) { assertSlot(slot, 0, 36); @@ -107,4 +115,30 @@ public Slot next() { } }; } + + @Override + public VirtualCraftingInventory lt$getVirtualCraftingInventory() { + return new VirtualCraftingInventory() { + @Override + public int getWidth() { + return CraftingMenuMixin.this.getGridWidth(); + } + + @Override + public int getHeight() { + return CraftingMenuMixin.this.getGridHeight(); + } + + @Override + public Slot getCraftingSlot(int num) { + assertSlot(num, 0, getSize()); + return CraftingMenuMixin.this.getSlot(CRAFT_SLOT_START+num); + } + + @Override + public Slot getResultSlot() { + return CraftingMenuMixin.this.getSlot(RESULT_SLOT); + } + }; + } } diff --git a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/InventoryMenuMixin.java b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/InventoryMenuMixin.java index da639369..c8a67c6a 100644 --- a/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/InventoryMenuMixin.java +++ b/src/main/java/xyz/violaflower/legacy_tweaks/mixin/client/tweak/legacy_ui/screen/container/inventory_screen/InventoryMenuMixin.java @@ -7,26 +7,35 @@ import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.CraftingRecipe; import org.jetbrains.annotations.NotNull; +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 xyz.violaflower.legacy_tweaks.client.gui.extention.CraftingMenuExtension; +import xyz.violaflower.legacy_tweaks.client.gui.extention.VirtualCraftingInventory; import xyz.violaflower.legacy_tweaks.client.gui.extention.VirtualPlayerInventory; import java.util.Iterator; @Mixin(InventoryMenu.class) public abstract class InventoryMenuMixin extends RecipeBookMenu implements CraftingMenuExtension { + @Shadow @Final public static int CRAFT_SLOT_START; + + @Shadow @Final public static int RESULT_SLOT; + public InventoryMenuMixin(MenuType menuType, int containerId) { super(menuType, containerId); } + @Unique + private void assertSlot(int slot, int min, int max) { + if (slot >= min && slot < max) return; + throw new IllegalArgumentException(); + } + @Override public VirtualPlayerInventory lt$getVirtualPlayerInventory() { return new VirtualPlayerInventory() { - private void assertSlot(int slot, int min, int max) { - if (slot >= min && slot < max) return; - throw new IllegalArgumentException(); - } @Override public Slot getSlot(int slot) { assertSlot(slot, 0, 36); @@ -110,4 +119,30 @@ public Slot next() { } }; } + + @Override + public VirtualCraftingInventory lt$getVirtualCraftingInventory() { + return new VirtualCraftingInventory() { + @Override + public int getWidth() { + return InventoryMenuMixin.this.getGridWidth(); + } + + @Override + public int getHeight() { + return InventoryMenuMixin.this.getGridHeight(); + } + + @Override + public Slot getCraftingSlot(int num) { + assertSlot(num, 0, getSize()); + return InventoryMenuMixin.this.getSlot(CRAFT_SLOT_START+num); + } + + @Override + public Slot getResultSlot() { + return InventoryMenuMixin.this.getSlot(RESULT_SLOT); + } + }; + } }