From a5db67e2b76b897bfc8a412a5186ec134ca9ddc5 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 31 Mar 2015 11:39:10 -0400 Subject: [PATCH] Tiered Logistical Transporters --- .../client/render/RenderPartTransmitter.java | 2 +- src/main/java/mekanism/common/Mekanism.java | 13 ++++- src/main/java/mekanism/common/Tier.java | 29 +++++++++++ .../common/multipart/MultipartMekanism.java | 23 +++++++-- .../multipart/PartDiversionTransporter.java | 14 +++++- .../multipart/PartLogisticalTransporter.java | 45 ++++++++++++------ .../common/multipart/PartMechanicalPipe.java | 1 + .../multipart/PartRestrictiveTransporter.java | 6 +-- .../common/multipart/PartSidedPipe.java | 10 +++- .../common/multipart/TransmitterType.java | 9 ++-- .../mekanism/common/util/InventoryUtils.java | 6 +-- .../resources/assets/mekanism/lang/en_US.lang | 5 +- ...png => DiversionTransporterHorizontal.png} | Bin ...l.png => DiversionTransporterVertical.png} | Bin ....png => LogisticalTransporterAdvanced.png} | Bin 1558 -> 1548 bytes .../models/LogisticalTransporterBasic.png | Bin 0 -> 1569 bytes .../models/LogisticalTransporterElite.png | Bin 0 -> 1555 bytes ...ogisticalTransporterHorizontalAdvanced.png | Bin 0 -> 1162 bytes .../LogisticalTransporterHorizontalBasic.png | Bin 0 -> 1167 bytes .../LogisticalTransporterHorizontalElite.png | Bin 0 -> 1163 bytes ...ogisticalTransporterHorizontalUltimate.png | Bin 0 -> 1169 bytes .../models/LogisticalTransporterUltimate.png | Bin 0 -> 1570 bytes .../LogisticalTransporterVerticalAdvanced.png | Bin 0 -> 1165 bytes .../LogisticalTransporterVerticalBasic.png | Bin 0 -> 1165 bytes .../LogisticalTransporterVerticalElite.png | Bin 0 -> 1164 bytes .../LogisticalTransporterVerticalUltimate.png | Bin 0 -> 1148 bytes 26 files changed, 128 insertions(+), 35 deletions(-) rename src/main/resources/assets/mekanism/textures/blocks/models/{LogisticalTransporterHorizontal.png => DiversionTransporterHorizontal.png} (100%) rename src/main/resources/assets/mekanism/textures/blocks/models/{LogisticalTransporterVertical.png => DiversionTransporterVertical.png} (100%) rename src/main/resources/assets/mekanism/textures/blocks/models/{LogisticalTransporter.png => LogisticalTransporterAdvanced.png} (65%) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterBasic.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterElite.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalAdvanced.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalBasic.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalElite.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalUltimate.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterUltimate.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalAdvanced.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalBasic.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalElite.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalUltimate.png diff --git a/src/main/java/mekanism/client/render/RenderPartTransmitter.java b/src/main/java/mekanism/client/render/RenderPartTransmitter.java index f75f362d7..bbb1f34c5 100644 --- a/src/main/java/mekanism/client/render/RenderPartTransmitter.java +++ b/src/main/java/mekanism/client/render/RenderPartTransmitter.java @@ -178,7 +178,7 @@ public class RenderPartTransmitter implements IIconSelfRegister GL11.glPushMatrix(); entityItem.setEntityItemStack(stack.itemStack); - float[] pos = TransporterUtils.getStackPosition(transporter, stack, partialTick*PartLogisticalTransporter.SPEED); + float[] pos = TransporterUtils.getStackPosition(transporter, stack, partialTick*transporter.tier.speed); GL11.glTranslated(vec.x + pos[0], vec.y + pos[1] - entityItem.yOffset, vec.z + pos[2]); GL11.glScalef(0.75F, 0.75F, 0.75F); diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index d150fc5d5..801572724 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -595,10 +595,19 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 9), new Object[] { "SCS", Character.valueOf('S'), "ingotSteel", Character.valueOf('C'), "circuitBasic" })); - CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 2, 10), new Object[] { + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 10), new Object[] { + "TTT", "TET", "TTT", Character.valueOf('E'), "alloyAdvanced", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 9) + })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 11), new Object[] { + "TTT", "TRT", "TTT", Character.valueOf('R'), "alloyElite", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 10) + })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 12), new Object[] { + "TTT", "TAT", "TTT", Character.valueOf('A'), "alloyUltimate", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 11) + })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 2, 13), new Object[] { "SBS", Character.valueOf('S'), "ingotSteel", Character.valueOf('B'), Blocks.iron_bars })); - CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 2, 11), new Object[] { + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 2, 14), new Object[] { "RRR", "SBS", "RRR", Character.valueOf('R'), "dustRedstone", Character.valueOf('S'), "ingotSteel", Character.valueOf('B'), Blocks.iron_bars })); diff --git a/src/main/java/mekanism/common/Tier.java b/src/main/java/mekanism/common/Tier.java index b407046ad..5f4265a19 100644 --- a/src/main/java/mekanism/common/Tier.java +++ b/src/main/java/mekanism/common/Tier.java @@ -247,4 +247,33 @@ public final class Tier } } } + + /** + * The tiers used by Logistical Transporters and their corresponding values. + * @author AidanBrady + * + */ + public static enum TransporterTier + { + BASIC(1, 5, TransmitterType.LOGISTICAL_TRANSPORTER_BASIC), + ADVANCED(16, 10, TransmitterType.LOGISTICAL_TRANSPORTER_ADVANCED), + ELITE(32, 20, TransmitterType.LOGISTICAL_TRANSPORTER_ELITE), + ULTIMATE(64, 50, TransmitterType.LOGISTICAL_TRANSPORTER_ULTIMATE); + + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + public int pullAmount; + public int speed; + public TransmitterType type; + + private TransporterTier(int pull, int s, TransmitterType transmitterType) + { + pullAmount = pull; + speed = s; + type = transmitterType; + } + } } diff --git a/src/main/java/mekanism/common/multipart/MultipartMekanism.java b/src/main/java/mekanism/common/multipart/MultipartMekanism.java index 86d215b36..db2b99670 100644 --- a/src/main/java/mekanism/common/multipart/MultipartMekanism.java +++ b/src/main/java/mekanism/common/multipart/MultipartMekanism.java @@ -31,9 +31,10 @@ public class MultipartMekanism implements IPartFactory "mekanism:universal_cable_ultimate", "mekanism:mechanical_pipe", "mekanism:mechanical_pipe_basic", "mekanism:mechanical_pipe_advanced", "mekanism:mechanical_pipe_elite", "mekanism:mechanical_pipe_ultimate", - "mekanism:pressurized_tube", "mekanism:logistical_transporter", - "mekanism:restrictive_transporter", "mekanism:diversion_transporter", - "mekanism:heat_transmitter", + "mekanism:pressurized_tube", "mekanism:logistical_transporter_basic", + "mekanism:logistical_transporter_advanced", "mekanism:logistical_transporter_elite", + "mekanism:logistical_transporter_ultimate", "mekanism:restrictive_transporter", + "mekanism:diversion_transporter", "mekanism:heat_transmitter", "mekanism:glow_panel"}); MultipartGenerator.registerPassThroughInterface("mekanism.api.IConfigurable"); @@ -97,9 +98,21 @@ public class MultipartMekanism implements IPartFactory { return new PartPressurizedTube(); } - else if(name.equals("mekanism:logistical_transporter")) + else if(name.equals("mekanism:logistical_transporter_basic") || name.equals("mekanism:logistical_transporter")) { - return new PartLogisticalTransporter(); + return new PartLogisticalTransporter(Tier.TransporterTier.BASIC); + } + else if(name.equals("mekanism:logistical_transporter_advanced")) + { + return new PartLogisticalTransporter(Tier.TransporterTier.ADVANCED); + } + else if(name.equals("mekanism:logistical_transporter_elite")) + { + return new PartLogisticalTransporter(Tier.TransporterTier.ELITE); + } + else if(name.equals("mekanism:logistical_transporter_ultimate")) + { + return new PartLogisticalTransporter(Tier.TransporterTier.ULTIMATE); } else if(name.equals("mekanism:restrictive_transporter")) { diff --git a/src/main/java/mekanism/common/multipart/PartDiversionTransporter.java b/src/main/java/mekanism/common/multipart/PartDiversionTransporter.java index 44ebf729f..2402b8800 100644 --- a/src/main/java/mekanism/common/multipart/PartDiversionTransporter.java +++ b/src/main/java/mekanism/common/multipart/PartDiversionTransporter.java @@ -37,7 +37,19 @@ public class PartDiversionTransporter extends PartLogisticalTransporter @Override public IIcon getCenterIcon(boolean opaque) { - return transporterIcons.getCenterIcon(2); + return transporterIcons.getCenterIcon(5); + } + + @Override + public IIcon getSideIcon(boolean opaque) + { + return transporterIcons.getSideIcon(opaque ? 14 : (color != null ? 11 : 10)); + } + + @Override + public IIcon getSideIconRotated(boolean opaque) + { + return transporterIcons.getSideIcon(opaque ? 15 : (color != null ? 13 : 12)); } @Override diff --git a/src/main/java/mekanism/common/multipart/PartLogisticalTransporter.java b/src/main/java/mekanism/common/multipart/PartLogisticalTransporter.java index f41b9862c..c38c54e17 100644 --- a/src/main/java/mekanism/common/multipart/PartLogisticalTransporter.java +++ b/src/main/java/mekanism/common/multipart/PartLogisticalTransporter.java @@ -15,6 +15,8 @@ import mekanism.client.render.RenderPartTransmitter; import mekanism.common.HashList; import mekanism.common.InventoryNetwork; import mekanism.common.Mekanism; +import mekanism.common.Tier; +import mekanism.common.Tier.TransporterTier; import mekanism.common.base.ILogisticalTransporter; import mekanism.common.content.transporter.InvStack; import mekanism.common.content.transporter.PathfinderCache; @@ -39,15 +41,16 @@ import net.minecraft.util.IIcon; import net.minecraftforge.common.util.Constants.NBT; import net.minecraftforge.common.util.ForgeDirection; import codechicken.lib.vec.Vector3; -import cpw.mods.fml.common.Optional.Interface; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class PartLogisticalTransporter extends PartTransmitter implements ILogisticalTransporter { - public static TransmitterIcons transporterIcons = new TransmitterIcons(5, 8); + public Tier.TransporterTier tier = TransporterTier.BASIC; + + public static TransmitterIcons transporterIcons = new TransmitterIcons(8, 16); - public static final int SPEED = 5; + public int speed = 5; public EnumColor color; @@ -56,17 +59,24 @@ public class PartLogisticalTransporter extends PartTransmitter public HashList transit = new HashList(); public Set needsSync = new HashSet(); + + public PartLogisticalTransporter(Tier.TransporterTier transporterTier) + { + tier = transporterTier; + } + + protected PartLogisticalTransporter() {} @Override public String getType() { - return "mekanism:logistical_transporter"; + return "mekanism:logistical_transporter_" + tier.name().toLowerCase(); } @Override public TransmitterType getTransmitter() { - return TransmitterType.LOGISTICAL_TRANSPORTER; + return tier.type; } @Override @@ -77,9 +87,12 @@ public class PartLogisticalTransporter extends PartTransmitter public static void registerIcons(IIconRegister register) { - transporterIcons.registerCenterIcons(register, new String[] {"LogisticalTransporter", "RestrictiveTransporter", "DiversionTransporter", "LogisticalTransporterGlass", "LogisticalTransporterGlassColored"}); - transporterIcons.registerSideIcons(register, new String[] {"LogisticalTransporterVertical", "LogisticalTransporterHorizontal", "RestrictiveTransporterVertical", "RestrictiveTransporterHorizontal", - "LogisticalTransporterVerticalGlass", "LogisticalTransporterVerticalGlassColored", "LogisticalTransporterHorizontalGlass", "LogisticalTransporterHorizontalGlassColored"}); + transporterIcons.registerCenterIcons(register, new String[] {"LogisticalTransporterBasic", "LogisticalTransporterAdvanced", "LogisticalTransporterElite", "LogisticalTransporterUltimate", "RestrictiveTransporter", + "DiversionTransporter", "LogisticalTransporterGlass", "LogisticalTransporterGlassColored"}); + transporterIcons.registerSideIcons(register, new String[] {"LogisticalTransporterVerticalBasic", "LogisticalTransporterVerticalAdvanced", "LogisticalTransporterVerticalElite", "LogisticalTransporterVerticalUltimate", + "LogisticalTransporterHorizontalBasic", "LogisticalTransporterHorizontalAdvanced", "LogisticalTransporterHorizontalElite", "LogisticalTransporterHorizontalUltimate", "RestrictiveTransporterVertical", + "RestrictiveTransporterHorizontal", "LogisticalTransporterVerticalGlass", "LogisticalTransporterVerticalGlassColored", "LogisticalTransporterHorizontalGlass", "LogisticalTransporterHorizontalGlassColored", + "DiversionTransporterVertical", "DiversionTransporterHorizontal"}); } @Override @@ -119,19 +132,19 @@ public class PartLogisticalTransporter extends PartTransmitter @Override public IIcon getCenterIcon(boolean opaque) { - return transporterIcons.getCenterIcon(opaque ? 0 : (color != null ? 4 : 3)); + return transporterIcons.getCenterIcon(opaque ? tier.ordinal() : (color != null ? 7 : 6)); } @Override public IIcon getSideIcon(boolean opaque) { - return transporterIcons.getSideIcon(opaque ? 0 : (color != null ? 5 : 4)); + return transporterIcons.getSideIcon(opaque ? tier.ordinal() : (color != null ? 11 : 10)); } @Override public IIcon getSideIconRotated(boolean opaque) { - return transporterIcons.getSideIcon(opaque ? 1 : (color != null ? 7 : 6)); + return transporterIcons.getSideIcon(opaque ? 4+tier.ordinal() : (color != null ? 13 : 12)); } @Override @@ -157,7 +170,7 @@ public class PartLogisticalTransporter extends PartTransmitter { if(stack != null) { - stack.progress = Math.min(100, stack.progress+SPEED); + stack.progress = Math.min(100, stack.progress+tier.speed); } } } @@ -177,7 +190,7 @@ public class PartLogisticalTransporter extends PartTransmitter } } - stack.progress += SPEED; + stack.progress += tier.speed; if(stack.progress > 100) { @@ -337,7 +350,7 @@ public class PartLogisticalTransporter extends PartTransmitter if(tile instanceof IInventory) { IInventory inv = (IInventory)tile; - InvStack stack = InventoryUtils.takeTopItem(inv, side.ordinal()); + InvStack stack = InventoryUtils.takeTopItem(inv, side.ordinal(), tier.pullAmount); if(stack != null && stack.getStack() != null) { @@ -595,6 +608,8 @@ public class PartLogisticalTransporter extends PartTransmitter public void load(NBTTagCompound nbtTags) { super.load(nbtTags); + + tier = TransporterTier.values()[nbtTags.getInteger("tier")]; if(nbtTags.hasKey("color")) { @@ -619,6 +634,8 @@ public class PartLogisticalTransporter extends PartTransmitter public void save(NBTTagCompound nbtTags) { super.save(nbtTags); + + nbtTags.setInteger("tier", tier.ordinal()); if(color != null) { diff --git a/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java b/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java index a1fd6441e..0c073a54c 100644 --- a/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java +++ b/src/main/java/mekanism/common/multipart/PartMechanicalPipe.java @@ -29,6 +29,7 @@ import codechicken.lib.vec.Vector3; public class PartMechanicalPipe extends PartTransmitter implements IFluidHandler { public Tier.PipeTier tier; + /** The fake tank used for fluid transfer calculations. */ public FluidTank dummyTank = new FluidTank(FluidContainerRegistry.BUCKET_VOLUME); diff --git a/src/main/java/mekanism/common/multipart/PartRestrictiveTransporter.java b/src/main/java/mekanism/common/multipart/PartRestrictiveTransporter.java index 0c70f9c59..b80a14edf 100644 --- a/src/main/java/mekanism/common/multipart/PartRestrictiveTransporter.java +++ b/src/main/java/mekanism/common/multipart/PartRestrictiveTransporter.java @@ -20,19 +20,19 @@ public class PartRestrictiveTransporter extends PartLogisticalTransporter @Override public IIcon getCenterIcon(boolean opaque) { - return transporterIcons.getCenterIcon(1); + return transporterIcons.getCenterIcon(4); } @Override public IIcon getSideIcon(boolean opaque) { - return transporterIcons.getSideIcon(2); + return transporterIcons.getSideIcon(8); } @Override public IIcon getSideIconRotated(boolean opaque) { - return transporterIcons.getSideIcon(3); + return transporterIcons.getSideIcon(9); } @Override diff --git a/src/main/java/mekanism/common/multipart/PartSidedPipe.java b/src/main/java/mekanism/common/multipart/PartSidedPipe.java index 63972ca25..a0f0d1095 100644 --- a/src/main/java/mekanism/common/multipart/PartSidedPipe.java +++ b/src/main/java/mekanism/common/multipart/PartSidedPipe.java @@ -111,8 +111,14 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, return new PartMechanicalPipe(Tier.PipeTier.ULTIMATE); case PRESSURIZED_TUBE: return new PartPressurizedTube(); - case LOGISTICAL_TRANSPORTER: - return new PartLogisticalTransporter(); + case LOGISTICAL_TRANSPORTER_BASIC: + return new PartLogisticalTransporter(Tier.TransporterTier.BASIC); + case LOGISTICAL_TRANSPORTER_ADVANCED: + return new PartLogisticalTransporter(Tier.TransporterTier.ADVANCED); + case LOGISTICAL_TRANSPORTER_ELITE: + return new PartLogisticalTransporter(Tier.TransporterTier.ELITE); + case LOGISTICAL_TRANSPORTER_ULTIMATE: + return new PartLogisticalTransporter(Tier.TransporterTier.ULTIMATE); case RESTRICTIVE_TRANSPORTER: return new PartRestrictiveTransporter(); case DIVERSION_TRANSPORTER: diff --git a/src/main/java/mekanism/common/multipart/TransmitterType.java b/src/main/java/mekanism/common/multipart/TransmitterType.java index 699dad90f..dc3085e21 100644 --- a/src/main/java/mekanism/common/multipart/TransmitterType.java +++ b/src/main/java/mekanism/common/multipart/TransmitterType.java @@ -15,9 +15,12 @@ public enum TransmitterType MECHANICAL_PIPE_ELITE("EliteMechanicalPipe", Size.LARGE, TransmissionType.FLUID, PartMechanicalPipe.pipeIcons, false, 0, 0), MECHANICAL_PIPE_ULTIMATE("UltimateMechanicalPipe", Size.LARGE, TransmissionType.FLUID, PartMechanicalPipe.pipeIcons, false, 0, 0), PRESSURIZED_TUBE("PressurizedTube", Size.SMALL, TransmissionType.GAS, PartPressurizedTube.tubeIcons, false, 0, 0), - LOGISTICAL_TRANSPORTER("LogisticalTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 0, 0, 3, 4), - RESTRICTIVE_TRANSPORTER("RestrictiveTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, false, 1, 2), - DIVERSION_TRANSPORTER("DiversionTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 2, 0, 3, 4), + LOGISTICAL_TRANSPORTER_BASIC("BasicLogisticalTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 0, 0, 6, 10), + LOGISTICAL_TRANSPORTER_ADVANCED("AdvancedLogisticalTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 1, 1, 6, 10), + LOGISTICAL_TRANSPORTER_ELITE("EliteLogisticalTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 2, 2, 6, 10), + LOGISTICAL_TRANSPORTER_ULTIMATE("UltimateLogisticalTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 3, 3, 6, 10), + RESTRICTIVE_TRANSPORTER("RestrictiveTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, false, 4, 8), + DIVERSION_TRANSPORTER("DiversionTransporter", Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 5, 14, 6, 10), HEAT_TRANSMITTER("HeatTransmitter", Size.SMALL, TransmissionType.HEAT, PartHeatTransmitter.heatIcons, false, 0, 0); private String unlocalizedName; diff --git a/src/main/java/mekanism/common/util/InventoryUtils.java b/src/main/java/mekanism/common/util/InventoryUtils.java index c6665e0f7..684a6d5e7 100644 --- a/src/main/java/mekanism/common/util/InventoryUtils.java +++ b/src/main/java/mekanism/common/util/InventoryUtils.java @@ -197,7 +197,7 @@ public final class InventoryUtils return inSlot.isItemEqual(toInsert) && ItemStack.areItemStackTagsEqual(inSlot, toInsert); } - public static InvStack takeTopItem(IInventory inventory, int side) + public static InvStack takeTopItem(IInventory inventory, int side, int amount) { inventory = checkChestInv(inventory); @@ -208,7 +208,7 @@ public final class InventoryUtils if(inventory.getStackInSlot(i) != null && inventory.getStackInSlot(i).stackSize > 0) { ItemStack toSend = inventory.getStackInSlot(i).copy(); - toSend.stackSize = 1; + toSend.stackSize = Math.min(amount, toSend.stackSize); return new InvStack(inventory, i, toSend); } @@ -227,7 +227,7 @@ public final class InventoryUtils if(sidedInventory.getStackInSlot(slotID) != null && sidedInventory.getStackInSlot(slotID).stackSize > 0) { ItemStack toSend = sidedInventory.getStackInSlot(slotID).copy(); - toSend.stackSize = 1; + toSend.stackSize = Math.min(amount, toSend.stackSize); if(sidedInventory.canExtractItem(slotID, toSend, ForgeDirection.OPPOSITES[side])) { diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 074b0bc07..0883a1899 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -169,7 +169,10 @@ item.MultipartTransmitter.BasicMechanicalPipe.name=Basic Mechanical Pipe item.MultipartTransmitter.AdvancedMechanicalPipe.name=Advanced Mechanical Pipe item.MultipartTransmitter.EliteMechanicalPipe.name=Elite Mechanical Pipe item.MultipartTransmitter.UltimateMechanicalPipe.name=Ultimate Mechanical Pipe -item.MultipartTransmitter.LogisticalTransporter.name=Logistical Transporter +item.MultipartTransmitter.BasicLogisticalTransporter.name=Basic Logistical Transporter +item.MultipartTransmitter.AdvancedLogisticalTransporter.name=Advanced Logistical Transporter +item.MultipartTransmitter.EliteLogisticalTransporter.name=Elite Logistical Transporter +item.MultipartTransmitter.UltimateLogisticalTransporter.name=Ultimate Logistical Transporter item.MultipartTransmitter.RestrictiveTransporter.name=Restrictive Transporter item.MultipartTransmitter.DiversionTransporter.name=Diversion Transporter diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontal.png b/src/main/resources/assets/mekanism/textures/blocks/models/DiversionTransporterHorizontal.png similarity index 100% rename from src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontal.png rename to src/main/resources/assets/mekanism/textures/blocks/models/DiversionTransporterHorizontal.png diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVertical.png b/src/main/resources/assets/mekanism/textures/blocks/models/DiversionTransporterVertical.png similarity index 100% rename from src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVertical.png rename to src/main/resources/assets/mekanism/textures/blocks/models/DiversionTransporterVertical.png diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporter.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterAdvanced.png similarity index 65% rename from src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporter.png rename to src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterAdvanced.png index 0a759c11916dfa49031f52584d95826f66b26b4d..76a3eb935a35d21d10379139c1455b0bb0b6d4e8 100644 GIT binary patch delta 503 zcmV)z##m8ZttgA`Jru2V=+_2i*c(wwNtR_^ z*L5vT(+D)ntha6J?SNO7rC5OHc|JtB)u!5M3};nUc`y)w!&rX+PC>u5)>r8l+JXt5 zqA0||-E=mWP{Qwa5E?U#QQ zz}(=ok(O9D+#!Lv!CUnW2w)T4m~7?$p`QT(TH{knCBy=ee*Qb;|LpR$M2Us7ArM&W z^x5%&K)f!`I$M7_F2)K3mJZ(9t|QZPpxzqbp1&9?5V&WUqV4qrQbak0fu+#=CZ~+{ zZ1)7Jy4e$B*0(3{_MV47;jHz>odCxrMH{6BH=EP~On*x%y8|>*oLf delta 513 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 FV1m%H@T33$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalAdvanced.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalAdvanced.png new file mode 100644 index 0000000000000000000000000000000000000000..679ae9974e0b575cc44d5eba5991f702551e5294 GIT binary patch literal 1162 zcmV;51a4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p znRx?zXLrGT#D&)Xcs_TaC!hiBE1-Y^3Mim}0tzUg0554Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zNQdsgg~U?EtB#J zfNd;%=nnx~Pr2Bu>NVkw?iR+IJ<{|)e9S%79mq!j0R#|0009ILKmdWu1$><)-G-i- h(gONz7!lGh`~YlR2*J|Xbl3m@002ovPDHLkV1jReH#z_S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalElite.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalElite.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7fcec5570fbd56a41c9680bbc1b86637ebc8f4 GIT binary patch literal 1163 zcmV;61a$j}P)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p z7>3h)B>Fv;#lml3`V dPgS8G;R6UT3K&pE9TNZm002ovPDHLkV1kOLFR}mt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalUltimate.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterHorizontalUltimate.png new file mode 100644 index 0000000000000000000000000000000000000000..01b31961a836d5ffec4dc2cc231b2729c50bd766 GIT binary patch literal 1169 zcmV;C1aA9@P)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p z4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p z8XcltM*M4=?kK zap&ga!j{}sa7^s;`(4)SwRYU%nZoGbzMk>;quJ}@M^6?Yt~?eHjT|HKPn2_OZpQYs@0LWc2oXS%>Dds|hpd|mu&tX2crD;zShvUQJ#v$YayGX)jkz_$5Ae^; zDQD_-yM<7p*UIF?@A~BO=-aYzb2@B9kqAk{$udojb{coRfZ&_L1D!y5YT@Se2k#{; Uz3&_scmMzZ07*qoM6N<$f>f*oVgLXD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalAdvanced.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalAdvanced.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecca65e7a8f89b74ca0ae00592a64b0e8ba4043 GIT binary patch literal 1165 zcmV;81akX{P)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zd3hO_Xk-u3#*R8*Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q fLtr!nMneDqExHQBpCHJ500000NkvXXu0mjfCpI!A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalBasic.png b/src/main/resources/assets/mekanism/textures/blocks/models/LogisticalTransporterVerticalBasic.png new file mode 100644 index 0000000000000000000000000000000000000000..9d9ec842317986718915e0220c4a2ad876ef52b7 GIT binary patch literal 1165 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 O0000