From 3d238fdd382b0d690a0b5cc7cccc5d7f79d6622f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 2 Oct 2012 23:27:18 -0400 Subject: [PATCH] Cleanup && Finished Animation & most of piston Mostly just a code upload to move work to my other pc but i did get steam piston's animation done. I also cleaned up a little moved EU vampire to dev blocks, removed old steam piston, and corrected GUI. Current bugs: Mech energy will not trade, Steam piston GUI willl not display Newtons out putted, and slight lag being cause by packets. --- .gitignore | 1 + src/common/aa/BlockDev.java | 84 ------------------ src/common/aa/DevMain.java | 54 ----------- src/common/aa/DevProxy.java | 63 ------------- src/common/aa/TileEntityAntiMob.java | 37 -------- src/common/basicpipes/BasicPipesMain.java | 28 +++--- src/common/steampower/BlockMachine.java | 8 +- src/common/steampower/SteamPowerMain.java | 11 +-- src/common/steampower/SteamProxy.java | 2 +- src/common/steampower/TileEntityMachine.java | 30 ++----- src/common/steampower/TileEntityNuller.java | 32 ------- .../steampower/boiler/TileEntityBoiler.java | 4 +- .../turbine/TileEntitySteamPiston.java | 72 +++++++++------ ...{GUIGenerator.java => GUISteamPiston.java} | 14 ++- .../steampower/RenderSteamEngine.java | 48 ---------- .../steampower/geared/ModelGearPiston.java | 84 +++++++++++++++--- src/minecraft/textures/DevBlocks.png | Bin 30785 -> 0 bytes 17 files changed, 164 insertions(+), 408 deletions(-) delete mode 100644 src/common/aa/BlockDev.java delete mode 100644 src/common/aa/DevMain.java delete mode 100644 src/common/aa/DevProxy.java delete mode 100644 src/common/aa/TileEntityAntiMob.java delete mode 100644 src/common/steampower/TileEntityNuller.java rename src/minecraft/steampower/{GUIGenerator.java => GUISteamPiston.java} (77%) delete mode 100644 src/minecraft/steampower/RenderSteamEngine.java delete mode 100644 src/minecraft/textures/DevBlocks.png diff --git a/.gitignore b/.gitignore index 109ec420..f2803446 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ LICENSE /src/common/universalelectricity/* /src/common/basiccomponents/* /src/common/buildcraft/* +/src/common/aa/* /bin/ /conf/ /docs/ diff --git a/src/common/aa/BlockDev.java b/src/common/aa/BlockDev.java deleted file mode 100644 index 4258af02..00000000 --- a/src/common/aa/BlockDev.java +++ /dev/null @@ -1,84 +0,0 @@ -package aa; - -import java.util.ArrayList; -import java.util.Random; - -import net.minecraft.src.Block; -import net.minecraft.src.BlockContainer; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class BlockDev extends BlockContainer { - - public BlockDev(int par1) { - super(par1, Material.rock); - this.setBlockName("Machine"); - this.setCreativeTab(CreativeTabs.tabBlock); - //this.setRequiresSelfNotify(); - // this.blockIndexInTexture = 26; - } - public boolean isOpaqueCube() - { - return false; - } - - public boolean renderAsNormalBlock() - { - //TODO change later when custom models are added - return true; - } - public int getBlockTextureFromSideAndMetadata(int side, int meta) - { - if(meta == 0) - { - if(side == 0 || side == 1) - { - return 1; - } - } - return 0; - } - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return 0; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return 0; - } - public void addCreativeItems(ArrayList itemList) - { - - itemList.add(new ItemStack(this, 1,0)); - } - - @Override - public TileEntity createNewTileEntity(World var1,int meta) { - // TODO Auto-generated method stub - if(meta == 0) - { - return new TileEntityAntiMob(); - } - return null; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; - } - @Override - public String getTextureFile() { - return "/textures/DevBlocks.png";} - -} diff --git a/src/common/aa/DevMain.java b/src/common/aa/DevMain.java deleted file mode 100644 index 90d25d1e..00000000 --- a/src/common/aa/DevMain.java +++ /dev/null @@ -1,54 +0,0 @@ -package aa; - -import java.io.File; - - -import net.minecraft.src.Block; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.Mod.Init; -import cpw.mods.fml.common.Mod.PostInit; -import cpw.mods.fml.common.Mod.PreInit; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkMod; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; - -@Mod(modid = "DevBox", name = "Dev Box", version = "Unknown") -@NetworkMod(channels = { "DevD" }, clientSideRequired = true, serverSideRequired = false) - -public class DevMain{ - - public DevMain instance; - @SidedProxy(clientSide = "aa.DevProxy", serverSide = "aa.DevProxy") - public static DevProxy proxy; - Block devBlock = new BlockDev(3533); - - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - proxy.preInit(); - GameRegistry.registerBlock(devBlock); - } - @Init - public void load(FMLInitializationEvent evt) - { - //register - proxy.init(); - GameRegistry.registerTileEntity(TileEntityAntiMob.class, "DevAntiMob"); - //Names and lang stuff - - } - @PostInit - public void postInit(FMLPostInitializationEvent event) - { - proxy.postInit(); - - } - -} diff --git a/src/common/aa/DevProxy.java b/src/common/aa/DevProxy.java deleted file mode 100644 index b07fbff3..00000000 --- a/src/common/aa/DevProxy.java +++ /dev/null @@ -1,63 +0,0 @@ -package aa; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.client.MinecraftForgeClient; -import basicpipes.BasicPipesMain; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.machines.TileEntityPump; -import cpw.mods.fml.common.Side; -import cpw.mods.fml.common.asm.SideOnly; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class DevProxy implements IGuiHandler -{ - @SideOnly(Side.CLIENT) - public void renders() - { - MinecraftForgeClient.preloadTexture("textures/Devblocks.png"); - } - public void preInit() - { - renders(); - } - public void init() - { - - } - public void postInit() - { - - } - @Override - public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity != null) - { - switch(ID) - { - } - } - - return null; - } - - @Override - public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - - if (tileEntity != null) - { - switch(ID) - { - } - } - - return null; - } -} \ No newline at end of file diff --git a/src/common/aa/TileEntityAntiMob.java b/src/common/aa/TileEntityAntiMob.java deleted file mode 100644 index 3837b9a8..00000000 --- a/src/common/aa/TileEntityAntiMob.java +++ /dev/null @@ -1,37 +0,0 @@ -package aa; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.src.AxisAlignedBB; -import net.minecraft.src.Entity; -import net.minecraft.src.EntityMob; -import net.minecraft.src.EntitySlime; -import net.minecraft.src.TileEntity; - -public class TileEntityAntiMob extends TileEntity { - @Override - public void updateEntity() - { - List ee = worldObj.loadedEntityList; - List mobs = new ArrayList(); - for(int i = 0; i = 10 && !worldObj.isRemote) { - PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); + Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); } } @@ -220,15 +213,4 @@ public class TileEntityMachine extends TileEntityElectricityReceiver implements // TODO Auto-generated method stub } - @Override - public void onReceive(TileEntity sender, double amps, double voltage, - ForgeDirection side) { - // TODO Auto-generated method stub - - } - @Override - public double wattRequest() { - // TODO Auto-generated method stub - return 0; - } } \ No newline at end of file diff --git a/src/common/steampower/TileEntityNuller.java b/src/common/steampower/TileEntityNuller.java deleted file mode 100644 index 0a031810..00000000 --- a/src/common/steampower/TileEntityNuller.java +++ /dev/null @@ -1,32 +0,0 @@ -package steampower; - -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.implement.IElectricityReceiver; - -public class TileEntityNuller extends TileEntityMachine implements IElectricityReceiver { - - @Override - public boolean canReceiveFromSide(ForgeDirection side) - { - return true; - } - public double wattRequest() - { - return 400; - } - @Override - public double getVoltage() - { - return 1000; - } - @Override - public int getTickInterval() - { - return 20; - } - @Override - public boolean canConnect(ForgeDirection side) - { - return true; - } -} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 22f49ae9..6908a5ee 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -176,11 +176,11 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv if(blockE instanceof IHeatProducer) { this.isBeingHeated = true; - heatStored = (int) Math.min((heatStored + ((IHeatProducer)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); + heatStored = (int) Math.min((heatStored + ((IHeatProducer)blockE).onProduceHeat(SteamPowerMain.fireOutput, 1)), heatMax); } else if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) { - heatStored += (int) Math.min((int)(random.nextDouble()*10)*getTickInterval(), heatMax); + heatStored += (int) Math.min((int)(random.nextDouble()*10), heatMax); } } super.updateEntity(); diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 3d13d666..66739312 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -24,27 +24,33 @@ import com.google.common.io.ByteArrayDataInput; public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechenical { - public int force = 0; + private int force = 0; public int aForce = 0; private int frictionLoad = 10; public int steam = 0; public int water = 0; - public int maxWater = 1; + public int maxWater = 2; public int maxSteam = 10; public int pos = 0; //max at 7 private int tickCount = 0; private int runTime = 0; - + private int genRate = 0;//max 100 + private int posCount = 0; private ForgeDirection frontDir; private ForgeDirection backDir; + public TileEntity bb; + public TileEntity ff; public boolean running= false; @Override public void updateEntity() { + super.updateEntity(); if(tickCount++ >=10) { + //++runTime; + //pos += 1;if(pos > 7){pos =0;} //for testing int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); int nMeta = 0; switch(meta) @@ -56,43 +62,54 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } frontDir = ForgeDirection.getOrientation(nMeta); backDir = ForgeDirection.getOrientation(nMeta).getOpposite(); + bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord+1, zCoord+backDir.offsetZ); + ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); + if(this.runTime > 0) + { + this.running = true; + }else + { + this.running = false; + } + if(this.running) + { + int countA = 10 - (genRate/10); + if(posCount++ >=countA) + { + posCount = 0; + pos += 1;if(pos > 7){pos =0;} + } + } + if(bb instanceof TileEntitySteamPiston) + { + this.pos = ((TileEntitySteamPiston) bb).pos + 1; + if(this.pos > 7){pos = 0;} + } if(!worldObj.isRemote) { - if(this.runTime < 0 && this.steam > 0) + if(this.runTime <= 0 && this.steam > 0) { this.steam--; - this.runTime+=60; + this.runTime+=30; }else if(this.runTime > 0) { - this.running = true; this.runTime-=1; - }else - { - this.running = false; + this.force = genRate * 10; } - TileEntity ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); - TileEntity bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord+1, zCoord+backDir.offsetZ); if(ff instanceof IMechenical) { ((IMechenical) ff).applyForce(this.aForce); } - if(bb instanceof TileEntitySteamPiston) + if(genRate <=0 && runTime > 0) { - this.pos = ((TileEntitySteamPiston) bb).pos + 1; - if(this.pos > 7) - { - pos = 0; - } + genRate++; }else - if(this.running) { - this.pos += 1; - if(this.pos > 7) - { - pos = 0; - } + genRate--; } + + } } } @@ -126,6 +143,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public double applyForce(int force) { + this.aForce = this.force + force- frictionLoad; return aForce; } @@ -173,7 +191,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { if(type == Liquid.STEAM) { - int rejectedSteam = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); + int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); this.steam += vol - rejectedSteam; return rejectedSteam; } @@ -219,7 +237,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR //---------------- public Object[] getSendData() { - return new Object[]{steam,water,force,aForce,pos}; + return new Object[]{steam,water,force,aForce,genRate,runTime}; } @Override public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { @@ -229,7 +247,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR this.water = dataStream.readInt(); this.force = dataStream.readInt(); this.aForce = dataStream.readInt(); - this.pos = dataStream.readInt(); + this.genRate= dataStream.readInt(); + this.runTime = dataStream.readInt(); + //System.out.print("Packet \n"); } catch(Exception e) { diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUISteamPiston.java similarity index 77% rename from src/minecraft/steampower/GUIGenerator.java rename to src/minecraft/steampower/GUISteamPiston.java index b0e9d6e7..19bd62aa 100644 --- a/src/minecraft/steampower/GUIGenerator.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -11,14 +11,14 @@ import steampower.turbine.TileEntitySteamPiston; import universalelectricity.electricity.ElectricInfo; import universalelectricity.electricity.ElectricInfo.ElectricUnit; - public class GUIGenerator extends GuiContainer + public class GUISteamPiston extends GuiContainer { private TileEntitySteamPiston tileEntity; private int containerWidth; private int containerHeight; - public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) + public GUISteamPiston(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) { super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); this.tileEntity = tileEntity; @@ -29,11 +29,13 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; */ protected void drawGuiContainerForegroundLayer() { - this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); + this.fontRenderer.drawString("Steam Piston Guage Read outs", 55, 6, 4210752); this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); String displayText = ""; String displayText2 = ""; String displayText3 = ""; + String displayText4 = ""; + String displayText5 = ""; /** if(tileEntity.connectedElectricUnit == null) { @@ -54,13 +56,17 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; else { //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); - displayText = "Force: "+tileEntity.force+"N"; + displayText = "ForceOut: "+tileEntity.aForce+"N"; } displayText2 = "water" + "-" + tileEntity.water; displayText3 = "steam" + "-" + tileEntity.steam; + if(tileEntity.bb != null){displayText4 = "Debug:bb" + "=" + tileEntity.bb.toString();} + if(tileEntity.ff != null){displayText5 = "Debugff" + "=" + tileEntity.ff.toString();} this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1), 45, 4210752); this.fontRenderer.drawString(displayText2, (int)(105-displayText.length()*1), 55, 4210752); this.fontRenderer.drawString(displayText3, (int)(105-displayText.length()*1), 65, 4210752); + // this.fontRenderer.drawString(displayText4, (int)(105-displayText.length()*1), 75, 4210752); + // this.fontRenderer.drawString(displayText5, (int)(105-displayText.length()*1), 85, 4210752); this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/minecraft/steampower/RenderSteamEngine.java b/src/minecraft/steampower/RenderSteamEngine.java deleted file mode 100644 index de2ab5da..00000000 --- a/src/minecraft/steampower/RenderSteamEngine.java +++ /dev/null @@ -1,48 +0,0 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.turbine.TileEntitySteamPiston; - -public class RenderSteamEngine extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelEngine model; - - public RenderSteamEngine() - { - model = new ModelEngine(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Engine.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - - float p = ((TileEntitySteamPiston)tileEntity).pos; - //boolean cc = ((TileEntitySteamPiston)tileEntity).isConnected; - int meta = ((TileEntityMachine) tileEntity).getDirection(); - switch(meta) - { - case 1:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 2:GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 3:GL11.glRotatef(180f, 0f, 1f, 0f);break; - case 4:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - - model.renderTop(0.0625F); - model.renderMid(0.0625F,p); - - model.renderBot(0.0625F); - - - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/steampower/geared/ModelGearPiston.java b/src/minecraft/steampower/geared/ModelGearPiston.java index 3e37e874..0a849812 100644 --- a/src/minecraft/steampower/geared/ModelGearPiston.java +++ b/src/minecraft/steampower/geared/ModelGearPiston.java @@ -45,7 +45,7 @@ public class ModelGearPiston extends ModelBase ModelRenderer RigthF1; ModelRenderer RigthGCC; ModelRenderer RightSlide; - ModelRenderer LeftSlide; + ModelRenderer midRod; ModelRenderer RightRod2; ModelRenderer LeftGCC; ModelRenderer LeftRod2; @@ -242,12 +242,12 @@ public class ModelGearPiston extends ModelBase LeftRod2.setTextureSize(128, 128); LeftRod2.mirror = true; setRotation(LeftRod2, 0F, 0F, 0F); - LeftSlide = new ModelRenderer(this, 0, 32); - LeftSlide.addBox(-1F, -2F, -2F, 1, 7, 4); - LeftSlide.setRotationPoint(4F, 0F, 0F); - LeftSlide.setTextureSize(128, 128); - LeftSlide.mirror = true; - setRotation(LeftSlide, 0F, 0F, 0F); + midRod = new ModelRenderer(this, 0, 32); + midRod.addBox(-1F, -2F, -2F, 1, 7, 4); + midRod.setRotationPoint(4F, 0F, 0F); + midRod.setTextureSize(128, 128); + midRod.mirror = true; + setRotation(midRod, 0F, 0F, 0F); } public void renderBody(float f5) { @@ -271,16 +271,78 @@ public class ModelGearPiston extends ModelBase } public void renderR(float f5,int pos) { - int change = pos/2; - + switch(pos) + { + case 0: + RSpiston.setRotationPoint(1F, 3F, 0F); + LSpiston.setRotationPoint(2F, 3F, 0F); + RodPiston.setRotationPoint(0F, 8F, 0F); + setRotation(RSpiston, 0F, 0F, 0F); + setRotation(LSpiston, 0F, 0F, 0F); + break; + case 1: + RodPiston.setRotationPoint(0F, 6F, 0F); + LSpiston.setRotationPoint(2F, 2F, 2F); + RSpiston.setRotationPoint(1F, 2F, 2F); + setRotation(LSpiston, -0.5235988F, 0F, 0F); + setRotation(RSpiston, -0.5235988F, 0F, 0F); + break; + case 2: + LSpiston.setRotationPoint(2F, 0F, 3F); + RSpiston.setRotationPoint(1F, 0F, 3F); + RodPiston.setRotationPoint(0F, 3F, 0F); + setRotation(RSpiston, -1.047198F, 0F, 0F); + setRotation(LSpiston, -1.047198F, 0F, 0F); + break; + case 3: + LSpiston.setRotationPoint(2F, -2F, 2F); + RSpiston.setRotationPoint(1F, -2F, 2F); + RodPiston.setRotationPoint(0F, 1F, 0F); + setRotation(LSpiston, -0.7853982F, 0F, 0F); + setRotation(RSpiston, -0.7853982F, 0F, 0F); + break; + case 4: + LSpiston.setRotationPoint(2F, -3F, 0F); + RSpiston.setRotationPoint(1F, -3F, 0F); + RodPiston.setRotationPoint(0F, 1F, 0F); + setRotation(LSpiston, 0F, 0F, 0F); + setRotation(RSpiston, 0F, 0F, 0F); + break; + case 5: + LSpiston.setRotationPoint(2F, -2F, -2F); + RSpiston.setRotationPoint(1F, -2F, -2F); + RodPiston.setRotationPoint(0F, 1F, 0F); + setRotation(LSpiston, 0.7853982F, 0F, 0F); + setRotation(RSpiston, 0.7853982F, 0F, 0F); + break; + case 6: + RSpiston.setRotationPoint(1F, 0F, -3F); + LSpiston.setRotationPoint(2F, 0F, -3F); + RodPiston.setRotationPoint(0F, 2F, 0F); + setRotation(RSpiston, 1.047198F, 0F, 0F); + setRotation(LSpiston, 1.047198F, 0F, 0F); + break; + case 7: + RodPiston.setRotationPoint(0F, 6F, 0F); + LSpiston.setRotationPoint(2F, 2F, -2F); + RSpiston.setRotationPoint(1F, 2F, -2F); + setRotation(LSpiston, 0.5235988F, 0F, 0F); + setRotation(RSpiston, 0.5235988F, 0F, 0F); + break; + } //Piston Arm RSpiston.render(f5); LSpiston.render(f5); RodPiston.render(f5); - RodPiston.setRotationPoint(0, 8f-change, 0); //GearShaft + RightSlide.rotateAngleX = 0.7853982F * pos; + midRod.rotateAngleX = 0.7853982F * pos; + midRod.rotateAngleX = 0.7853982F * pos; + RightRod2.rotateAngleX = 0.7853982F * pos; + LeftRod2.rotateAngleX = 0.7853982F * pos; + LeftSlide2.rotateAngleX = 0.7853982F * pos; RightSlide.render(f5); - LeftSlide.render(f5); + midRod.render(f5); RightRod2.render(f5); LeftRod2.render(f5); LeftSlide2.render(f5); diff --git a/src/minecraft/textures/DevBlocks.png b/src/minecraft/textures/DevBlocks.png deleted file mode 100644 index e1f3b762de88eb9685fe75d7de874d2417a860c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30785 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 zue