diff --git a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java index 19cbe41ad..ce2c2d870 100644 --- a/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java +++ b/common/mekanism/client/render/tileentity/RenderLogisticalTransporter.java @@ -1,6 +1,5 @@ package mekanism.client.render.tileentity; -import mekanism.api.Object3D; import mekanism.client.model.ModelTransmitter; import mekanism.client.model.ModelTransmitter.Size; import mekanism.client.model.ModelTransporterBox; @@ -72,18 +71,10 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer { GL11.glPushMatrix(); entityItem.setEntityItemStack(stack.itemStack); - Object3D offset = new Object3D(0, 0, 0).step(ForgeDirection.getOrientation(stack.getSide(tileEntity))); - float itemFix = 0; + float[] pos = TransporterUtils.getStackPosition(tileEntity, stack); - if(stack.itemStack.itemID >= 256) - { - itemFix = 0.1F; - } - - double progress = ((double)stack.progress / 100D) - 0.5; - - renderer.doRenderItem(entityItem, x + 0.5 + offset.xCoord*progress, y + 0.5 + offset.yCoord*progress - entityItem.yOffset - itemFix, z + 0.5 + offset.zCoord*progress, 0, 0); + renderer.doRenderItem(entityItem, x + pos[0], y + pos[1] - entityItem.yOffset, z + pos[2], 0, 0); GL11.glPopMatrix(); if(stack.color != null) @@ -93,7 +84,7 @@ public class RenderLogisticalTransporter extends TileEntitySpecialRenderer MekanismRenderer.glowOn(); GL11.glDisable(GL11.GL_CULL_FACE); GL11.glColor4f(stack.color.getColor(0), stack.color.getColor(1), stack.color.getColor(2), 1.0F); - GL11.glTranslatef((float)(x + 0.5 + offset.xCoord*progress), (float)(y + 0.5 + offset.yCoord*progress - entityItem.yOffset - 0.1F), (float)(z + 0.5 + offset.zCoord*progress)); + GL11.glTranslatef((float)(x + pos[0]), (float)(y + pos[1] - entityItem.yOffset - (stack.itemStack.itemID < 256 ? 0.1 : 0)), (float)(z + pos[2])); modelBox.render(0.0625F); MekanismRenderer.glowOff(); GL11.glPopMatrix(); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index b9f3a615f..6f863a2aa 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -412,6 +412,9 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(WalkieTalkie), new Object[] { " O", "SCS", " S ", Character.valueOf('O'), "ingotOsmium", Character.valueOf('S'), "ingotSteel", Character.valueOf('C'), "circuitBasic" })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(Transmitter, 8, 3), new Object[] { + "S S", Character.valueOf('S'), "ingotSteel" + })); CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(MachineBlock, 1, 15), new Object[] { "IPI", "ICI", "III", Character.valueOf('I'), Item.ingotIron, Character.valueOf('P'), Block.pistonBase, Character.valueOf('C'), "circuitBasic" })); diff --git a/common/mekanism/common/block/BlockTransmitter.java b/common/mekanism/common/block/BlockTransmitter.java index 1615dab6c..a965161bf 100644 --- a/common/mekanism/common/block/BlockTransmitter.java +++ b/common/mekanism/common/block/BlockTransmitter.java @@ -16,7 +16,7 @@ import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.tileentity.TileEntityMechanicalPipe; import mekanism.common.tileentity.TileEntityPressurizedTube; import mekanism.common.tileentity.TileEntityUniversalCable; -import mekanism.common.transporter.TransporterPathfinder; +import mekanism.common.transporter.TransporterStack; import mekanism.common.util.CableUtils; import mekanism.common.util.TransporterUtils; import net.minecraft.block.Block; @@ -376,6 +376,24 @@ public class BlockTransmitter extends Block } } + @Override + public void breakBlock(World world, int x, int y, int z, int i1, int i2) + { + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + + if(!world.isRemote && tileEntity instanceof TileEntityLogisticalTransporter) + { + TileEntityLogisticalTransporter transporter = (TileEntityLogisticalTransporter)world.getBlockTileEntity(x, y, z); + + for(TransporterStack stack : transporter.transit) + { + TransporterUtils.drop(transporter, stack); + } + } + + super.breakBlock(world, x, y, z, i1, i2); + } + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int facing, float playerX, float playerY, float playerZ) { diff --git a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java index 6521b2fc1..075739e36 100644 --- a/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java +++ b/common/mekanism/common/tileentity/TileEntityLogisticalTransporter.java @@ -189,7 +189,7 @@ public class TileEntityLogisticalTransporter extends TileEntity implements ITile if(!stack.hasPath()) { - //drop + TransporterUtils.drop(this, stack); return false; } diff --git a/common/mekanism/common/util/TransporterUtils.java b/common/mekanism/common/util/TransporterUtils.java index 7a59e9429..05abd4b8c 100644 --- a/common/mekanism/common/util/TransporterUtils.java +++ b/common/mekanism/common/util/TransporterUtils.java @@ -2,13 +2,14 @@ package mekanism.common.util; import java.util.ArrayList; import java.util.Arrays; -import java.util.Map; import mekanism.api.EnumColor; import mekanism.api.Object3D; import mekanism.api.transmitters.ITransmitter; import mekanism.common.tileentity.TileEntityLogisticalTransporter; import mekanism.common.transporter.SlotInfo; +import mekanism.common.transporter.TransporterStack; +import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -363,6 +364,33 @@ public final class TransporterUtils return colors.get(colors.indexOf(color)+1); } + public static void drop(TileEntityLogisticalTransporter tileEntity, TransporterStack stack) + { + float[] pos = TransporterUtils.getStackPosition(tileEntity, stack); + EntityItem entityItem = new EntityItem(tileEntity.worldObj, tileEntity.xCoord + pos[0], tileEntity.yCoord + pos[1], tileEntity.zCoord + pos[2], stack.itemStack); + + entityItem.motionX = 0; + entityItem.motionY = 0; + entityItem.motionZ = 0; + + tileEntity.worldObj.spawnEntityInWorld(entityItem); + } + + public static float[] getStackPosition(TileEntityLogisticalTransporter tileEntity, TransporterStack stack) + { + Object3D offset = new Object3D(0, 0, 0).step(ForgeDirection.getOrientation(stack.getSide(tileEntity))); + float progress = ((float)stack.progress / 100F) - 0.5F; + + float itemFix = 0; + + if(stack.itemStack.itemID >= 256) + { + itemFix = 0.1F; + } + + return new float[] {0.5F + offset.xCoord*progress, 0.5F + offset.yCoord*progress - itemFix, 0.5F + offset.zCoord*progress}; + } + public static void incrementColor(TileEntityLogisticalTransporter tileEntity) { if(tileEntity.color == null)