From e50c4de34811d16d71f426bd22ed6cd8c8501933 Mon Sep 17 00:00:00 2001 From: jss2a98aj Date: Wed, 3 Nov 2021 05:13:32 -0400 Subject: [PATCH] WIP API for adding new slots Rendering needs reworked and shift-clicking needs some improvements. --- src/main/java/baubles/api/BaubleType.java | 6 +- src/main/java/baubles/api/IBauble.java | 2 +- .../api/expanded/BaubleExpandedSlots.java | 65 +++ .../baubles/api/expanded/IBaubleExpanded.java | 23 ++ .../baubles/client/gui/GuiPlayerExpanded.java | 69 ++-- .../container/ContainerPlayerExpanded.java | 377 +++++------------- .../common/container/InventoryBaubles.java | 197 +++++---- .../baubles/common/container/SlotBauble.java | 88 +++- .../gui/expanded_inventory - Copy.png | Bin 12991 -> 0 bytes .../textures/gui/expanded_inventory.png | Bin 2361 -> 7696 bytes .../textures/gui/expanded_inventory_old.png | Bin 2898 -> 0 bytes 11 files changed, 393 insertions(+), 434 deletions(-) create mode 100644 src/main/java/baubles/api/expanded/BaubleExpandedSlots.java create mode 100644 src/main/java/baubles/api/expanded/IBaubleExpanded.java delete mode 100644 src/main/resources/assets/baubles/textures/gui/expanded_inventory - Copy.png delete mode 100644 src/main/resources/assets/baubles/textures/gui/expanded_inventory_old.png diff --git a/src/main/java/baubles/api/BaubleType.java b/src/main/java/baubles/api/BaubleType.java index e899cb4..22349ff 100644 --- a/src/main/java/baubles/api/BaubleType.java +++ b/src/main/java/baubles/api/BaubleType.java @@ -3,9 +3,5 @@ package baubles.api; public enum BaubleType { RING, AMULET, - BELT, - HEAD, - BODY, - CHARM, - GAUNTLET + BELT } diff --git a/src/main/java/baubles/api/IBauble.java b/src/main/java/baubles/api/IBauble.java index ccc3683..69885b8 100644 --- a/src/main/java/baubles/api/IBauble.java +++ b/src/main/java/baubles/api/IBauble.java @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; public interface IBauble { /** - * This method return the type of bauble this is. + * This method returns the type of bauble this is. * Type is used to determine the slots it can go into. */ public BaubleType getBaubleType(ItemStack itemstack); diff --git a/src/main/java/baubles/api/expanded/BaubleExpandedSlots.java b/src/main/java/baubles/api/expanded/BaubleExpandedSlots.java new file mode 100644 index 0000000..75970fb --- /dev/null +++ b/src/main/java/baubles/api/expanded/BaubleExpandedSlots.java @@ -0,0 +1,65 @@ +package baubles.api.expanded; + +public class BaubleExpandedSlots { + + public static final int slotLimit = 20; + + private static String[] slots = new String[slotLimit]; + private static int newSlotsRemaining = slotLimit; + + static { + requestAddSlot("AMULET"); + requestAddSlot("RING"); + requestAddSlot("RING"); + requestAddSlot("BELT"); + } + + public static boolean requestAddSlot(String type) { + //TODO: block after GUI init + if(newSlotsRemaining >= 1) { + slots[slotLimit - newSlotsRemaining] = type; + newSlotsRemaining--; + return true; + } + + return false; + } + + public static boolean requestRemoveSlot(String type) { + //TODO: block after GUI init + for(int slotToCheck = 0; slotToCheck < slotLimit; slotToCheck++) { + if(slots[slotToCheck].equals(type)) { + for(int slotToMove = slotToCheck + 1; slotToMove < slotLimit; slotToMove++) { + slots[slotToMove - 1] = slots[slotToMove]; + } + slots[slotLimit - 1] = null; + newSlotsRemaining++; + return true; + } + } + return false; + } + + public static int totalCurrentSlotsForType(String type) { + int total = 0; + for(int slotToCheck = 0; slotToCheck < slotLimit; slotToCheck++) { + if(slots[slotToCheck].equals(type)) { + total++; + } + } + return total; + } + + public static int getTotalSlots() { + return slotLimit - newSlotsRemaining; + } + + public static String getTypeInSlot(int slot) { + if (slot > 0 & slot < slotLimit) { + return slots[slot]; + } else { + return null; + } + } + +} diff --git a/src/main/java/baubles/api/expanded/IBaubleExpanded.java b/src/main/java/baubles/api/expanded/IBaubleExpanded.java new file mode 100644 index 0000000..0c330d3 --- /dev/null +++ b/src/main/java/baubles/api/expanded/IBaubleExpanded.java @@ -0,0 +1,23 @@ +package baubles.api.expanded; + +import baubles.api.IBauble; +import net.minecraft.item.ItemStack; + + +/** + * + * This interface should be extended by items that can be worn in bauble slots. + * Supports multiple original and expanded slot types. + * + * @author jss2a98aj + */ +public interface IBaubleExpanded extends IBauble { + + /** + * This method returns the types of bauble slots this item can go into. + * getBaubleType is ignored when using IBaubleExpanded. + * Original slots can be used by putting "AMULET" "RING" or BELT" in the array. + */ + public String[] getBaubleTypes (ItemStack itemstack); + +} diff --git a/src/main/java/baubles/client/gui/GuiPlayerExpanded.java b/src/main/java/baubles/client/gui/GuiPlayerExpanded.java index e4f462b..dba459f 100644 --- a/src/main/java/baubles/client/gui/GuiPlayerExpanded.java +++ b/src/main/java/baubles/client/gui/GuiPlayerExpanded.java @@ -20,10 +20,9 @@ import baubles.common.Baubles; import baubles.common.container.ContainerPlayerExpanded; public class GuiPlayerExpanded extends InventoryEffectRenderer { - - public static final ResourceLocation background = - new ResourceLocation("baubles","textures/gui/expanded_inventory.png"); - + + public static final ResourceLocation background = new ResourceLocation("baubles","textures/gui/expanded_inventory.png"); + /** * x size of the inventory window in pixels. Defined as float, passed as int */ @@ -33,8 +32,7 @@ public class GuiPlayerExpanded extends InventoryEffectRenderer { */ private float ySizeFloat; - public GuiPlayerExpanded(EntityPlayer player) - { + public GuiPlayerExpanded(EntityPlayer player) { super(new ContainerPlayerExpanded(player.inventory, !player.worldObj.isRemote, player)); this.allowUserInput = true; } @@ -43,69 +41,56 @@ public class GuiPlayerExpanded extends InventoryEffectRenderer { * Called from the main game loop to update the screen. */ @Override - public void updateScreen() - { + public void updateScreen() { try { - ((ContainerPlayerExpanded)inventorySlots).baubles.blockEvents=false; - } catch (Exception e) { } + ((ContainerPlayerExpanded)inventorySlots).baubles.blockEvents = false; + } catch (Exception e) {} } - - /** * Adds the buttons (and other controls) to the screen in question. */ @Override - public void initGui() - { + public void initGui() { this.buttonList.clear(); super.initGui(); - } /** * Draw the foreground layer for the GuiContainer (everything in front of the items) */ - @Override + /*@Override protected void drawGuiContainerForegroundLayer(int p_146979_1_, int p_146979_2_) { this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 104, 7, 4210752);//106 -> 104, 16 -> 7 - } + }*/ /** * Draws the screen and all the components in it. */ @Override - public void drawScreen(int par1, int par2, float par3) - { + public void drawScreen(int par1, int par2, float par3) { super.drawScreen(par1, par2, par3); this.xSizeFloat = (float)par1; this.ySizeFloat = (float)par2; } @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) - { + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.getTextureManager().bindTexture(background); - int k = this.guiLeft; - int l = this.guiTop; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(guiLeft, guiTop, 0, 0, this.xSize, this.ySize); - for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) - { + for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) { Slot slot = (Slot)this.inventorySlots.inventorySlots.get(i1); - if (slot.getHasStack() && slot.getSlotStackLimit()==1) - { - this.drawTexturedModalRect(k+slot.xDisplayPosition, l+slot.yDisplayPosition, 200, 0, 16, 16); + if (slot.getHasStack() && slot.getSlotStackLimit() == 1) { + this.drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, 200, 0, 16, 16); } } - - drawPlayerModel(k + 51, l + 75, 30, (float)(k + 51) - this.xSizeFloat, (float)(l + 75 - 50) - this.ySizeFloat, this.mc.thePlayer); + drawPlayerModel(guiLeft + 51, guiTop + 75, 30, (float)(guiLeft + 51) - this.xSizeFloat, (float)(guiTop + 75 - 50) - this.ySizeFloat, this.mc.thePlayer); } - public static void drawPlayerModel(int x, int y, int scale, float yaw, float pitch, EntityLivingBase playerdrawn) - { + public static void drawPlayerModel(int x, int y, int scale, float yaw, float pitch, EntityLivingBase playerdrawn) { GL11.glEnable(GL11.GL_COLOR_MATERIAL); GL11.glPushMatrix(); GL11.glTranslatef((float)x, (float)y, 50.0F); @@ -142,28 +127,20 @@ public class GuiPlayerExpanded extends InventoryEffectRenderer { } @Override - protected void actionPerformed(GuiButton button) - { - if (button.id == 0) - { + protected void actionPerformed(GuiButton button) { + if (button.id == 0) { this.mc.displayGuiScreen(new GuiAchievements(this, this.mc.thePlayer.getStatFileWriter())); - } - - if (button.id == 1) - { + } else if (button.id == 1) { this.mc.displayGuiScreen(new GuiStats(this, this.mc.thePlayer.getStatFileWriter())); } } @Override protected void keyTyped(char par1, int par2) { - if (par2 == Baubles.proxy.keyHandler.key.getKeyCode()) - { + if (par2 == Baubles.proxy.keyHandler.key.getKeyCode()) { this.mc.thePlayer.closeScreen(); } else super.keyTyped(par1, par2); } - - - + } diff --git a/src/main/java/baubles/common/container/ContainerPlayerExpanded.java b/src/main/java/baubles/common/container/ContainerPlayerExpanded.java index c3e5913..7d81eb3 100644 --- a/src/main/java/baubles/common/container/ContainerPlayerExpanded.java +++ b/src/main/java/baubles/common/container/ContainerPlayerExpanded.java @@ -8,126 +8,72 @@ import net.minecraft.inventory.InventoryCraftResult; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.Slot; import net.minecraft.inventory.SlotCrafting; +import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import baubles.api.BaubleType; import baubles.api.IBauble; +import baubles.api.expanded.BaubleExpandedSlots; import baubles.common.lib.PlayerHandler; -public class ContainerPlayerExpanded extends Container -{ - /** - * The crafting matrix inventory. - */ - public InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2); +public class ContainerPlayerExpanded extends Container { public IInventory craftResult = new InventoryCraftResult(); public InventoryBaubles baubles; - /** - * Determines if inventory manipulation should be handled. - */ - public boolean isLocalWorld; + private final EntityPlayer thePlayer; - public ContainerPlayerExpanded(InventoryPlayer playerInv, boolean par2, EntityPlayer player) - { - this.isLocalWorld = par2; + public ContainerPlayerExpanded(InventoryPlayer playerInv, boolean par2, EntityPlayer player) { this.thePlayer = player; baubles = new InventoryBaubles(player); baubles.setEventHandler(this); if (!player.worldObj.isRemote) { baubles.stackList = PlayerHandler.getPlayerBaubles(player).stackList; } - - this.addSlotToContainer(new SlotCrafting(playerInv.player, this.craftMatrix, this.craftResult, 0, 144, 27));//36 -> 27 + int i; int j; - for (i = 0; i < 2; ++i) - { - for (j = 0; j < 2; ++j) - { - this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 2, 106 + j * 18, 17 + i * 18));//26 -> 17 - } - } - - for (i = 0; i < 4; ++i) - { + //armor + for (i = 0; i < 4; ++i) { final int k = i; - this.addSlotToContainer(new Slot(playerInv, playerInv.getSizeInventory() - 1 - i, 8, 8 + i * 18) - { + this.addSlotToContainer(new Slot(playerInv, playerInv.getSizeInventory() - 1 - i, 8, 8 + i * 18) { @Override public int getSlotStackLimit() { return 1; } @Override - public boolean isItemValid(ItemStack par1ItemStack) - { - if (par1ItemStack == null) return false; - return par1ItemStack.getItem().isValidArmor(par1ItemStack, k, thePlayer); + public boolean isItemValid(ItemStack itemStack) { + if (itemStack == null) return false; + return itemStack.getItem().isValidArmor(itemStack, k, thePlayer); } }); } - - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.AMULET, 0, 80, 8)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.RING,1, 80, 8 + 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.RING,2, 80, 8 + 2 * 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.BELT,3, 80, 8 + 3 * 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.HEAD,4, 80 + 18, 8 + 3 * 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.BODY,5, 80 + 18 * 2, 8 + 3 * 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.CHARM,6, 80 + 18 * 3, 8 + 3 * 18)); - this.addSlotToContainer(new SlotBauble(baubles,BaubleType.GAUNTLET,7, 80 + 18 * 4, 8 + 3 * 18)); - for (i = 0; i < 3; ++i) - { - for (j = 0; j < 9; ++j) - { - this.addSlotToContainer(new Slot(playerInv, j + (i + 1) * 9, 8 + j * 18, 84 + i * 18)); + final int slotOffset = 18; + final int slotStartX = 80; + final int slotStartY = 8; + final int baubleSlots = BaubleExpandedSlots.getTotalSlots(); + + //bauble slots + for(i = 0; i < baubleSlots; i++) { + addSlotToContainer(new SlotBauble(baubles, BaubleExpandedSlots.getTypeInSlot(i), i, slotStartX + (slotOffset * (i / 4)), slotStartY + (slotOffset * (i % 4)))); + } + + //inventory slots + for (i = 0; i < 3; ++i) { + for (j = 0; j < 9; ++j) { + addSlotToContainer(new Slot(playerInv, j + (i + 1) * 9, slotStartY + j * slotOffset, 84 + i * 18)); } } - for (i = 0; i < 9; ++i) - { - this.addSlotToContainer(new Slot(playerInv, i, 8 + i * 18, 142)); + //hotbar slots + for (i = 0; i < 9; ++i) { + addSlotToContainer(new Slot(playerInv, i, slotStartY + i * slotOffset, 142)); } - - this.onCraftMatrixChanged(this.craftMatrix); } - /** - * Callback for when the crafting matrix is changed. - */ @Override - public void onCraftMatrixChanged(IInventory par1IInventory) - { - this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.thePlayer.worldObj)); - } - - /** - * Called when the container is closed. - */ - @Override - public void onContainerClosed(EntityPlayer player) - { - super.onContainerClosed(player); - for (int i = 0; i < 4; ++i) - { - ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i); - - if (itemstack != null) - { - player.dropPlayerItemWithRandomChoice(itemstack, false); - } - } - - this.craftResult.setInventorySlotContents(0, (ItemStack)null); - if (!player.worldObj.isRemote) { - PlayerHandler.setPlayerBaubles(player, baubles); - } - } - - @Override - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { + public boolean canInteractWith(EntityPlayer player) { return true; } @@ -135,171 +81,82 @@ public class ContainerPlayerExpanded extends Container * Called when a player shift-clicks on a slot. You must override this or you will crash when someone does that. */ @Override - public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer player, int slotIndex) { ItemStack itemstack = null; - Slot slot = (Slot)this.inventorySlots.get(par2); + Slot slot = (Slot)inventorySlots.get(slotIndex); + final int baubleSlots = BaubleExpandedSlots.getTotalSlots(); - if (slot != null && slot.getHasStack()) - { + if (slot != null && slot.getHasStack()) { ItemStack itemstack1 = slot.getStack(); itemstack = itemstack1.copy(); - - if (par2 == 0) - { - if (!this.mergeItemStack(itemstack1, 9+4, 45+4, true)) - { + Item item = itemstack.getItem(); + + if (slotIndex >= 5 && slotIndex < 4) { + if (!this.mergeItemStack(itemstack1, 4 + baubleSlots, 40 + baubleSlots, false)) { return null; } - - slot.onSlotChange(itemstack1, itemstack); - } - else if (par2 >= 1 && par2 < 5) - { - if (!this.mergeItemStack(itemstack1, 9+4, 45+4, false)) - { + } else if (item instanceof ItemArmor && !((Slot)inventorySlots.get(((ItemArmor)item).armorType)).getHasStack()) { + int j = ((ItemArmor)item).armorType; + if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } - } - else if (par2 >= 5 && par2 < 9) + //TODO: rewrite bauble shift clicking + } else if (item instanceof IBauble && + ((IBauble)item).getBaubleType(itemstack)==BaubleType.AMULET && + ((IBauble)item).canEquip(itemstack, thePlayer) && + !((Slot)this.inventorySlots.get(4)).getHasStack()) { - if (!this.mergeItemStack(itemstack1, 9+4, 45+4, false)) - { + int j = 4; + if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } - } - else if (itemstack.getItem() instanceof ItemArmor && - !((Slot)this.inventorySlots.get(5 + ((ItemArmor)itemstack.getItem()).armorType)).getHasStack()) - { - int j = 5 + ((ItemArmor)itemstack.getItem()).armorType; - - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { + } else if (slotIndex>11 && item instanceof IBauble && + ((IBauble)item).getBaubleType(itemstack)==BaubleType.RING && + ((IBauble)item).canEquip(itemstack, thePlayer) && + !((Slot)this.inventorySlots.get(5)).getHasStack()) { + int j = 5; + if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.AMULET && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(9)).getHasStack()) - { - int j = 9; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { + } else if (slotIndex>11 && item instanceof IBauble && + ((IBauble)item).getBaubleType(itemstack)==BaubleType.RING && + ((IBauble)item).canEquip(itemstack, thePlayer) && + !((Slot)this.inventorySlots.get(6)).getHasStack()) { + int j = 6; + if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } - } - else if (par2>11 && itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.RING && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(10)).getHasStack()) - { - int j = 10; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { + } else if (item instanceof IBauble && + ((IBauble)item).getBaubleType(itemstack)==BaubleType.BELT && + ((IBauble)item).canEquip(itemstack, thePlayer) && + !((Slot)this.inventorySlots.get(7)).getHasStack()) { + int j = 7; + if (!this.mergeItemStack(itemstack1, j, j + 1, false)) { return null; } - } - else if (par2>11 && itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.RING && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(11)).getHasStack()) - { - int j = 11; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { + } else if (slotIndex >= 4 + baubleSlots && slotIndex < 31 + baubleSlots) { + if (!this.mergeItemStack(itemstack1, 31 + baubleSlots, 40 + baubleSlots, false)) { return null; } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.BELT && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(12)).getHasStack()) - { - int j = 12; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { + } else if (slotIndex >= 31 + baubleSlots && slotIndex < 40 + baubleSlots) { + if (!this.mergeItemStack(itemstack1, 4 + baubleSlots, 31 + baubleSlots, false)) { return null; } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.HEAD && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(13)).getHasStack()) - { - int j = 13; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { - return null; - } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.BODY && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(14)).getHasStack()) - { - int j = 14; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { - return null; - } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.CHARM && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(15)).getHasStack()) - { - int j = 15; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { - return null; - } - } - else if (itemstack.getItem() instanceof IBauble && - ((IBauble)itemstack.getItem()).getBaubleType(itemstack)==BaubleType.GAUNTLET && - ((IBauble)itemstack.getItem()).canEquip(itemstack, thePlayer) && - !((Slot)this.inventorySlots.get(16)).getHasStack()) - { - int j = 16; - if (!this.mergeItemStack(itemstack1, j, j + 1, false)) - { - return null; - } - } - else if (par2 >= 9+4 && par2 < 36+4) - { - if (!this.mergeItemStack(itemstack1, 36+4, 45+4, false)) - { - return null; - } - } - else if (par2 >= 36+4 && par2 < 45+4) - { - if (!this.mergeItemStack(itemstack1, 9+4, 36+4, false)) - { - return null; - } - } - else if (!this.mergeItemStack(itemstack1, 9+4, 45+4, false, slot)) - { + } else if (!this.mergeItemStack(itemstack1, 4 + baubleSlots, 40 + baubleSlots, false, slot)) { return null; } - if (itemstack1.stackSize == 0) - { + if (itemstack1.stackSize == 0) { slot.putStack((ItemStack)null); - } - else - { + } else { slot.onSlotChanged(); } - if (itemstack1.stackSize == itemstack.stackSize) - { + if (itemstack1.stackSize == itemstack.stackSize) { return null; } - slot.onPickupFromSlot(par1EntityPlayer, itemstack1); + slot.onPickupFromSlot(player, itemstack1); } return itemstack; @@ -310,102 +167,77 @@ public class ContainerPlayerExpanded extends Container // ((IBauble)stack.getItem()).onUnequipped(stack, thePlayer); // } } - - - + @Override public void putStacksInSlots(ItemStack[] p_75131_1_) { baubles.blockEvents=true; super.putStacksInSlots(p_75131_1_); } - - - - protected boolean mergeItemStack(ItemStack par1ItemStack, int par2, int par3, boolean par4, Slot ss) - { + protected boolean mergeItemStack(ItemStack itemStack, int par2, int par3, boolean par4, Slot ss) { boolean flag1 = false; int k = par2; - if (par4) - { + if (par4) { k = par3 - 1; } Slot slot; ItemStack itemstack1; - if (par1ItemStack.isStackable()) - { - while (par1ItemStack.stackSize > 0 && (!par4 && k < par3 || par4 && k >= par2)) - { + if (itemStack.isStackable()) { + while (itemStack.stackSize > 0 && (!par4 && k < par3 || par4 && k >= par2)) { slot = (Slot)this.inventorySlots.get(k); itemstack1 = slot.getStack(); - if (itemstack1 != null && itemstack1.getItem() == par1ItemStack.getItem() && (!par1ItemStack.getHasSubtypes() || par1ItemStack.getItemDamage() == itemstack1.getItemDamage()) && ItemStack.areItemStackTagsEqual(par1ItemStack, itemstack1)) - { - int l = itemstack1.stackSize + par1ItemStack.stackSize; - if (l <= par1ItemStack.getMaxStackSize()) - { - if (ss instanceof SlotBauble) unequipBauble(par1ItemStack); - par1ItemStack.stackSize = 0; + if (itemstack1 != null && itemstack1.getItem() == itemStack.getItem() && (!itemStack.getHasSubtypes() || itemStack.getItemDamage() == itemstack1.getItemDamage()) && ItemStack.areItemStackTagsEqual(itemStack, itemstack1)) { + int l = itemstack1.stackSize + itemStack.stackSize; + if (l <= itemStack.getMaxStackSize()) { + if (ss instanceof SlotBauble) unequipBauble(itemStack); + itemStack.stackSize = 0; itemstack1.stackSize = l; slot.onSlotChanged(); flag1 = true; - } - else if (itemstack1.stackSize < par1ItemStack.getMaxStackSize()) - { - if (ss instanceof SlotBauble) unequipBauble(par1ItemStack); - par1ItemStack.stackSize -= par1ItemStack.getMaxStackSize() - itemstack1.stackSize; - itemstack1.stackSize = par1ItemStack.getMaxStackSize(); + } else if (itemstack1.stackSize < itemStack.getMaxStackSize()) { + if (ss instanceof SlotBauble) unequipBauble(itemStack); + itemStack.stackSize -= itemStack.getMaxStackSize() - itemstack1.stackSize; + itemstack1.stackSize = itemStack.getMaxStackSize(); slot.onSlotChanged(); flag1 = true; } } - if (par4) - { + if (par4) { --k; - } - else - { + } else { ++k; } } } - if (par1ItemStack.stackSize > 0) - { - if (par4) - { + if (itemStack.stackSize > 0) { + if (par4) { k = par3 - 1; - } - else - { + } else { k = par2; } - while (!par4 && k < par3 || par4 && k >= par2) - { + while (!par4 && k < par3 || par4 && k >= par2) { slot = (Slot)this.inventorySlots.get(k); itemstack1 = slot.getStack(); - if (itemstack1 == null) - { - if (ss instanceof SlotBauble) unequipBauble(par1ItemStack); - slot.putStack(par1ItemStack.copy()); + if (itemstack1 == null) { + if (ss instanceof SlotBauble) unequipBauble(itemStack); + slot.putStack(itemStack.copy()); slot.onSlotChanged(); - par1ItemStack.stackSize = 0; + itemStack.stackSize = 0; flag1 = true; break; } - if (par4) - { + if (par4) { --k; - } - else - { + } else { ++k; } } @@ -414,11 +246,8 @@ public class ContainerPlayerExpanded extends Container } @Override - public boolean func_94530_a(ItemStack par1ItemStack, Slot par2Slot) - { - return par2Slot.inventory != this.craftResult && super.func_94530_a(par1ItemStack, par2Slot); + public boolean func_94530_a(ItemStack itemStack, Slot slot) { + return slot.inventory != this.craftResult && super.func_94530_a(itemStack, slot); } - - } diff --git a/src/main/java/baubles/common/container/InventoryBaubles.java b/src/main/java/baubles/common/container/InventoryBaubles.java index 1ce020e..bd2b12b 100644 --- a/src/main/java/baubles/common/container/InventoryBaubles.java +++ b/src/main/java/baubles/common/container/InventoryBaubles.java @@ -8,12 +8,15 @@ import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.MathHelper; import baubles.api.BaubleType; import baubles.api.IBauble; +import baubles.api.expanded.BaubleExpandedSlots; +import baubles.api.expanded.IBaubleExpanded; import baubles.common.Baubles; import baubles.common.network.PacketHandler; import baubles.common.network.PacketSyncBauble; @@ -25,7 +28,7 @@ public class InventoryBaubles implements IInventory { public boolean blockEvents=false; public InventoryBaubles(EntityPlayer player) { - this.stackList = new ItemStack[8]; + this.stackList = new ItemStack[BaubleExpandedSlots.slotLimit]; this.player = new WeakReference(player); } @@ -49,8 +52,8 @@ public class InventoryBaubles implements IInventory { * Returns the stack in slot i */ @Override - public ItemStack getStackInSlot(int par1) { - return par1 >= this.getSizeInventory() ? null : this.stackList[par1]; + public ItemStack getStackInSlot(int slot) { + return slot >= this.getSizeInventory() ? null : this.stackList[slot]; } /** @@ -75,10 +78,10 @@ public class InventoryBaubles implements IInventory { * GUI. */ @Override - public ItemStack getStackInSlotOnClosing(int par1) { - if (this.stackList[par1] != null) { - ItemStack itemstack = this.stackList[par1]; - this.stackList[par1] = null; + public ItemStack getStackInSlotOnClosing(int slot) { + if (this.stackList[slot] != null) { + ItemStack itemstack = this.stackList[slot]; + this.stackList[slot] = null; return itemstack; } else { return null; @@ -90,39 +93,37 @@ public class InventoryBaubles implements IInventory { * (second arg) of items and returns them in a new stack. */ @Override - public ItemStack decrStackSize(int par1, int par2) { - if (this.stackList[par1] != null) { + public ItemStack decrStackSize(int slot, int par2) { + if (this.stackList[slot] != null) { ItemStack itemstack; - if (this.stackList[par1].stackSize <= par2) { - itemstack = this.stackList[par1]; + if (this.stackList[slot].stackSize <= par2) { + itemstack = this.stackList[slot]; if (itemstack != null && itemstack.getItem() instanceof IBauble) { - ((IBauble) itemstack.getItem()).onUnequipped(itemstack, - player.get()); + ((IBauble) itemstack.getItem()).onUnequipped(itemstack, player.get()); } - this.stackList[par1] = null; + this.stackList[slot] = null; if (eventHandler != null) this.eventHandler.onCraftMatrixChanged(this); - syncSlotToClients(par1); + syncSlotToClients(slot); return itemstack; } else { - itemstack = this.stackList[par1].splitStack(par2); + itemstack = this.stackList[slot].splitStack(par2); if (itemstack != null && itemstack.getItem() instanceof IBauble) { - ((IBauble) itemstack.getItem()).onUnequipped(itemstack, - player.get()); + ((IBauble) itemstack.getItem()).onUnequipped(itemstack, player.get()); } - if (this.stackList[par1].stackSize == 0) { - this.stackList[par1] = null; + if (this.stackList[slot].stackSize == 0) { + this.stackList[slot] = null; } if (eventHandler != null) this.eventHandler.onCraftMatrixChanged(this); - syncSlotToClients(par1); + syncSlotToClients(slot); return itemstack; } } else { @@ -135,19 +136,20 @@ public class InventoryBaubles implements IInventory { * crafting or armor sections). */ @Override - public void setInventorySlotContents(int par1, ItemStack stack) { - - if(!blockEvents && this.stackList[par1] != null) { - ((IBauble)stackList[par1].getItem()).onUnequipped(stackList[par1], player.get()); + public void setInventorySlotContents(int slot, ItemStack stack) { + if(!blockEvents && this.stackList[slot] != null) { + ((IBauble)stackList[slot].getItem()).onUnequipped(stackList[slot], player.get()); } - this.stackList[par1] = stack; + this.stackList[slot] = stack; if (!blockEvents && stack != null && stack.getItem() instanceof IBauble) { - if (player.get()!=null) + if (player.get()!=null) { ((IBauble) stack.getItem()).onEquipped(stack, player.get()); + } } - if (eventHandler != null) + if (eventHandler != null) { this.eventHandler.onCraftMatrixChanged(this); - syncSlotToClients(par1); + } + syncSlotToClients(slot); } /** @@ -175,18 +177,16 @@ public class InventoryBaubles implements IInventory { * with Container */ @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) { + public boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override public void openInventory() { - } @Override public void closeInventory() { - } /** @@ -194,19 +194,45 @@ public class InventoryBaubles implements IInventory { * stack size) into the given slot. */ @Override - public boolean isItemValidForSlot(int i, ItemStack stack) { - if (stack == null || !(stack.getItem() instanceof IBauble) - || !((IBauble) stack.getItem()).canEquip(stack, player.get())) + public boolean isItemValidForSlot(int slot, ItemStack stack) { + String slotType = BaubleExpandedSlots.getTypeInSlot(slot); + if (stack == null || slotType == null) { return false; - if (i == 0 - && ((IBauble) stack.getItem()).getBaubleType(stack) == BaubleType.AMULET) - return true; - if ((i == 1 || i == 2) - && ((IBauble) stack.getItem()).getBaubleType(stack) == BaubleType.RING) - return true; - if (i == 3 - && ((IBauble) stack.getItem()).getBaubleType(stack) == BaubleType.BELT) - return true; + } + + Item item = stack.getItem(); + if(!(item instanceof IBauble) || !((IBauble) item).canEquip(stack, player.get())) { + return false; + } + + String[] types; + if(item instanceof IBaubleExpanded) { + types = ((IBaubleExpanded)item).getBaubleTypes(stack); + } else { + BaubleType legacyType = ((IBauble)item).getBaubleType(stack); + String type; + switch(legacyType) { + case RING: + type = "RING"; + break; + case AMULET: + type = "AMULET"; + break; + case BELT: + type = "BELT"; + break; + default: + type = "UNKNOWN"; + } + types = new String[] {type}; + } + + for(String type : types) { + if(type.equals(slotType)) { + return true; + } + } + return false; } @@ -218,11 +244,11 @@ public class InventoryBaubles implements IInventory { public void saveNBT(NBTTagCompound tags) { NBTTagList tagList = new NBTTagList(); NBTTagCompound invSlot; - for (int i = 0; i < this.stackList.length; ++i) { - if (this.stackList[i] != null) { + for (int slot = 0; slot < stackList.length; ++slot) { + if (this.stackList[slot] != null) { invSlot = new NBTTagCompound(); - invSlot.setByte("Slot", (byte) i); - this.stackList[i].writeToNBT(invSlot); + invSlot.setByte("Slot", (byte) slot); + this.stackList[slot].writeToNBT(invSlot); tagList.appendTag(invSlot); } } @@ -237,53 +263,50 @@ public class InventoryBaubles implements IInventory { public void readNBT(NBTTagCompound tags) { NBTTagList tagList = tags.getTagList("Baubles.Inventory", 10); for (int i = 0; i < tagList.tagCount(); ++i) { - NBTTagCompound nbttagcompound = (NBTTagCompound) tagList - .getCompoundTagAt(i); - int j = nbttagcompound.getByte("Slot") & 255; - ItemStack itemstack = ItemStack - .loadItemStackFromNBT(nbttagcompound); + NBTTagCompound nbttagcompound = (NBTTagCompound) tagList.getCompoundTagAt(i); + int slot = nbttagcompound.getByte("Slot") & 255; + ItemStack itemstack = ItemStack.loadItemStackFromNBT(nbttagcompound); if (itemstack != null) { - this.stackList[j] = itemstack; + this.stackList[slot] = itemstack; } } } public void dropItems(ArrayList drops) { - for (int i = 0; i < 4; ++i) { - if (this.stackList[i] != null) { - EntityItem ei = new EntityItem(player.get().worldObj, - player.get().posX, player.get().posY - + player.get().eyeHeight, player.get().posZ, - this.stackList[i].copy()); - ei.delayBeforeCanPickup = 40; + for (int slot = 0; slot < stackList.length; ++slot) { + if (this.stackList[slot] != null) { + EntityItem item = new EntityItem(player.get().worldObj, + player.get().posX, + player.get().posY + player.get().eyeHeight, player.get().posZ, + this.stackList[slot].copy()); + item.delayBeforeCanPickup = 40; float f1 = player.get().worldObj.rand.nextFloat() * 0.5F; - float f2 = player.get().worldObj.rand.nextFloat() - * (float) Math.PI * 2.0F; - ei.motionX = (double) (-MathHelper.sin(f2) * f1); - ei.motionZ = (double) (MathHelper.cos(f2) * f1); - ei.motionY = 0.20000000298023224D; - drops.add(ei); - this.stackList[i] = null; - syncSlotToClients(i); + float f2 = player.get().worldObj.rand.nextFloat() * (float) Math.PI * 2.0F; + item.motionX = (double) (-MathHelper.sin(f2) * f1); + item.motionZ = (double) (MathHelper.cos(f2) * f1); + item.motionY = 0.20000000298023224D; + drops.add(item); + this.stackList[slot] = null; + syncSlotToClients(slot); } } } - - public void dropItemsAt(ArrayList drops, Entity e) { - for (int i = 0; i < 4; ++i) { - if (this.stackList[i] != null) { - EntityItem ei = new EntityItem(e.worldObj, - e.posX, e.posY + e.getEyeHeight(), e.posZ, - this.stackList[i].copy()); - ei.delayBeforeCanPickup = 40; - float f1 = e.worldObj.rand.nextFloat() * 0.5F; - float f2 = e.worldObj.rand.nextFloat() * (float) Math.PI * 2.0F; - ei.motionX = (double) (-MathHelper.sin(f2) * f1); - ei.motionZ = (double) (MathHelper.cos(f2) * f1); - ei.motionY = 0.20000000298023224D; - drops.add(ei); - this.stackList[i] = null; - syncSlotToClients(i); + + public void dropItemsAt(ArrayList drops, Entity entity) { + for (int slot = 0; slot < stackList.length; ++slot) { + if (this.stackList[slot] != null) { + EntityItem item = new EntityItem(entity.worldObj, + entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ, + this.stackList[slot].copy()); + item.delayBeforeCanPickup = 40; + float f1 = entity.worldObj.rand.nextFloat() * 0.5F; + float f2 = entity.worldObj.rand.nextFloat() * (float) Math.PI * 2.0F; + item.motionX = (double) (-MathHelper.sin(f2) * f1); + item.motionZ = (double) (MathHelper.cos(f2) * f1); + item.motionY = 0.20000000298023224D; + drops.add(item); + this.stackList[slot] = null; + syncSlotToClients(slot); } } } @@ -291,11 +314,11 @@ public class InventoryBaubles implements IInventory { public void syncSlotToClients(int slot) { try { if (Baubles.proxy.getClientWorld() == null) { - PacketHandler.INSTANCE.sendToAll(new PacketSyncBauble(player - .get(), slot)); + PacketHandler.INSTANCE.sendToAll(new PacketSyncBauble(player.get(), slot)); } } catch (Exception e) { e.printStackTrace(); } } + } diff --git a/src/main/java/baubles/common/container/SlotBauble.java b/src/main/java/baubles/common/container/SlotBauble.java index 2896452..7af0b63 100644 --- a/src/main/java/baubles/common/container/SlotBauble.java +++ b/src/main/java/baubles/common/container/SlotBauble.java @@ -3,46 +3,92 @@ package baubles.common.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import baubles.api.BaubleType; import baubles.api.IBauble; +import baubles.api.expanded.IBaubleExpanded; -public class SlotBauble extends Slot -{ - - BaubleType type; +public class SlotBauble extends Slot { - public SlotBauble(IInventory par2IInventory, BaubleType type, int par3, int par4, int par5) - { - super(par2IInventory, par3, par4, par5); - this.type = type; + String slotType; + + @Deprecated + public SlotBauble(IInventory inventory, BaubleType legacyType, int slot, int x, int y) { + super(inventory, slot, x, y); + switch(legacyType) { + case RING: + slotType = "RING"; + break; + case AMULET: + slotType = "AMULET"; + break; + case BELT: + slotType = "BELT"; + break; + default: + slotType = "UNKNOWN"; + } } + public SlotBauble(IInventory inventory, String type, int slot, int x, int y) { + super(inventory, slot, x, y); + this.slotType = type; + } /** * Check if the stack is a valid item for this slot. Always true beside for the armor slots. */ @Override - public boolean isItemValid(ItemStack stack) - { - return stack!=null && stack.getItem() !=null && - stack.getItem() instanceof IBauble && - ((IBauble)stack.getItem()).getBaubleType(stack)==this.type && - ((IBauble)stack.getItem()).canEquip(stack, ((InventoryBaubles)this.inventory).player.get()); + public boolean isItemValid(ItemStack stack) { + if (stack == null || slotType == null) { + return false; + } + + Item item = stack.getItem(); + if(!(item instanceof IBauble) || !((IBauble) item).canEquip(stack, ((InventoryBaubles)inventory).player.get())) { + return false; + } + + String[] types; + if(item instanceof IBaubleExpanded) { + types = ((IBaubleExpanded)item).getBaubleTypes(stack); + } else { + BaubleType legacyType = ((IBauble)item).getBaubleType(stack); + String type; + switch(legacyType) { + case RING: + type = "RING"; + break; + case AMULET: + type = "AMULET"; + break; + case BELT: + type = "BELT"; + break; + default: + type = "UNKNOWN"; + } + types = new String[] {type}; + } + + for(String type : types) { + if(type.equals(slotType)) { + return true; + } + } + + return false; } - @Override public boolean canTakeStack(EntityPlayer player) { - return this.getStack()!=null && - ((IBauble)this.getStack().getItem()).canUnequip(this.getStack(), player); + return this.getStack()!=null && ((IBauble)this.getStack().getItem()).canUnequip(this.getStack(), player); } - @Override - public int getSlotStackLimit() - { + public int getSlotStackLimit() { return 1; } - + } diff --git a/src/main/resources/assets/baubles/textures/gui/expanded_inventory - Copy.png b/src/main/resources/assets/baubles/textures/gui/expanded_inventory - Copy.png deleted file mode 100644 index b6ce86260f2cb0b1259d45eb9395b75ec12b3e29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12991 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 diff --git a/src/main/resources/assets/baubles/textures/gui/expanded_inventory.png b/src/main/resources/assets/baubles/textures/gui/expanded_inventory.png index e3b0b43dd4ec957d61222ff45bc852d67b0c451a..a00dbd1963532739931e9958000be2ad18267b06 100644 GIT binary patch literal 7696 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≪B`N~AxB6P ze~%oX1nv*;J@9lf6h6M(RKL`{bv>-%rFdkc>nHO001b;6X|~yY1C6AIMilP_REpmh zKJI=^(a1ryE?0ZpYw+`OYOYUIya_x^jOq#gdS4@_eJ3m>}wh4(`O@FkCLJaaKI2IDE?yK;9;($ zZAK<}TV31r7FyP?9F91zRtsyS71p?)o6&y#g)D0Bx6LIiOmXNUP*_yNGH3ts z;AtHLzyZ{F-~>Mj{id@)PACrM-Pd<*ICfx70_c{s$dEZdFI;)!|aZOb_J*;1`b6t*gPU@$~aC-=KKwrKl^Ic*`*xS+oG5dmY6b z5KYtoEYk*WZkqL{MP|8xUA@5Y{nr8u?=o0)gUJw_iGg`ok;9c*+_^VG&WP8`V(oa}r@xOiUbkn&zar+3v?5-?sO4+z{n?w?^?2v{PrU>H8nLQD=Qk4l(&C4o}sPkO6zLw8)Ufl z=3(s5>G?%Xs51xjYDTk4O{@j68_4d0@n5LiRz1|!)!FaOmb~@2upkq3vk62)G{U9xT?- zvKw@gF(_tyr=f8<{z*?!o)fKwx^4#)352QSV zlXDRl78YhRp2kz-eSfuBYbuu^;w!9Psryo+Qa7wG1lu*~{;SOc@2HQ5NY>h=$0v@z z#HZpczb5XDuaePEMep_-u3rF*T40-%Mz)nEm;pCQlxCximTt2hbu`(#X`zz%tt_)7 z?^9)o*SK5`=3XM_&Vn}&u;7db1mLs%tEorrs_REjxNqlm;u~PQHS;$wku%tzx~obT z#JP|)uTL~01I;13z)r*h2>kCpLPBLxyE*Br!$r@pW5PvQ36u~50Kf)>Vz+tNIkD?o zwcr4=fp_ly z6~UAD`bWmn57aeK?s@aiVVsu{Fv@-@q!n`U@Tj#+JgcphqoEnC^$ky9mKS@;ojx8K zYSEyb$rZ^4Q2qN09IHB}UjJ`P+Eoq@uqx_2EKX~e08QN@Z~Z7iDt{?yi z&pzS@JiE|;i2pIP|AD}O-gCY<7h3j@p)BZKhEN91&!nlJ(St~C40;O literal 2361 zcmZWqX;f3^7CrYSWWWRhfsP>dxl5sM(mBVq!GiUi;)U>p;jEs!^`}a#E zlAN5J0|ySsWU}1c+`PQJf`Wp=!os4WqK=LZf*^E4-B2gg&2>W^Sx3{!<#M^sO2^a* zbu^trLPA1jX6EI~moW^hudhFU{=Ckd=>9?~l@j+k#LGlts#Ny|Vl?$XtNZ)=pVS%- zH5iqbmw(#T<3#j16AwM&;^GtvMRs;JLEH-o32AI>%*x7YuVCco=ifcf^ziTq4-X$a zZWk*Crq@<(}-Q1E`a%pKP(eJ9uNIYIsQBe^Y8A*&~#07!BzyC!! z{qdmn7G0!;DM10jy8gfCyLT5A0MvWy1Zza;+sD-Tg@5u`6meU7abavm{BPRr6E_C6 zZNF^&`FN7iwWr|)x0Qc2`N$h^n@e98S94JJf;S}te(wi!7M;KiKq=(ZHd$c7U$orF z{T7bDL8c)SyB&F}DnRDBR!sf}{59 z7CG?$D!jLpm)#wO=3vMnSt zeyu7ixg$Qz#WeEO-48>qOdt!T;P4g9`jO;fL~t@qZO>ec%S^E7xEcqn*}xR8aq6k! ze^0TokB(x}$}C3cmUx){W*1nd(rfP84*!9O##y({eLjRLGh;hr5O)8onIi^QfwLjk zPoEu0*rx&ShA?RpMt6t0Gc}^3Kva`t#ZRJQVISMVowie(*4xK+IAVAznEZyMi+wvC z@i{wo3+;_5tBMD?teiM$+9qDpuAVpaybzlDREN|tw{f4V0H*$VoC_aI$~+f``F2vC zx(bht(QdnU{(|;+QO3!kG&TLKNg5S%jvO|^O+*S5h?N`Gly>Ym9Q>9lcK6c#h@8lg0P%OqxBu%A+_G@a zutcGM!LZ?TMyJ;KNWkt^;j*uec5znbZ(DEM)V?`lgj=wa5NKRriHrA%Z2qb!c!V#{ z5GI>Bj|!3DGwWf@#_SNZ?rmPdXuYzK>##A}srNNwRSw+Rx;+Nb1P7u6zejT$%qvgo z^SjQZZj3PaYX#WD@+B5<3Ox0;!NBHe?3VxIabW%V>I(PH!YZ=kVXXo#{3JkXlJ5~l zM2#9{{TL4Dc|`0V1u?HtrMVKCo-S?F&*~nX>#265@CHe2#@5sNZ1TkMd_%U`wjZiS zpSUcWi^}l*vEWiO_j@>%{%sIwTA6r@JEqCMc{*nnQevD>0$HC9(wJWTGI~HFL=fQ7;D-ehPqwL7n0zCYu(!cl#ZE9t7rQVC7Zbd%&NP#sU(m5$7v~~^abWZ)<+2k;&Q#rv0o|d zkRHMb+Qy!)iEZaG^u%Yo#;=Fg_unni5=2t!B<%>8 zqYC8K(xlfgg3*{bkMZK!+j)$p_U^P{9hrMwM#VpMvxy)x$T2?crI%hZ3G_0cCw%*T zl2!w>WBP-eWRos_G$qFel6RXJ;xyQ|+hhT*rG0`-tP2IcHLl0LiYf=-KJd2qTtq%N zR-bKkAC5sXcNiGk9?e%$*%{0vQnA8PiQwOun;Npc@|;cQjlcAj<&l-o@YE#0~zO}3>){2D>af%m+QL-3D6)ZM(+lRIaRm>RgnX=^l7F@9OX7r}p8Gkah}LO)t33~y@MC;Sr$zoSX@c!` diff --git a/src/main/resources/assets/baubles/textures/gui/expanded_inventory_old.png b/src/main/resources/assets/baubles/textures/gui/expanded_inventory_old.png deleted file mode 100644 index 3f242119e7e4c656183b77edb21ce9658e1f1fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2898 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 PKLeOvvNSIL#WnUHo?mQ!