From 210312f63fa4dc6315ccec442f41972f72cd7ded Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 17 Mar 2018 17:07:24 +0100 Subject: [PATCH] Support for invs that have more or less than 9 slots in Crafter Manager --- .../ICraftingPatternContainer.java | 4 ++ .../apiimpl/autocrafting/CraftingManager.java | 13 ++---- .../node/NetworkNodeCrafterManager.java | 6 ++- .../block/BlockCrafterManager.java | 2 +- .../container/ContainerCrafterManager.java | 43 +++++++++++------- .../refinedstorage/gui/GuiCrafter.java | 4 +- .../refinedstorage/gui/GuiCrafterManager.java | 36 +++++++++------ .../MessageCrafterManagerSlotSizes.java | 7 ++- .../refinedstorage/util/RenderUtils.java | 7 +++ .../textures/gui/crafter_manager.png | Bin 1964 -> 1923 bytes 10 files changed, 78 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java index a3ce2e14d..f42539df9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPatternContainer.java @@ -37,6 +37,10 @@ public interface ICraftingPatternContainer { IItemHandlerModifiable getPatternInventory(); /** + * The name of this container for categorizing in the Crafting Manager GUI. + * Can be a localized or unlocalized name. + * If it's unlocalized, it will automatically format the name. + * * @return the name of this container */ String getName(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index bb5c7d7d1..e26486ea6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -302,15 +302,12 @@ public class CraftingManager implements ICraftingManager { patterns.addAll(container.getPatterns()); - // @todo: ??? - if (container.getPatternInventory().getSlots() == 9 || true) { - // @todo: Crafter first! - if (!containerInventories.containsKey(container.getName())) { - containerInventories.put(container.getName(), new ArrayList<>()); - } - - containerInventories.get(container.getName()).add(container.getPatternInventory()); + // @todo: Crafter first! + if (!containerInventories.containsKey(container.getName())) { + containerInventories.put(container.getName(), new ArrayList<>()); } + + containerInventories.get(container.getName()).add(container.getPatternInventory()); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java index 4f79a489f..9b109dbe3 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafterManager.java @@ -30,8 +30,10 @@ public class NetworkNodeCrafterManager extends NetworkNode { return ID; } - public void send(EntityPlayerMP player) { - RS.INSTANCE.network.sendTo(new MessageCrafterManagerSlotSizes(network.getCraftingManager().getNamedContainers()), player); + public void sendTo(EntityPlayerMP player) { + if (network != null) { + RS.INSTANCE.network.sendTo(new MessageCrafterManagerSlotSizes(network.getCraftingManager().getNamedContainers()), player); + } } public int getSize() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java index e1e9d2ce2..e67a72514 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCrafterManager.java @@ -25,7 +25,7 @@ public class BlockCrafterManager extends BlockNode { @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote && tryOpenNetworkGui(RSGui.CRAFTER_MANAGER, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING)) { - ((TileCrafterManager) world.getTileEntity(pos)).getNode().send((EntityPlayerMP) player); + ((TileCrafterManager) world.getTileEntity(pos)).getNode().sendTo((EntityPlayerMP) player); } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCrafterManager.java index 902c65e74..12d215c60 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCrafterManager.java @@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.container; import com.raoulvdberge.refinedstorage.gui.grid.IGridDisplay; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Container; @@ -98,10 +99,12 @@ public class ContainerCrafterManager extends ContainerBase { if (!player.world.isRemote) { addPlayerInventory(8, display.getYPlayerInventory()); - for (Map.Entry> entry : crafterManager.getNode().getNetwork().getCraftingManager().getNamedContainers().entrySet()) { - for (IItemHandlerModifiable handler : entry.getValue()) { - for (int i = 0; i < handler.getSlots(); ++i) { - addSlotToContainer(new SlotItemHandler(handler, i, 0, 0)); + if (crafterManager.getNode().getNetwork() != null) { + for (Map.Entry> entry : crafterManager.getNode().getNetwork().getCraftingManager().getNamedContainers().entrySet()) { + for (IItemHandlerModifiable handler : entry.getValue()) { + for (int i = 0; i < handler.getSlots(); ++i) { + addSlotToContainer(new SlotItemHandler(handler, i, 0, 0)); + } } } } @@ -125,30 +128,36 @@ public class ContainerCrafterManager extends ContainerBase { addPlayerInventory(8, display.getYPlayerInventory()); int y = 19 + 18 - display.getCurrentOffset() * 18; + int x = 8; for (Map.Entry entry : containerData.entrySet()) { - boolean visible = entry.getKey().toLowerCase().contains(display.getSearchFieldText().toLowerCase()); + // @todo: broken on servers prolly + boolean visible = I18n.format(entry.getKey()).toLowerCase().contains(display.getSearchFieldText().toLowerCase()); - for (int i = 0; i < entry.getValue(); ++i) { - IItemHandlerModifiable dummy; + IItemHandlerModifiable dummy; - if (newContainerData == null) { // We're only resizing, get the previous inventory... - dummy = dummyInventories.get(entry.getKey() + "," + i); - } else { - dummyInventories.put(entry.getKey() + "," + i, dummy = new ItemHandlerBase(9)); - } + if (newContainerData == null) { // We're only resizing, get the previous inventory... + dummy = dummyInventories.get(entry.getKey()); + } else { + dummyInventories.put(entry.getKey(), dummy = new ItemHandlerBase(entry.getValue())); + } - for (int j = 0; j < 9; ++j) { - addSlotToContainer(new SlotCrafterManager(dummy, j, 8 + j * 18, y, visible)); - } + for (int slot = 0; slot < entry.getValue(); ++slot) { + addSlotToContainer(new SlotCrafterManager(dummy, slot, x, y, visible)); if (visible) { - y += 18; + x += 18; + + if ((slot + 1) % 9 == 0) { + x = 8; + y += 18; + } } } if (visible) { - y += 18; + x = 8; + y += 18 * 2; } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafter.java index 802113607..295a59030 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafter.java @@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.gui; import com.raoulvdberge.refinedstorage.container.ContainerCrafter; import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import com.raoulvdberge.refinedstorage.tile.TileCrafter; -import net.minecraft.client.resources.I18n; +import com.raoulvdberge.refinedstorage.util.RenderUtils; public class GuiCrafter extends GuiBase { public GuiCrafter(ContainerCrafter container) { @@ -28,7 +28,7 @@ public class GuiCrafter extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t(I18n.format(TileCrafter.NAME.getValue()))); + drawString(7, 7, RenderUtils.shorten(t(TileCrafter.NAME.getValue()), 26)); drawString(7, 43, t("container.inventory")); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafterManager.java index 16176bc9a..586116e5f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCrafterManager.java @@ -9,9 +9,11 @@ import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonGridSize; import com.raoulvdberge.refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import com.raoulvdberge.refinedstorage.tile.TileCrafterManager; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; +import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Slot; import java.io.IOException; import java.util.Map; @@ -76,9 +78,9 @@ public class GuiCrafterManager extends GuiBase implements IGridDisplay { int rows = 0; for (Map.Entry containerData : container.getContainerData().entrySet()) { - if (containerData.getKey().toLowerCase().contains(getSearchFieldText().toLowerCase())) { + if (t(containerData.getKey()).toLowerCase().contains(getSearchFieldText().toLowerCase())) { rows++; - rows += containerData.getValue(); + rows += Math.ceil((double) Math.max(9, containerData.getValue()) / 9D); } } @@ -141,15 +143,25 @@ public class GuiCrafterManager extends GuiBase implements IGridDisplay { int rows = getVisibleRows(); - for (int i = 0; i < rows; ++i) { - y += 18; + int yy = y; - drawTexture(x, y, 0, getHeader() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth, 18); + for (int i = 0; i < rows; ++i) { + yy += 18; + + drawTexture(x, yy, 0, getHeader() + (i > 0 ? (i == rows - 1 ? 18 * 2 : 18) : 0), screenWidth, 18); } - y += 18; + yy += 18; - drawTexture(x, y, 0, getHeader() + (18 * 3), screenWidth, getFooter()); + drawTexture(x, yy, 0, getHeader() + (18 * 3), screenWidth, getFooter()); + + if (container != null) { + for (Slot slot : container.inventorySlots) { + if (slot instanceof ContainerCrafterManager.SlotCrafterManager && slot.isEnabled()) { + drawTexture(x + slot.xPos - 1, y + slot.yPos - 1, 0, 193, 18, 18); + } + } + } if (searchField != null) { searchField.drawTextBox(); @@ -185,12 +197,12 @@ public class GuiCrafterManager extends GuiBase implements IGridDisplay { drawString(7, 7, t("gui.refinedstorage:crafter_manager")); drawString(7, getYPlayerInventory() - 12, t("container.inventory")); - if (container != null) { + if (container != null && container.getContainerData() != null) { int x = 7; int y = 18 - getCurrentOffset() * 18; for (Map.Entry entry : container.getContainerData().entrySet()) { - if (entry.getKey().toLowerCase().contains(getSearchFieldText().toLowerCase())) { + if (t(entry.getKey()).toLowerCase().contains(getSearchFieldText().toLowerCase())) { if (y >= getHeader() - 1 && y < getHeader() + getVisibleRows() * 18 - 1) { GlStateManager.disableLighting(); GlStateManager.color(1, 1, 1); @@ -199,14 +211,12 @@ public class GuiCrafterManager extends GuiBase implements IGridDisplay { drawTexturedModalRect(x, y, 0, 174, 18 * 9, 18); - drawString(x + 4, y + 5, I18n.format(entry.getKey())); + drawString(x + 4, y + 6, RenderUtils.shorten(I18n.format(entry.getKey()), 25)); } - y += (entry.getValue() + 1) * 18; + y += (Math.ceil((double) Math.max(9, entry.getValue()) / 9D) + 1) * 18; } } } } - - } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java index f7f732a09..81ca4d277 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCrafterManagerSlotSizes.java @@ -41,7 +41,12 @@ public class MessageCrafterManagerSlotSizes implements IMessage, IMessageHandler for (Map.Entry> entry : containerData.entrySet()) { ByteBufUtils.writeUTF8String(buf, entry.getKey()); - buf.writeInt(entry.getValue().size()); + + int slots = 0; + for (IItemHandlerModifiable handler : entry.getValue()) { + slots += handler.getSlots(); + } + buf.writeInt(slots); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java index a841a9308..cc3126b46 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java @@ -54,6 +54,13 @@ public final class RenderUtils { return start.addVector(lookVec.x * reachDistance, lookVec.y * reachDistance, lookVec.z * reachDistance); } + public static String shorten(String text, int length) { + if (text.length() > length) { + text = text.substring(0, length) + "..."; + } + return text; + } + public static AdvancedRayTraceResult collisionRayTrace(BlockPos pos, Vec3d start, Vec3d end, Collection boxes) { double minDistance = Double.POSITIVE_INFINITY; AdvancedRayTraceResult hit = null; diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafter_manager.png b/src/main/resources/assets/refinedstorage/textures/gui/crafter_manager.png index 03ec08176a41522a90d580bd6b45eca4feffd2c2..3aed4f00fc660a61817e2a21d0651f95e7b70bd1 100644 GIT binary patch delta 798 zcmZ3(-^@QjWuu`13)dkA2EId#q8eTele1aW>zQ77x;TbZ#J#=yFz>R1Kx^RSDf|9Q zFIU-lBlmFsse6KPXMeVsoS69L?&6MB(Hy7WZu7bGw%~Mb<@_CwnNDB%U0-jl^MRpa z_O{bcR~(R4FrU4VlR>X}*R#6#*^CdYmesEpVqjpndEy?BWKb|)&FNrPuqBgm-TD06 zebax}<}%ec++yHi{!#i(?mq9c@8{ozvoZa#t2`h2%>Rh{cWt1i6K>zwK$^io;k;!o zgyrz<9|u%$Lhl=1D3gJ~VP5eq2&duAUqPs_g7i&k1_u9z#Q%HNuelz|$2!A=;Vh%x zTZVb^^(#N`jAOX@WqIGbdaH(-t~*iNHtv7Pu<2bQBT%!$J3B`pbz)aLs{+H%lxb_T zpIxip7sNZEc-hwPn`1#rKp^GrVI~NRfuZ8Bv{L%+Af5@u)7Ku_Jon66`Ph|gC#-YV zemJ}5Jr`7!!fQD(2(un&$z9KLE3}U?SeD<^vblZo&aaD8vl{kXzQ%R`%P70x5E0YZ0S;oggyp_ z7rX|K7H_HFzg_3_-+h-&Qt!BoL?eENM>U@5R*oxb3YKlH5+VJPe%RRB1 zFD;t(`9HgJWM&`(!xPKpybfVeA`A?b=Q5cmOci5=gnY_US4M^j&*yB*YPde%aqikR zTQuC0EGuql*)>^3pMHIQ;b*VOKu7Pp&hTWa8c=0z{d&d|+P+K-3cur+Cxp*pVQ~1i z_ZshmuO2$9RH1_h+2tDg(YI;Vst0QYD= AVE_OC literal 1964 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j@`a}`~Uy{K*3Qk8UiCB1d5OP@`G|s zNswPKFy)VAz!3bMT@@JToCO|{#S9F5he4R}c>anMprB-lYeY$Kep*R+Vo@qXL1JcJ ziC$i6iGqoqfu5n|m1~=TikMkET^vIy;@;l5==a({fZ^f=hyVZknHM_yNXsduhab5m z8JnqUzvEmW>#k+5w&+|wpu2qbw3l`T&smo(od5q{UDN~V2emiywr^(AW|-Z3gMnfD zg0yedc`OZ<%l7+gHZU-KP}s|<0HilW`Z0ZANS78%sQa`1ZOxnScNiFUatg40_;%|| z&fm|c-c5P!rNCgHz3p9i^v$_Nv4Rc^j1?2^u?PTZFtMm_=5{5ZK`Bgc*1ub~Z4%D` zU2pA=dF?l?woKwZur9hY|JgoKkkW?bp%5J`0uAgheL>n2?pnQ9Q_oVBY^a_d_UJC( z=F$vR>4wQUS<`Tr-2+HJxRc1qz%c)ChHBllW{C4_ zFNZyP8g{=6WH8VV90ztD7J_+JRR<`L0l%VE2Pv2_l}{ede}Sg}G-U1Jf0@jvrcY zuP@7t`YyYyqG5gg8(SyFc(s3*c0GKYeX9LM;foVO+hnvEf1JKtI@>Zc=<@C3M|T%r zS^^B1>pOFp3h=RRGW_1}7^~|yYf5<1nN6GrbY?TqiMq9^hUq4MmmT}Fh3cTv)6><@ JWt~$(69CkOcK!eW