From 4242c45a9f83b2af48e0073165b914504f2da122 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sun, 28 Oct 2012 19:54:55 +0800 Subject: [PATCH] Made manipulator output from inventory --- .../{injector.png => manipulator1.png} | Bin .../assemblyline/textures/manipulator2.png | Bin 0 -> 3665 bytes .../textures/{ejector.png => sorter.png} | Bin src/common/assemblyline/AssemblyLine.java | 10 +- .../assemblyline/belts/BlockConveyorBelt.java | 14 +- .../belts/TileEntityConveyorBelt.java | 1 - ...{BlockInteraction.java => BlockMulti.java} | 77 +++++++- .../machines/ItemBlockInteraction.java | 58 ------ .../assemblyline/machines/ItemBlockMulti.java | 25 +++ .../machines/TileEntityManipulator.java | 168 ++++++++++++++++-- .../machines/TileEntitySorter.java | 5 +- .../crafter/TileEntityAutoCrafter.java | 3 - src/minecraft/assemblyline/ALClientProxy.java | 6 +- .../assemblyline/gui/GuiAutoCrafting.java | 1 - .../assemblyline/model/ModelConveyorBelt.java | 1 - .../assemblyline/model/ModelDropBox.java | 1 - .../assemblyline/model/ModelManipulator.java | 1 - .../assemblyline/model/ModelSorter.java | 1 - .../assemblyline/render/RenderHelper.java | 8 +- .../render/RenderManipulator.java | 14 +- .../assemblyline/render/RenderSorter.java | 2 +- 21 files changed, 288 insertions(+), 108 deletions(-) rename resources/assemblyline/textures/{injector.png => manipulator1.png} (100%) create mode 100644 resources/assemblyline/textures/manipulator2.png rename resources/assemblyline/textures/{ejector.png => sorter.png} (100%) rename src/common/assemblyline/machines/{BlockInteraction.java => BlockMulti.java} (70%) delete mode 100644 src/common/assemblyline/machines/ItemBlockInteraction.java create mode 100644 src/common/assemblyline/machines/ItemBlockMulti.java diff --git a/resources/assemblyline/textures/injector.png b/resources/assemblyline/textures/manipulator1.png similarity index 100% rename from resources/assemblyline/textures/injector.png rename to resources/assemblyline/textures/manipulator1.png diff --git a/resources/assemblyline/textures/manipulator2.png b/resources/assemblyline/textures/manipulator2.png new file mode 100644 index 0000000000000000000000000000000000000000..f14fe55e149f402628e4cff8dd02024c15971da2 GIT binary patch literal 3665 zcmX|EXHXN`5ml)EQCjyyRTlf-H& zPM1J4LAk{DIyv%9TteUReDE9BuZ;&k2G450sjXD(Vrzyd@l9b;XlRz278zt3<0(;_*fzN zset#AQ=ArXxd|$U?j&dfD=EO@Y|xi(`0OtL|M$W`x zHC&jR6d3oj*Vne7F868kA0H$-S2JqVg8a29%U!QO+GrO%tDl@)URs*C)d9Cf^;w3V zq1ztdEl=H!!cm>?nxc(`3cV$e}}$( zy_FctqA9a?vQ|#gu1q0+Jp8$6=e5yu$AvlZV{)}QdGP*`8YDPXqU4?f`7Z-uCM!Su z!T|s~4W6xEM5xFyE|K#?{^#53r@Hyq0LEGWxidFd#Em<_@?3@_6b%3$yDsw(T9AkdQj#>LEhdt7E^wMRCzsV zvjilsg&xn2st=h`>|LGDsW*Fo%+r&YMqTL_5!I%uU+8KP^(Bg2Q97?_haLT-b5hvy zbBBFCa;YXM6s!!FyD(0rs3E$g@T(k@vK?+xl3nfa4>!cA(;WIg@K?~4cX7SHQ$gMk zzwa>g!5_*Tp^c|jfcnFEQCBqetPHJ;C-h2qFAK_DoT65wCXX_06Xs7VG59F-`QlLr zhrNt+td*X)z*pv!OE9M3I7Ek{AaguIM!5bNnf`~j$Wi7|oly@nfi>~cTsb{1fwbN! zN7rgfr5ED7*L$LuuuJVrvP;}cd^@%@SbGicw}<8nB4&M$ZgDO%Ez2!aIAzIbTD-|I zn<*(kUX)L2AFRlm;{XVR}2XAWDA z_OI!#X0DR&`P0$Iuts*rp+z`zIVd^MocyJ5Qt;;m`^hX;#|UA(jooHYUBe6IB6F^?nUJA^(APKG=Y zYsfm~X-HHpD=kn$$lj8*tTEet;jB)%nB{%=($AQBMWi@$H!NY6Wm|MXl)FgIuwL5f zu4`FFW`n}*$k1B0&zzh=wls!D&8S;<|={gyjdXJ->&BaSP0f{ZCvkuC$Kx{qh6_u?pvo z3q_&r+0k{KRqb18O=+Q@L;pHerKFFYWGLsc;R*Bo=)MYE&peIs|{65|b?_Dg1}N#=5Q&Ga-a-SXS_zBeByE*m}4XJN;@v?v-eswXE-Odk^Bf>GFs=?W=St*SU%?6NE_wx^_hX<^W5z zto-)AuF${i0JY7o_Djv@)uP&>isG!yto4HdMSNXPUB5}YXWoP8IYhX?x#M}z`3NY+ zT!Wy=<0CX9Y{`xfgF^UPlGT-oPQR)rH#L*;>or+5Q=V2nU2d)9bLsi}StZ}WN){oN z@Q@+;cG&9IVM^2wRAPG=op5w)v}KHXvR9lH*NAkcy#L5F!go&Vw^oMMY%W^bMCqNx zEqO7uGRa3OQ;MJEKC5?0I$IBnTVbvA-3%@(Ns3h|c(^ssoow#LE?^gE7lYZeU_JM| z0t*Ojd(p*grIO6z${8AlamF`Z{G-VvR>GEaZRe8zwPc#WHl8*#KWs!{ByIw6SL}-M zj-HrN(DT1j8|4E9J7o*Sm+Pa1OP@6w(i_g?D(A7~JmGbhQB`h|j(nc_%o|?DXOxCR zucLoBKk2VLdN!osXOQ zzqE<4%s~-iLnIDS|E5LdQ=?OHFJbVeI`S=Y5BVFZur)eUi~4rxF|x%S-1tlG?{T7S z zp0ksqlWU%HY-?}(*uu(1|YbD&tEz73;uTyU5;$Q)^Gh($G6YN!WC3Xqe>D zv>ov^E_lU(F!zYjbNe%s-~6cddE&~=#+!t@JD>b^s)@^&EI(Q1yi$CnUb~aep;rPZk!bsLgLFP_oT8n!~;psYl zgYzA+tF7xwb8mpG^!>d%$D6JG)BZf$Z{`?HmO^;LMb2H0KJ1$h7ayl_rlp-j$+LD( z9AqVkq?)I- zMp;==cxcGmyai)2>8=~SJ@a0xZy_)Hl`BSLueemE4?vhiM8KGwbdUrkAh!cLj3h?~ zI7l&OZeaJF;`+}Ksn0Z2vv)aT_%@O|ZzQ`x)7?P$GOQI!O8Vl4*|;7aSbM&K#z3Sr zAQY=HD6cWO_}V)jN3zaG96rs%PQ|$Ij*Ni$Ed^C`-CUoA^<#P_+01Uk3zc#KES{K& zBNcwoNX)T>+>V7PoN+rO_0O!-u{CVYZsLv|-&yQVxZ5ekn4_g=%MF0xp3x0fC{-W~v4?KghhA$WYXMEP$TNuCnl1JBcif zlm_nl@V3&4bpTvc`@2z;TWB7v_`AbomY6tD;TR170djQz?LME3{O#w=tH;|FrmG5Q z%;K@Fe@OW5oCBcK0MEHF-R+NC-=Lyf7w2hycE0MG>2s9FkENY1ZJUxK?~(r#a6?{W zS6-t}l$6M-cBM)g@KHw3ej5tCOz~-v1w4l4o9r+6YC7nlAa(|yegZFBj{l1e@PD)i z6t|s04t(1V*tBygVmz7jC8!=@+UW7Zv8((+gaT6vmlcd=5WKY)_Jw zbYAO4vkJ=LZ6xl?pOi{${nx{(g-8VQoymtUMv>mu`4^v3Zw^qq^Zy*=^@Fl9V^AE`XXtM4in9cy1+<#J z;+2}e$=vwK)k;rX^d&<`7l;3b23MM+Xr|*?l>~JC7sUP!_yR5%LR_&~zYBhXC=QI$ zRZ@%p5|AR1!UGJ1mmhqcBD8QS)kBN{Ody}?q$RK+;Q?h`2u~qa*#BZ2B#R6K00fW$D4-%`@Pc8g z85_pfqPFe#GslmYl!sJ?cqlM#d$r+ET07G9KMyZXXfbmA2{r!w4gXuJr4_~i98EP! Tjq$33fOPb=jkT)ac2EBUX2_Y1 literal 0 HcmV?d00001 diff --git a/resources/assemblyline/textures/ejector.png b/resources/assemblyline/textures/sorter.png similarity index 100% rename from resources/assemblyline/textures/ejector.png rename to resources/assemblyline/textures/sorter.png diff --git a/src/common/assemblyline/AssemblyLine.java b/src/common/assemblyline/AssemblyLine.java index a24e8877..3c8a1d5f 100644 --- a/src/common/assemblyline/AssemblyLine.java +++ b/src/common/assemblyline/AssemblyLine.java @@ -12,11 +12,11 @@ import universalelectricity.core.UEConfig; import universalelectricity.prefab.network.PacketManager; import assemblyline.belts.BlockConveyorBelt; import assemblyline.belts.TileEntityConveyorBelt; -import assemblyline.machines.BlockInteraction; -import assemblyline.machines.ItemBlockInteraction; +import assemblyline.machines.BlockMulti; +import assemblyline.machines.BlockMulti.MachineType; +import assemblyline.machines.ItemBlockMulti; import assemblyline.machines.TileEntityManipulator; import assemblyline.machines.TileEntitySorter; -import assemblyline.machines.BlockInteraction.MachineType; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -52,7 +52,7 @@ public class AssemblyLine public static final int BLOCK_ID_PREFIX = 3003; public static final Block blockConveyorBelt = new BlockConveyorBelt(UEConfig.getBlockConfigID(CONFIGURATION, "Conveyor Belt", BLOCK_ID_PREFIX)); - public static final Block blockInteraction = new BlockInteraction(UEConfig.getBlockConfigID(CONFIGURATION, "Machine", BLOCK_ID_PREFIX+1)); + public static final Block blockInteraction = new BlockMulti(UEConfig.getBlockConfigID(CONFIGURATION, "Machine", BLOCK_ID_PREFIX+1)); @PreInit public void preInit(FMLPreInitializationEvent event) @@ -60,7 +60,7 @@ public class AssemblyLine instance = this; NetworkRegistry.instance().registerGuiHandler(this, this.proxy); GameRegistry.registerBlock(blockConveyorBelt); - GameRegistry.registerBlock(blockInteraction, ItemBlockInteraction.class); + GameRegistry.registerBlock(blockInteraction, ItemBlockMulti.class); proxy.preInit(); } diff --git a/src/common/assemblyline/belts/BlockConveyorBelt.java b/src/common/assemblyline/belts/BlockConveyorBelt.java index 884ab6d3..663fda0f 100644 --- a/src/common/assemblyline/belts/BlockConveyorBelt.java +++ b/src/common/assemblyline/belts/BlockConveyorBelt.java @@ -3,7 +3,6 @@ package assemblyline.belts; import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Material; import net.minecraft.src.MathHelper; import net.minecraft.src.TileEntity; import net.minecraft.src.World; @@ -23,11 +22,20 @@ public class BlockConveyorBelt extends BlockMachine this.setBlockBounds(0, 0, 0, 1, 0.3f, 1); this.setCreativeTab(CreativeTabs.tabTransport); } + @Override public void onBlockPlacedBy(World par1World, int x, int y, int z, EntityLiving par5EntityLiving) { int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - par1World.setBlockAndMetadataWithNotify(x, y, z, this.blockID, angle); + par1World.setBlockMetadataWithNotify(x, y, z, angle); + /* + switch (angle) + { + case 0: par1World.setBlockMetadataWithNotify(x, y, z, 0); break; + case 1: par1World.setBlockMetadataWithNotify(x, y, z, 3); break; + case 2: par1World.setBlockMetadataWithNotify(x, y, z, 1); break; + case 3: par1World.setBlockMetadataWithNotify(x, y, z, 2); break; + } */ } @Override @@ -37,7 +45,7 @@ public class BlockConveyorBelt extends BlockMachine if (metadata >= 0 && metadata < 4) { - if (metadata == 3) + if (metadata >= 3) { par1World.setBlockAndMetadataWithNotify(x, y, z, this.blockID, 0); return true; diff --git a/src/common/assemblyline/belts/TileEntityConveyorBelt.java b/src/common/assemblyline/belts/TileEntityConveyorBelt.java index 7e7d1f2a..4d7f6281 100644 --- a/src/common/assemblyline/belts/TileEntityConveyorBelt.java +++ b/src/common/assemblyline/belts/TileEntityConveyorBelt.java @@ -8,7 +8,6 @@ import net.minecraft.src.Entity; import net.minecraft.src.EntityItem; import net.minecraft.src.EntityPlayer; import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; diff --git a/src/common/assemblyline/machines/BlockInteraction.java b/src/common/assemblyline/machines/BlockMulti.java similarity index 70% rename from src/common/assemblyline/machines/BlockInteraction.java rename to src/common/assemblyline/machines/BlockMulti.java index de509d11..14225083 100644 --- a/src/common/assemblyline/machines/BlockInteraction.java +++ b/src/common/assemblyline/machines/BlockMulti.java @@ -1,12 +1,19 @@ package assemblyline.machines; +import java.util.List; + +import cpw.mods.fml.common.network.PacketDispatcher; + import net.minecraft.src.AxisAlignedBB; import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; import net.minecraft.src.Material; +import net.minecraft.src.MathHelper; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; +import universalelectricity.implement.IRedstoneReceptor; import universalelectricity.prefab.BlockMachine; import assemblyline.AssemblyLine; import assemblyline.render.RenderHelper; @@ -18,7 +25,7 @@ import assemblyline.render.RenderHelper; * @author Darkguardsman, Calclavia * */ -public class BlockInteraction extends BlockMachine +public class BlockMulti extends BlockMachine { public static enum MachineType { @@ -91,17 +98,19 @@ public class BlockInteraction extends BlockMachine } } - public BlockInteraction(int id) + public BlockMulti(int id) { super("Interaction Machine", id, Material.iron); this.setCreativeTab(CreativeTabs.tabTransport); } + @Override public int damageDropped(int metadata) { return MachineType.get(metadata).metadata; } + @Override public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) { if (!par1World.isRemote) @@ -113,6 +122,30 @@ public class BlockInteraction extends BlockMachine return true; } + @Override + public void onBlockPlacedBy(World par1World, int x, int y, int z, EntityLiving par5EntityLiving) + { + int metadata = par1World.getBlockMetadata(x, y, z); + + int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + + switch (angle) + { + case 0: + par1World.setBlockMetadataWithNotify(x, y, z, metadata + 0); + break; + case 1: + par1World.setBlockMetadataWithNotify(x, y, z, metadata + 3); + break; + case 2: + par1World.setBlockMetadataWithNotify(x, y, z, metadata + 1); + break; + case 3: + par1World.setBlockMetadataWithNotify(x, y, z, metadata + 2); + break; + } + } + @Override public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) { @@ -129,9 +162,15 @@ public class BlockInteraction extends BlockMachine if (MachineType.get(metadata) == MachineType.MANIPULATOR) { - ((TileEntityManipulator) par1World.getBlockTileEntity(x, y, z)).isWrenchedToOutput = !((TileEntityManipulator) par1World.getBlockTileEntity(x, y, z)).isWrenchedToOutput; + TileEntityManipulator tileEntity = (TileEntityManipulator)par1World.getBlockTileEntity(x, y, z); + tileEntity.isOutput = !tileEntity.isOutput; + if (!par1World.isRemote) - par5EntityPlayer.addChatMessage("Manipulator Output: " + ((TileEntityManipulator) par1World.getBlockTileEntity(x, y, z)).isWrenchedToOutput); + { + par5EntityPlayer.addChatMessage("Manipulator Output: " + tileEntity.isOutput); + + PacketDispatcher.sendPacketToAllPlayers(tileEntity.getDescriptionPacket()); + } return true; } else @@ -140,6 +179,22 @@ public class BlockInteraction extends BlockMachine } } + @Override + public void onNeighborBlockChange(World par1World, int x, int y, int z, int side) + { + super.onNeighborBlockChange(par1World, x, y, z, side); + + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if (tileEntity instanceof IRedstoneReceptor) + { + if (par1World.isBlockIndirectlyGettingPowered(x, y, z)) + { + ((IRedstoneReceptor) par1World.getBlockTileEntity(x, y, z)).onPowerOn(); + } + } + } + /** * Returns the bounding box of the wired * rectangular prism to render. @@ -189,4 +244,16 @@ public class BlockInteraction extends BlockMachine { return false; } + + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for (MachineType type : MachineType.values()) + { + if (type.tileEntity != null) + { + par3List.add(new ItemStack(par1, 1, type.metadata)); + } + } + } } diff --git a/src/common/assemblyline/machines/ItemBlockInteraction.java b/src/common/assemblyline/machines/ItemBlockInteraction.java deleted file mode 100644 index 8b474ebf..00000000 --- a/src/common/assemblyline/machines/ItemBlockInteraction.java +++ /dev/null @@ -1,58 +0,0 @@ -package assemblyline.machines; - -import java.util.List; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.World; -import assemblyline.AssemblyLine; -import assemblyline.machines.BlockInteraction.MachineType; - -public class ItemBlockInteraction extends ItemBlock -{ - public ItemBlockInteraction(int par1) - { - super(par1); - this.setHasSubtypes(true); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for (MachineType machine : MachineType.values()) - { - par3List.add(new ItemStack(AssemblyLine.blockInteraction, 1, machine.metadata)); - } - } - - public String getItemNameIS(ItemStack itemstack) - { - return MachineType.get(itemstack.getItemDamage()).name; - } - - @Override - public int getBlockID() - { - return AssemblyLine.blockInteraction.blockID; - } - - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) - { - int angle = MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (!world.setBlockAndMetadataWithNotify(x, y, z, this.getBlockID(), stack.getItemDamage() + angle)) { return false; } - - if (world.getBlockId(x, y, z) == this.getBlockID()) - { - Block.blocksList[this.getBlockID()].updateBlockMetadata(world, x, y, z, side, hitX, hitY, hitZ); - Block.blocksList[this.getBlockID()].onBlockPlacedBy(world, x, y, z, player); - } - - return true; - } - -} diff --git a/src/common/assemblyline/machines/ItemBlockMulti.java b/src/common/assemblyline/machines/ItemBlockMulti.java new file mode 100644 index 00000000..0af35d56 --- /dev/null +++ b/src/common/assemblyline/machines/ItemBlockMulti.java @@ -0,0 +1,25 @@ +package assemblyline.machines; + +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import assemblyline.machines.BlockMulti.MachineType; + +public class ItemBlockMulti extends ItemBlock +{ + public ItemBlockMulti(int par1) + { + super(par1); + this.setHasSubtypes(true); + } + + public String getItemNameIS(ItemStack itemstack) + { + return MachineType.get(itemstack.getItemDamage()).name; + } + + @Override + public int getMetadata(int par1) + { + return MachineType.get(par1).metadata; + } +} diff --git a/src/common/assemblyline/machines/TileEntityManipulator.java b/src/common/assemblyline/machines/TileEntityManipulator.java index b6e08946..7a662729 100644 --- a/src/common/assemblyline/machines/TileEntityManipulator.java +++ b/src/common/assemblyline/machines/TileEntityManipulator.java @@ -2,21 +2,31 @@ package assemblyline.machines; import java.util.List; +import com.google.common.io.ByteArrayDataInput; + import net.minecraft.src.AxisAlignedBB; import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; +import net.minecraft.src.INetworkManager; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet; +import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntityChest; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import universalelectricity.core.Vector3; import universalelectricity.electricity.ElectricInfo; +import universalelectricity.implement.IRedstoneReceptor; import universalelectricity.prefab.TileEntityElectricityReceiver; -import assemblyline.machines.BlockInteraction.MachineType; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; +import assemblyline.AssemblyLine; +import assemblyline.machines.BlockMulti.MachineType; -public class TileEntityManipulator extends TileEntityElectricityReceiver +public class TileEntityManipulator extends TileEntityElectricityReceiver implements IRedstoneReceptor, IPacketReceiver { /** * Joules required to run this thing. @@ -32,7 +42,9 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver * Is the manipulator wrenched to turn into * output mode? */ - public boolean isWrenchedToOutput = false; + public boolean isOutput = false; + + private boolean isPowered = false; @Override public double wattRequest() @@ -47,9 +59,9 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver if (!this.worldObj.isRemote) { - if (!this.isDisabled()) + if (!this.isDisabled() && this.wattsReceived >= this.JOULES_REQUIRED) { - if (!this.isOutput()) + if (!this.isOutput) { /** * Find items going into the @@ -88,7 +100,33 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver /** * Finds the connected inventory and outputs the items upon a redstone pulse. */ + if(this.isPowered) + { + this.onPowerOff(); + + Vector3 inputPosition = Vector3.get(this); + inputPosition.modifyPositionFromSide(this.getBeltDirection().getOpposite()); + + Vector3 outputPosition = Vector3.get(this); + outputPosition.modifyPositionFromSide(this.getBeltDirection()); + + ItemStack itemStack = this.tryGrabFromPosition(inputPosition); + + if(itemStack != null) + { + if(itemStack.stackSize > 0) + { + EntityItem entityItem = new EntityItem(worldObj, outputPosition.x + 0.5, outputPosition.y + 0.8, outputPosition.z + 0.5, itemStack); + entityItem.motionX = 0; + entityItem.motionZ = 0; + entityItem.motionY /= 4; + worldObj.spawnEntityInWorld(entityItem); + } + } + } } + + this.wattsReceived = 0; } } } @@ -189,20 +227,101 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver return itemStack; } - + /** - * If the manipulator is powered, it will - * output items instead of input. + * Tries to take a item from a inventory at a specific position. + * @param position + * @return */ - public boolean isOutput() + private ItemStack tryGrabFromPosition(Vector3 position) { - return this.isWrenchedToOutput; + TileEntity tileEntity = position.getTileEntity(this.worldObj); + + if (tileEntity != null) + { + /** + * Try to put items into a chest. + */ + if (tileEntity instanceof TileEntityChest) + { + TileEntityChest[] chests = + { (TileEntityChest) tileEntity, null }; + + /** + * Try to find a double chest. + */ + for (int i = 2; i < 6; i++) + { + ForgeDirection searchDirection = ForgeDirection.getOrientation(i); + Vector3 searchPosition = position.clone(); + searchPosition.modifyPositionFromSide(searchDirection); + + if (searchPosition.getTileEntity(this.worldObj).getClass() == chests[0].getClass()) + { + chests[1] = (TileEntityChest) searchPosition.getTileEntity(this.worldObj); + break; + } + } + + for (TileEntityChest chest : chests) + { + for (int i = 0; i < chest.getSizeInventory(); i++) + { + ItemStack itemStack = this.removeStackFromInventory(i, chest); + if(itemStack != null) return itemStack; + } + } + } + else if (tileEntity instanceof ISidedInventory) + { + ISidedInventory inventory = (ISidedInventory) tileEntity; + + int startIndex = inventory.getStartInventorySide(this.getBeltDirection()); + + for (int i = startIndex; i < inventory.getSizeInventorySide(this.getBeltDirection()); i++) + { + ItemStack itemStack = this.removeStackFromInventory(i, inventory); + if(itemStack != null) return itemStack; + } + } + else if (tileEntity instanceof IInventory) + { + IInventory inventory = (IInventory) tileEntity; + + for (int i = 0; i < inventory.getSizeInventory(); i++) + { + ItemStack itemStack = this.removeStackFromInventory(i, inventory); + if(itemStack != null) return itemStack; + } + } + } + + return null; + } + + public ItemStack removeStackFromInventory(int slotIndex, IInventory inventory) + { + if(inventory.getStackInSlot(slotIndex) != null) + { + ItemStack itemStack = inventory.getStackInSlot(slotIndex).copy(); + itemStack.stackSize = 1; + inventory.decrStackSize(slotIndex, 1); + return itemStack; + } + + return null; } public ForgeDirection getBeltDirection() { return ForgeDirection.getOrientation(MachineType.getDirection(this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord)) + 2); } + + @Override + public Packet getDescriptionPacket() + { + return PacketManager.getPacket(AssemblyLine.CHANNEL, this, this.isOutput); + } @Override public boolean canReceiveFromSide(ForgeDirection side) @@ -220,7 +339,7 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - nbt.setBoolean("isWrenchedToOutput", this.isWrenchedToOutput); + this.isOutput = nbt.getBoolean("isWrenchedToOutput"); } /** @@ -230,6 +349,31 @@ public class TileEntityManipulator extends TileEntityElectricityReceiver public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - this.isWrenchedToOutput = nbt.getBoolean("isWrenchedToOutput"); + nbt.setBoolean("isWrenchedToOutput", this.isOutput); + } + + @Override + public void onPowerOn() + { + this.isPowered = true; + } + + @Override + public void onPowerOff() + { + this.isPowered = false; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) + { + try + { + this.isOutput = dataStream.readBoolean(); + } + catch(Exception e) + { + e.printStackTrace(); + } } } diff --git a/src/common/assemblyline/machines/TileEntitySorter.java b/src/common/assemblyline/machines/TileEntitySorter.java index 3ec778c3..b1963087 100644 --- a/src/common/assemblyline/machines/TileEntitySorter.java +++ b/src/common/assemblyline/machines/TileEntitySorter.java @@ -2,8 +2,6 @@ package assemblyline.machines; import java.util.List; -import com.google.common.io.ByteArrayDataInput; - import net.minecraft.src.AxisAlignedBB; import net.minecraft.src.Entity; import net.minecraft.src.EntityItem; @@ -21,6 +19,9 @@ import universalelectricity.prefab.network.IPacketReceiver; import universalelectricity.prefab.network.PacketManager; import assemblyline.TileEntityBase; import assemblyline.belts.TileEntityConveyorBelt; + +import com.google.common.io.ByteArrayDataInput; + import cpw.mods.fml.common.network.PacketDispatcher; public class TileEntitySorter extends TileEntityBase implements IElectricityReceiver, IPacketReceiver diff --git a/src/common/assemblyline/machines/crafter/TileEntityAutoCrafter.java b/src/common/assemblyline/machines/crafter/TileEntityAutoCrafter.java index fb289912..c7dce0c2 100644 --- a/src/common/assemblyline/machines/crafter/TileEntityAutoCrafter.java +++ b/src/common/assemblyline/machines/crafter/TileEntityAutoCrafter.java @@ -2,12 +2,9 @@ package assemblyline.machines.crafter; import net.minecraft.src.EntityPlayer; import net.minecraft.src.INetworkManager; -import net.minecraft.src.ItemStack; import net.minecraft.src.Packet250CustomPayload; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; -import universalelectricity.prefab.TileEntityAdvanced; - import assemblyline.TileEntityBase; import com.google.common.io.ByteArrayDataInput; diff --git a/src/minecraft/assemblyline/ALClientProxy.java b/src/minecraft/assemblyline/ALClientProxy.java index ca4a491f..9d95da4e 100644 --- a/src/minecraft/assemblyline/ALClientProxy.java +++ b/src/minecraft/assemblyline/ALClientProxy.java @@ -1,15 +1,13 @@ package assemblyline; import net.minecraftforge.client.MinecraftForgeClient; -import assemblyline.AssemblyLine; -import assemblyline.ALCommonProxy; import assemblyline.belts.TileEntityConveyorBelt; import assemblyline.machines.TileEntityManipulator; import assemblyline.machines.TileEntitySorter; -import assemblyline.render.RenderSorter; -import assemblyline.render.RenderHelper; import assemblyline.render.RenderConveyorBelt; +import assemblyline.render.RenderHelper; import assemblyline.render.RenderManipulator; +import assemblyline.render.RenderSorter; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; diff --git a/src/minecraft/assemblyline/gui/GuiAutoCrafting.java b/src/minecraft/assemblyline/gui/GuiAutoCrafting.java index cfbc95e8..a6e150d1 100644 --- a/src/minecraft/assemblyline/gui/GuiAutoCrafting.java +++ b/src/minecraft/assemblyline/gui/GuiAutoCrafting.java @@ -9,7 +9,6 @@ import net.minecraft.src.World; import org.lwjgl.opengl.GL11; import assemblyline.AssemblyLine; - import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; diff --git a/src/minecraft/assemblyline/model/ModelConveyorBelt.java b/src/minecraft/assemblyline/model/ModelConveyorBelt.java index fd92e6eb..7c3afdee 100644 --- a/src/minecraft/assemblyline/model/ModelConveyorBelt.java +++ b/src/minecraft/assemblyline/model/ModelConveyorBelt.java @@ -1,6 +1,5 @@ package assemblyline.model; -import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; diff --git a/src/minecraft/assemblyline/model/ModelDropBox.java b/src/minecraft/assemblyline/model/ModelDropBox.java index 13b2589e..675a1a26 100644 --- a/src/minecraft/assemblyline/model/ModelDropBox.java +++ b/src/minecraft/assemblyline/model/ModelDropBox.java @@ -1,6 +1,5 @@ package assemblyline.model; -import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; diff --git a/src/minecraft/assemblyline/model/ModelManipulator.java b/src/minecraft/assemblyline/model/ModelManipulator.java index fc0753ca..bff21629 100644 --- a/src/minecraft/assemblyline/model/ModelManipulator.java +++ b/src/minecraft/assemblyline/model/ModelManipulator.java @@ -1,6 +1,5 @@ package assemblyline.model; -import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; diff --git a/src/minecraft/assemblyline/model/ModelSorter.java b/src/minecraft/assemblyline/model/ModelSorter.java index 82261816..78bec3f6 100644 --- a/src/minecraft/assemblyline/model/ModelSorter.java +++ b/src/minecraft/assemblyline/model/ModelSorter.java @@ -6,7 +6,6 @@ package assemblyline.model; -import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; diff --git a/src/minecraft/assemblyline/render/RenderHelper.java b/src/minecraft/assemblyline/render/RenderHelper.java index bd1c5937..4fde3f55 100644 --- a/src/minecraft/assemblyline/render/RenderHelper.java +++ b/src/minecraft/assemblyline/render/RenderHelper.java @@ -7,10 +7,10 @@ import net.minecraft.src.RenderBlocks; import org.lwjgl.opengl.GL11; import assemblyline.AssemblyLine; -import assemblyline.machines.BlockInteraction.MachineType; +import assemblyline.machines.BlockMulti.MachineType; import assemblyline.model.ModelConveyorBelt; -import assemblyline.model.ModelSorter; import assemblyline.model.ModelManipulator; +import assemblyline.model.ModelSorter; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -39,7 +39,7 @@ public class RenderHelper implements ISimpleBlockRenderingHandler { if (metadata == MachineType.SORTER.metadata) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "ejector.png")); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "sorter.png")); GL11.glPushMatrix(); GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); GL11.glRotatef(180f, 0f, 0f, 1f); @@ -50,7 +50,7 @@ public class RenderHelper implements ISimpleBlockRenderingHandler } else if (metadata == MachineType.MANIPULATOR.metadata) { - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "injector.png")); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(AssemblyLine.TEXTURE_PATH + "manipulator1.png")); GL11.glPushMatrix(); GL11.glTranslatef((float) 0.6F, (float) 1.5F, (float) 0.6F); GL11.glRotatef(180f, 0f, 0f, 1f); diff --git a/src/minecraft/assemblyline/render/RenderManipulator.java b/src/minecraft/assemblyline/render/RenderManipulator.java index 51e88f2e..9300ac7e 100644 --- a/src/minecraft/assemblyline/render/RenderManipulator.java +++ b/src/minecraft/assemblyline/render/RenderManipulator.java @@ -6,7 +6,6 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import assemblyline.AssemblyLine; -import assemblyline.belts.TileEntityConveyorBelt; import assemblyline.machines.TileEntityManipulator; import assemblyline.model.ModelManipulator; @@ -16,16 +15,21 @@ public class RenderManipulator extends TileEntitySpecialRenderer public void renderAModelAt(TileEntityManipulator tileEntity, double x, double y, double z, float f) { - String flip = "";// if(tileEntity.flip){flip - // = "F";} int face = tileEntity.getBeltDirection().ordinal(); GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); GL11.glRotatef(180f, 0f, 0f, 1f); - this.bindTextureByName(AssemblyLine.TEXTURE_PATH + "injector.png"); - + if(tileEntity.isOutput) + { + this.bindTextureByName(AssemblyLine.TEXTURE_PATH + "manipulator1.png"); + } + else + { + this.bindTextureByName(AssemblyLine.TEXTURE_PATH + "manipulator2.png"); + } + if (face == 2) { GL11.glRotatef(0f, 0f, 1f, 0f); diff --git a/src/minecraft/assemblyline/render/RenderSorter.java b/src/minecraft/assemblyline/render/RenderSorter.java index 40212305..036e4162 100644 --- a/src/minecraft/assemblyline/render/RenderSorter.java +++ b/src/minecraft/assemblyline/render/RenderSorter.java @@ -22,7 +22,7 @@ public class RenderSorter extends TileEntitySpecialRenderer { pos = 8; } - bindTextureByName(AssemblyLine.TEXTURE_PATH + "ejector.png"); + bindTextureByName(AssemblyLine.TEXTURE_PATH + "sorter.png"); GL11.glPushMatrix(); GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F); GL11.glScalef(1.0F, -1F, -1F);