From 0f172ddf524ae39b406693cae9bda361e2578666 Mon Sep 17 00:00:00 2001 From: ProfessorProspector Date: Sat, 7 Jan 2017 00:02:57 -0800 Subject: [PATCH] some things --- .../container/builder/slot/ArmorSlot.java | 8 +--- .../builder/slot/EnergyChargeSlot.java | 12 +----- .../container/builder/slot/FilteredSlot.java | 6 ++- .../container/builder/slot/SpriteSlot.java | 25 ++++++++++++ .../java/techreborn/client/gui/GuiBase.java | 6 +++ .../client/gui/GuiDigitalChest.java | 15 ++++--- .../java/techreborn/client/gui/TRBuilder.java | 38 ++++++++++++++++-- .../techreborn/tiles/TileTechStorageBase.java | 23 +++++------ .../techreborn/textures/gui/gui_sheet.png | Bin 9202 -> 11347 bytes .../techreborn/textures/gui/slot_sprites.png | Bin 3429 -> 0 bytes .../gui/slot_sprites/armour_chest.png | Bin 0 -> 239 bytes .../textures/gui/slot_sprites/armour_feet.png | Bin 0 -> 242 bytes .../textures/gui/slot_sprites/armour_head.png | Bin 0 -> 258 bytes .../textures/gui/slot_sprites/armour_legs.png | Bin 0 -> 226 bytes .../gui/slot_sprites/armour_offhand.png | Bin 0 -> 249 bytes .../textures/gui/slot_sprites/cells.png | Bin 0 -> 368 bytes .../textures/gui/slot_sprites/upgrade.png | Bin 0 -> 310 bytes 17 files changed, 89 insertions(+), 44 deletions(-) create mode 100644 src/main/java/techreborn/client/container/builder/slot/SpriteSlot.java delete mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_chest.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_feet.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_head.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_legs.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_offhand.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/cells.png create mode 100644 src/main/resources/assets/techreborn/textures/gui/slot_sprites/upgrade.png diff --git a/src/main/java/techreborn/client/container/builder/slot/ArmorSlot.java b/src/main/java/techreborn/client/container/builder/slot/ArmorSlot.java index 01eb5f877..09c6a0389 100644 --- a/src/main/java/techreborn/client/container/builder/slot/ArmorSlot.java +++ b/src/main/java/techreborn/client/container/builder/slot/ArmorSlot.java @@ -8,15 +8,9 @@ import techreborn.lib.ModInfo; public class ArmorSlot extends FilteredSlot { - public ArmorSlot(final EntityEquipmentSlot armorType, final InventoryPlayer inventory, final int index, - final int xPosition, final int yPosition) { - + public ArmorSlot(final EntityEquipmentSlot armorType, final InventoryPlayer inventory, final int index, final int xPosition, final int yPosition) { super(inventory, index, xPosition, yPosition); - this.setFilter(stack -> stack != null && stack.getItem().isValidArmor(stack, armorType, inventory.player)); - - this.setBackgroundLocation( - new ResourceLocation(ModInfo.MOD_ID, "textures/gui/slots/armor_" + armorType.getName() + ".png")); } @Override diff --git a/src/main/java/techreborn/client/container/builder/slot/EnergyChargeSlot.java b/src/main/java/techreborn/client/container/builder/slot/EnergyChargeSlot.java index 4e21c8882..9b3696eb8 100644 --- a/src/main/java/techreborn/client/container/builder/slot/EnergyChargeSlot.java +++ b/src/main/java/techreborn/client/container/builder/slot/EnergyChargeSlot.java @@ -2,25 +2,15 @@ package techreborn.client.container.builder.slot; import net.minecraft.inventory.IInventory; import net.minecraft.util.EnumFacing; -import net.minecraft.util.ResourceLocation; import net.minecraftforge.energy.CapabilityEnergy; - import reborncore.api.power.IEnergyInterfaceItem; -import techreborn.lib.ModInfo; - public class EnergyChargeSlot extends FilteredSlot { - private static final ResourceLocation TEX = new ResourceLocation(ModInfo.MOD_ID, - "textures/gui/slots/energy_charge.png"); - @SuppressWarnings("null") public EnergyChargeSlot(final IInventory inventory, final int index, final int xPosition, final int yPosition) { super(inventory, index, xPosition, yPosition); - - this.setFilter(stack -> stack.hasCapability(CapabilityEnergy.ENERGY, EnumFacing.UP) - || stack.getItem() instanceof IEnergyInterfaceItem); - this.setBackgroundLocation(EnergyChargeSlot.TEX); + this.setFilter(stack -> stack.hasCapability(CapabilityEnergy.ENERGY, EnumFacing.UP) || stack.getItem() instanceof IEnergyInterfaceItem); } } diff --git a/src/main/java/techreborn/client/container/builder/slot/FilteredSlot.java b/src/main/java/techreborn/client/container/builder/slot/FilteredSlot.java index 463db1143..ce1c6f2a9 100644 --- a/src/main/java/techreborn/client/container/builder/slot/FilteredSlot.java +++ b/src/main/java/techreborn/client/container/builder/slot/FilteredSlot.java @@ -21,6 +21,10 @@ public class FilteredSlot extends Slot { @Override public boolean isItemValid(final ItemStack stack) { - return this.filter.test(stack); + try { + return this.filter.test(stack); + } catch (NullPointerException e) { + return true; + } } } diff --git a/src/main/java/techreborn/client/container/builder/slot/SpriteSlot.java b/src/main/java/techreborn/client/container/builder/slot/SpriteSlot.java new file mode 100644 index 000000000..ee142a97f --- /dev/null +++ b/src/main/java/techreborn/client/container/builder/slot/SpriteSlot.java @@ -0,0 +1,25 @@ +package techreborn.client.container.builder.slot; + +import net.minecraft.inventory.IInventory; +import net.minecraft.util.ResourceLocation; +import techreborn.lib.ModInfo; + +public class SpriteSlot extends FilteredSlot { + + int stacksize; + + public SpriteSlot(final IInventory inventory, final int index, final int xPosition, final int yPosition, String sprite, int stacksize) { + super(inventory, index, xPosition, yPosition); + this.setBackgroundLocation(new ResourceLocation(ModInfo.MOD_ID.toLowerCase() + ":textures/gui/slot_sprites/" + sprite + ".png")); + this.stacksize = stacksize; + } + + public SpriteSlot(final IInventory inventory, final int index, final int xPosition, final int yPosition, String sprite) { + this(inventory, index, xPosition, yPosition, sprite, 64); + } + + @Override + public int getSlotStackLimit() { + return stacksize; + } +} diff --git a/src/main/java/techreborn/client/gui/GuiBase.java b/src/main/java/techreborn/client/gui/GuiBase.java index 627fb6d0d..cf079af97 100644 --- a/src/main/java/techreborn/client/gui/GuiBase.java +++ b/src/main/java/techreborn/client/gui/GuiBase.java @@ -80,4 +80,10 @@ public class GuiBase extends GuiContainer { mc.fontRendererObj.drawString(string, x, y, colour); GlStateManager.color(1, 1, 1, 1); } + + //TODO + public enum SlotRender { + STANDARD, OUTPUT, NONE, SPRITE; + + } } diff --git a/src/main/java/techreborn/client/gui/GuiDigitalChest.java b/src/main/java/techreborn/client/gui/GuiDigitalChest.java index 1c75f4edc..25680e09e 100644 --- a/src/main/java/techreborn/client/gui/GuiDigitalChest.java +++ b/src/main/java/techreborn/client/gui/GuiDigitalChest.java @@ -10,7 +10,7 @@ public class GuiDigitalChest extends GuiBase { TileDigitalChest tile; public GuiDigitalChest(final EntityPlayer player, final TileDigitalChest tile) { - super(player, tile, new ContainerBuilder().player(player.inventory).inventory().hotbar().addInventory().tile(tile).slot(0, 80, 20).outputSlot(1, 80, 70).fakeSlot(2, 80, 45).addInventory().create()); + super(player, tile, new ContainerBuilder().player(player.inventory).inventory().hotbar().addInventory().tile(tile).slot(0, 80, 24).outputSlot(1, 80, 64).addInventory().create()); this.tile = tile; } @@ -18,18 +18,17 @@ public class GuiDigitalChest extends GuiBase { protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) { super.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); - drawSlotBackground(80, 20); - drawSelectedStackBackground(80, 45); - drawSlotBackground(80, 70); + drawSlotBackground(80, 24); + drawSlotBackground(80, 64); } protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { super.drawGuiContainerForegroundLayer(mouseX, mouseY); - this.fontRendererObj.drawString("Amount", 105, 43, 0); if (tile.storedItem != ItemStack.EMPTY && tile.getStackInSlot(1) != null) { - drawString(tile.storedItem.getCount() + tile.getStackInSlot(1).getCount() + "", 105, 53, 0); + builder.drawBigBlueBar(this, 31, 43, tile.storedItem.getCount() + tile.getStackInSlot(1).getCount(), tile.maxCapacity, mouseX - guiLeft, mouseY - guiTop, "Stored"); + } + if (tile.storedItem == ItemStack.EMPTY && tile.getStackInSlot(1) != null) { + builder.drawBigBlueBar(this, 31, 43, tile.getStackInSlot(1).getCount(), tile.maxCapacity, mouseX - guiLeft, mouseY - guiTop, "Stored"); } - if (tile.storedItem == ItemStack.EMPTY && tile.getStackInSlot(1) != null) - drawString(tile.getStackInSlot(1).getCount() + "", 105, 53, 0); } } diff --git a/src/main/java/techreborn/client/gui/TRBuilder.java b/src/main/java/techreborn/client/gui/TRBuilder.java index ca01dbb8d..8a35e6ed9 100644 --- a/src/main/java/techreborn/client/gui/TRBuilder.java +++ b/src/main/java/techreborn/client/gui/TRBuilder.java @@ -1,7 +1,6 @@ package techreborn.client.gui; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextFormatting; @@ -18,13 +17,12 @@ import java.util.List; */ public class TRBuilder extends GuiBuilder { public static final ResourceLocation GUI_SHEET = new ResourceLocation(ModInfo.MOD_ID.toLowerCase() + ":" + "textures/gui/gui_sheet.png"); - public static final ResourceLocation SPRITE_SHEET = new ResourceLocation(ModInfo.MOD_ID.toLowerCase() + ":" + "textures/gui/slot_sprites.png"); public TRBuilder() { super(GUI_SHEET); } - public void drawMultiEnergyBar(GuiScreen gui, int x, int y, int energyStored, int maxEnergyStored, int mouseX, int mouseY) { + public void drawMultiEnergyBar(GuiBase gui, int x, int y, int energyStored, int maxEnergyStored, int mouseX, int mouseY) { Minecraft.getMinecraft().getTextureManager().bindTexture(GUI_SHEET); gui.drawTexturedModalRect(x, y, PowerSystem.getDisplayPower().xBar - 15, PowerSystem.getDisplayPower().yBar - 1, 14, 50); @@ -55,7 +53,39 @@ public class TRBuilder extends GuiBuilder { } } - public void drawSelectedStack(GuiScreen gui, int x, int y) { + public void drawBigBlueBar(GuiBase gui, int x, int y, int value, int max, int mouseX, int mouseY, String suffix) { + gui.mc.getTextureManager().bindTexture(GUI_SHEET); + if (!suffix.equals("")) { + suffix = " " + suffix; + } + gui.drawTexturedModalRect(x, y, 0, 218, 114, 18); + int j = (int) ((double) value / (double) max * 106); + if (j < 0) + j = 0; + gui.drawTexturedModalRect(x + 4, y + 4, 0, 236, j, 10); + gui.drawCentredString(value + suffix, y + 5, 0xFFFFFF); + if (isInRect(x, y, 114, 18, mouseX, mouseY)) { + int percentage = percentage(max, value); + List list = new ArrayList<>(); + list.add("" + TextFormatting.GOLD + value + "/" + max + suffix); + list.add(getPercentageColour(percentage) + "" + percentage + "%" + TextFormatting.GRAY + " Full"); + + if (value > max) { + list.add(TextFormatting.GRAY + "Yo this is storing more than it should be able to"); + list.add(TextFormatting.GRAY + "prolly a bug"); + list.add(TextFormatting.GRAY + "pls report and tell how tf you did this"); + } + net.minecraftforge.fml.client.config.GuiUtils.drawHoveringText(list, mouseX, mouseY, gui.width, gui.height, -1, gui.mc.fontRendererObj); + GlStateManager.disableLighting(); + GlStateManager.color(1, 1, 1, 1); + } + } + + public void drawBigBlueBar(GuiBase gui, int x, int y, int value, int max, int mouseX, int mouseY) { + drawBigBlueBar(gui, x, y, value, max, mouseX, mouseY, ""); + } + + public void drawSelectedStack(GuiBase gui, int x, int y) { Minecraft.getMinecraft().getTextureManager().bindTexture(GUI_SHEET); gui.drawTexturedModalRect(x - 4, y - 4, 202, 44, 24, 24); } diff --git a/src/main/java/techreborn/tiles/TileTechStorageBase.java b/src/main/java/techreborn/tiles/TileTechStorageBase.java index d209bc3c2..71b499796 100644 --- a/src/main/java/techreborn/tiles/TileTechStorageBase.java +++ b/src/main/java/techreborn/tiles/TileTechStorageBase.java @@ -9,9 +9,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; - import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; - import reborncore.api.IListInfoProvider; import reborncore.api.tile.IInventoryProvider; import reborncore.common.IWrenchable; @@ -23,14 +21,12 @@ import java.util.ArrayList; import java.util.List; public class TileTechStorageBase extends TileLegacyMachineBase - implements IInventoryProvider, IWrenchable, IListInfoProvider, IDeepStorageUnit { - - public InvWrapper invWrapper; - - public ItemStack storedItem; + implements IInventoryProvider, IWrenchable, IListInfoProvider, IDeepStorageUnit { public final int maxCapacity; public final Inventory inventory; + public InvWrapper invWrapper; + public ItemStack storedItem; public TileTechStorageBase(String name, int maxCapacity) { this.maxCapacity = maxCapacity; @@ -43,7 +39,7 @@ public class TileTechStorageBase extends TileLegacyMachineBase if (!world.isRemote) { if (this.getStackInSlot(0) != ItemStack.EMPTY) { if (this.getStoredItemType().isEmpty() || (this.storedItem.isEmpty() - && ItemUtils.isItemEqual(this.getStackInSlot(0), this.getStackInSlot(1), true, true))) { + && ItemUtils.isItemEqual(this.getStackInSlot(0), this.getStackInSlot(1), true, true))) { this.storedItem = this.getStackInSlot(0); this.setInventorySlotContents(0, ItemStack.EMPTY); @@ -70,10 +66,10 @@ public class TileTechStorageBase extends TileLegacyMachineBase this.setInventorySlotContents(1, delivered); this.syncWithAll(); } else if (ItemUtils.isItemEqual(this.storedItem, this.getStackInSlot(1), true, true) - && this.getStackInSlot(1).getCount() < this.getStackInSlot(1).getMaxStackSize()) { + && this.getStackInSlot(1).getCount() < this.getStackInSlot(1).getMaxStackSize()) { int wanted = Math.min(this.storedItem.getCount(), - this.getStackInSlot(1).getMaxStackSize() - this.getStackInSlot(1).getCount()); + this.getStackInSlot(1).getMaxStackSize() - this.getStackInSlot(1).getCount()); this.getStackInSlot(1).setCount(this.getStackInSlot(1).getCount() + wanted); this.storedItem.shrink(wanted); @@ -85,7 +81,7 @@ public class TileTechStorageBase extends TileLegacyMachineBase } if (this.getStackInSlot(2) == ItemStack.EMPTY - && (!this.storedItem.isEmpty() || !this.getStackInSlot(1).isEmpty())) { + && (!this.storedItem.isEmpty() || !this.getStackInSlot(1).isEmpty())) { ItemStack fake = storedItem.isEmpty() ? this.getStackInSlot(1).copy() : storedItem.copy(); fake.setCount(1); @@ -104,7 +100,7 @@ public class TileTechStorageBase extends TileLegacyMachineBase @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) { world.markBlockRangeForRenderUpdate(getPos().getX(), getPos().getY(), getPos().getZ(), getPos().getX(), - getPos().getY(), getPos().getZ()); + getPos().getY(), getPos().getZ()); readFromNBT(packet.getNbtCompound()); } @@ -259,7 +255,8 @@ public class TileTechStorageBase extends TileLegacyMachineBase @Override public boolean hasCapability(final net.minecraftforge.common.capabilities.Capability capability, - @javax.annotation.Nullable final net.minecraft.util.EnumFacing facing) { + @javax.annotation.Nullable + final net.minecraft.util.EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } diff --git a/src/main/resources/assets/techreborn/textures/gui/gui_sheet.png b/src/main/resources/assets/techreborn/textures/gui/gui_sheet.png index 2d783fa90b6682e860485385161dc06b00f7bc1d..0cbc5990f9a5f093db06f75ec547a987dce16ef8 100644 GIT binary patch literal 11347 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 literal 9202 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 WD*13Q9QkJ)V06$_zvzHt)c*oDk#Lp( diff --git a/src/main/resources/assets/techreborn/textures/gui/slot_sprites.png b/src/main/resources/assets/techreborn/textures/gui/slot_sprites.png deleted file mode 100644 index 933dd7e7349729941adaab9658033e4f018d11d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3429 zcmeHKYfMvT7(Sg&1P6643sX>JZoxzX>I_%Q2{(Ze!OJqJA_x;IP=OXirPvaG2&iq% zGHKkPOdU}sf>+_aq^w-&HLni z-{*PG_vKXXNQiNDS>*x%fNNZA)Gh!Z5w9d*=@Mc|VP451mc_L2?co5>%wJ|r|B%=_ z7sOHv0l=-p{*cafFyn}zQ&HUZXs3}SPRrfg?=p^jK!jEnMJE^S&d(}3lFrNo3evOl ziv032i`H)O+vvAx<24tTE&%wbKQ1c#o1>}l&`zc{t2la87c_O?TQ;)TIun@K9SM=v zM_2<(b|*K`(n+7R%h zR+)oG{G{idRIG6~iNFqY0;)koM7@bZ=;mah@4e!@rt4@5!ph zND6hUvZTK_PtO;z@vr2L8O)(HxI)Wlu0h<#lrK|DF-+4?(<+dHgF}|*C5{247P^ML zlH1glp$XFV=TZ)J+Bs6l=GL0z$c08dUvBRnzN)2wp}CXr#2mS$IP7++UMYiZj4)MO z+BQ33K{Cv+hm(b7i);<685BS9<2BDiN?p^seHBXeC`SzZMmbAd$l{b1x3|^O zxHeC{ye}!GxfwqrGm>i`m_+uttoAr_w5yDT0o7BNF zQ6Gc%gy1oa(c6a^f>mH?fV$s78v9B4(J+_34HyHRBg4W&9nzD#*&px?@89V;EwQEHLUT+MYh_6Tv1YO+ilCzvwz-j_h3ZL6x( zPAwxu>o1KVo8ir1o*I-{L@kVD$nZA^*AaEnBh_)M6FlRYVW|JXLfmX?;C72xG6OM7 z4+?c}D~XPz9}WtqZt8iW@K!Az` zXA+dLNjViTAuWho4bYHR*my179?oj}NPP96%_#pdYto;B~`ze5b7*pD{a)1bfUU z4Er0?rXOHx41e)!V2Nzptl{Iz zz>y%SwN=eV^)?%8B;tO~I>|+Ev9#A_ogsH^N_%Vikm{d(f8<7GSHQ-zbu`(sOS$#k zl}Wyp+@iXZis^zAHx34@sPh)TPP^vjv;K6}x}B>su68@$yQqx);a^Q_ryQ6%Z@BY( z&ve1qr|}sM0skw#y&)uzOfC7NW8>|rkm{qo-z)4ce9yeS>FtfCs>mu~u>YCHIyaxx z<}U&U&b=p1|Eagvnl9M#-F<)ywtQy?*Mcn!lvI6;>1s;*b z3=BerAk6srPE{XJkiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`IgB!CEe^13*QQo-U3d7XEj80=W(-@Hp>Hd0#)J$3k~5%gSB-8`%XjFNZV8 zxblS;*)tj+)>#`?$r0ixSgm(LrtiZu=O()q^I7)(Ue}PKvhlM!<4n(Eb43KiLT}wF dJXjZ?_nlwk+2oLU3xJj|c)I$ztaD0e0st)iN;d!i literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_feet.png b/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_feet.png new file mode 100644 index 0000000000000000000000000000000000000000..774a4147186179cae18bdf6eafd4627751c59017 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=BerAk6srPE{XJkiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`IgB!CEe^13*PFo-U3d7XEL0Zu1^c;9-t5`rV(DV(OyNf9a6Ex@4p0Iz|hx zsDCGmb0%@Quqa0@mE~mGzvTL-I#xe}`UzQ`J=;0|FjNW)lr2qARdFgTe~DWM4fzMDwM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_head.png b/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_head.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d2f4df1b8d1d758e87a45ffe569bf316db4d0d GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85o3$K$tNuHTp47kiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}z zd16s2LqTF@UWr~_YKel0o`IgB!CEe^13*Rbo-U3d7XD{@xVah(c$~{m-utgH^~9>g zV;eM^_?@=b#hpGAKJo0-IsL9{6qJIN_Lt|eK2|zxtXXi}_3fXShEqoW!nZQDi!!J` vyjjk)KqdJ+7XzQg-r52|o8Fvr>bKcgWBVGkYi*VStzz(W^>bP0l+XkK_vBG6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_legs.png b/src/main/resources/assets/techreborn/textures/gui/slot_sprites/armour_legs.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebae576a2b96e54a3fc412f51e58c65f55af1f8 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=BerAk6srPE{XJkiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`IgB!CEe^13*PSo-U3d7XHaU{{Odkl~}EyDKV9qW#Phw|34;9kP@*yAv1%i zhG7X?-}^+%XiJA8 P&|C&jS3j3^P6!lvI6;>1s;*b z3=BdAAk3&Zdqx&ekiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`IgB!CEe^13*Q|o-U3d7XDj%4)PvQ;9-uO^w-^UYWqatJ0>e06$)AA@EiYb zosw`a)9>3EwSY&9iV|$^G0mJ4EwqT+>Y;@q&xRKVA~pB#Fn&NS%G}c0*}aI z1_q&g5N4EfRNDm-L1P>`6JSE84f zTB2a0XP{?ju$GJK08r5_PZ!6K2=}+=9Qm3Zc$_cBP5LdLx@%L*zJ1Ikj?tY*qi-~( z#AUBtf9aE7)TM2?uZ8a~ z{@#xkr985!T%@{{`AFp_7w;_gj?Ygzr(NL_cz#k?ccrYtxykBLLDmj))cvIzif0)XNC>`kN@m0VzEbU-MlwF jO)u!b2z2Vb^u6~IbN=>6YH$1n^d*C*tDnm{r-UW|5topw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/techreborn/textures/gui/slot_sprites/upgrade.png b/src/main/resources/assets/techreborn/textures/gui/slot_sprites/upgrade.png new file mode 100644 index 0000000000000000000000000000000000000000..0f69c497bb7d607aee8d4245669be854fcca4014 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=BdAAk3&Zdqx&ekiEpy*OmPNmmoi%%Ed@=X`ql~iEBhjaDG}zd16s2LqTF@UWr~_ zYKel0o`IgB!CEe^13*O!JY5_^Ec~}la^yR#z{4{6(z3sz;dTdRO5cC*a-H~1Eupf2 z=+vd6DI1S|f3eS)f}PJYD@<);T3K0RWPi BZ%6