From 1c41902c6e52bae1fb55211106d8bbae1b277dc6 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sat, 19 May 2012 10:38:59 -0700 Subject: [PATCH 001/115] Initial commit --- .gitignore | 6 ++++++ README.md | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0f182a03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.class + +# Package Files # +*.jar +*.war +*.ear diff --git a/README.md b/README.md new file mode 100644 index 00000000..d3e3f890 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Dark-sIndustry +============== + +My Version of the leading Industry minecraft mods using the UE electricty API \ No newline at end of file From aa8432a07ae2ba9099187e92ee0fbf8015eb9a21 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 18 Jun 2012 13:42:50 -0400 Subject: [PATCH 002/115] Signed-off-by: Rseifert --- .../net/minecraft/src/eui/BlockMachine.java | 388 +++++++++++ .../net/minecraft/src/eui/ItemCoalFuel.java | 60 ++ .../net/minecraft/src/eui/ItemMachine.java | 50 ++ .../net/minecraft/src/eui/ItemParts.java | 71 +++ .../src/eui/TileEntityCondenser.java | 79 +++ .../minecraft/src/eui/TileEntityMachine.java | 56 ++ .../minecraft/src/eui/TileEntityNuller.java | 37 ++ .../minecraft/src/eui/api/IHeatConsumer.java | 22 + .../minecraft/src/eui/api/IHeatProducer.java | 14 + .../minecraft/src/eui/api/ISteamConsumer.java | 30 + .../minecraft/src/eui/api/ISteamProducer.java | 20 + .../minecraft/src/eui/api/IWaterConsumer.java | 30 + .../minecraft/src/eui/api/IWaterProducer.java | 20 + .../src/eui/boiler/ContainerBoiler.java | 59 ++ .../minecraft/src/eui/boiler/GuiBoiler.java | 84 +++ .../minecraft/src/eui/boiler/SlotBoiler.java | 60 ++ .../src/eui/boiler/TileEntityBoiler.java | 601 ++++++++++++++++++ .../src/eui/burner/ContainerFireBox.java | 42 ++ .../minecraft/src/eui/burner/GUIFireBox.java | 87 +++ .../src/eui/burner/TileEntityFireBox.java | 265 ++++++++ .../src/eui/grinder/ContainerGrinder.java | 87 +++ .../src/eui/grinder/GrinderRecipes.java | 74 +++ .../minecraft/src/eui/grinder/GuiGrinder.java | 46 ++ .../src/eui/grinder/SlotGrinder.java | 60 ++ .../src/eui/grinder/TileEntityGrinder.java | 386 +++++++++++ .../minecraft/src/eui/steam/BlockPipe.java | 139 ++++ .../src/eui/steam/BlockPipeWater.java | 139 ++++ .../net/minecraft/src/eui/steam/ItemPipe.java | 123 ++++ .../minecraft/src/eui/steam/ModelPipe.java | 98 +++ .../minecraft/src/eui/steam/RenderPipe.java | 40 ++ .../src/eui/steam/RenderPipeWater.java | 40 ++ .../src/eui/steam/TileEntityPipe.java | 213 +++++++ .../src/eui/steam/TileEntityPipeWater.java | 207 ++++++ .../src/eui/turbine/ContainerGenerator.java | 41 ++ .../src/eui/turbine/GUIGenerator.java | 77 +++ .../src/eui/turbine/TileEntityGenerator.java | 305 +++++++++ .../net/minecraft/src/mod_EUIndustry.java | 132 ++++ 37 files changed, 4282 insertions(+) create mode 100644 minecraft/net/minecraft/src/eui/BlockMachine.java create mode 100644 minecraft/net/minecraft/src/eui/ItemCoalFuel.java create mode 100644 minecraft/net/minecraft/src/eui/ItemMachine.java create mode 100644 minecraft/net/minecraft/src/eui/ItemParts.java create mode 100644 minecraft/net/minecraft/src/eui/TileEntityCondenser.java create mode 100644 minecraft/net/minecraft/src/eui/TileEntityMachine.java create mode 100644 minecraft/net/minecraft/src/eui/TileEntityNuller.java create mode 100644 minecraft/net/minecraft/src/eui/api/IHeatConsumer.java create mode 100644 minecraft/net/minecraft/src/eui/api/IHeatProducer.java create mode 100644 minecraft/net/minecraft/src/eui/api/ISteamConsumer.java create mode 100644 minecraft/net/minecraft/src/eui/api/ISteamProducer.java create mode 100644 minecraft/net/minecraft/src/eui/api/IWaterConsumer.java create mode 100644 minecraft/net/minecraft/src/eui/api/IWaterProducer.java create mode 100644 minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java create mode 100644 minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java create mode 100644 minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java create mode 100644 minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java create mode 100644 minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java create mode 100644 minecraft/net/minecraft/src/eui/burner/GUIFireBox.java create mode 100644 minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java create mode 100644 minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java create mode 100644 minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java create mode 100644 minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java create mode 100644 minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java create mode 100644 minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java create mode 100644 minecraft/net/minecraft/src/eui/steam/BlockPipe.java create mode 100644 minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java create mode 100644 minecraft/net/minecraft/src/eui/steam/ItemPipe.java create mode 100644 minecraft/net/minecraft/src/eui/steam/ModelPipe.java create mode 100644 minecraft/net/minecraft/src/eui/steam/RenderPipe.java create mode 100644 minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java create mode 100644 minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java create mode 100644 minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java create mode 100644 minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java create mode 100644 minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java create mode 100644 minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java create mode 100644 minecraft/net/minecraft/src/mod_EUIndustry.java diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/minecraft/net/minecraft/src/eui/BlockMachine.java new file mode 100644 index 00000000..2e6d3803 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/BlockMachine.java @@ -0,0 +1,388 @@ +package net.minecraft.src.eui; + +import java.util.ArrayList; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.src.*; +import net.minecraft.src.eui.api.ISteamConsumer; +import net.minecraft.src.eui.api.ISteamProducer; +import net.minecraft.src.eui.boiler.*; +import net.minecraft.src.eui.burner.GUIFireBox; +import net.minecraft.src.eui.burner.TileEntityFireBox; +import net.minecraft.src.eui.grinder.*; +import net.minecraft.src.eui.turbine.GUIGenerator; +import net.minecraft.src.eui.turbine.TileEntityGenerator; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.UEBlockMachine; +import net.minecraft.src.universalelectricity.UEElectricItem; +import net.minecraft.src.universalelectricity.UERenderBlocks; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +public class BlockMachine extends UEBlockMachine implements ITextureProvider +{ + + private Random furnaceRand = new Random(); + private static boolean keepFurnaceInventory = true; + + public BlockMachine(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + } + @Override + protected int damageDropped(int metadata) + { + return metadata; + } + @Override + public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) + { + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof TileEntityFireBox) + { + if(((TileEntityFireBox)tileEntity).generateRate > 0) + { + int var6 = (int)((TileEntityFireBox)tileEntity).getDirection(); + float var7 = (float)x + 0.5F; + float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; + float var9 = (float)z + 0.5F; + float var10 = 0.52F; + float var11 = par5Random.nextFloat() * 0.6F - 0.3F; + + if (var6 == 5) + { + par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 4) + { + par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 3) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 2) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + } + } + } + } + @Override + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); + int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); + + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + + //If it is the front side + if(side == ((TileEntityMachine)tileEntity).getDirection()) + { + switch(metadata) + { + + case 1: return 3; + case 3: return 3; + } + } + //If it is the back side + else if(side == UniversalElectricity.getOrientationFromSide(((TileEntityMachine)tileEntity).getDirection(), (byte)2)) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + return 0; + + + } + @Override + public int getBlockTextureFromSideAndMetadata(int side, int metadata) + { + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + else + { + //If it is the front side + if(side == 3) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + //If it is the back side + else if(side == 2) + { + switch(metadata) + { + case 0: return this.blockIndexInTexture + 2; + case 1: return this.blockIndexInTexture + 3; + case 2: return this.blockIndexInTexture + 2; + } + } + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + } + return 0; + } + public boolean blockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + int metadata = par1World.getBlockMetadata(par2, par3, par4); + + /** + * Check if the player is holding a wrench or an electric item. If so, do not open the GUI. + */ + if(par5EntityPlayer.inventory.getCurrentItem() != null) + { + if(par5EntityPlayer.inventory.getCurrentItem().itemID == UniversalComponents.ItemWrench.shiftedIndex) + { + if(onUseWrench(par1World, par2, par3, par4, par5EntityPlayer)) + { + par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID); + return true; + } + } + else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof UEElectricItem) + { + if(onUseElectricItem(par1World, par2, par3, par4, par5EntityPlayer)) + { + return true; + } + } + } + + return machineActivated(par1World, par2, par3, par4, par5EntityPlayer); + } + public boolean onUseElectricItem(World par1World, int par2, int par3, + int par4, EntityPlayer par5EntityPlayer) { + // TODO Auto-generated method stub + return false; + } + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 2: tileEntity.setDirection((byte)5); break; + case 5: tileEntity.setDirection((byte)3); break; + case 3: tileEntity.setDirection((byte)4); break; + case 4: tileEntity.setDirection((byte)2); break; + } + + return true; + } + /** + * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the + * block. + */ + public boolean machineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + if(blockEntity instanceof TileEntityGrinder) + { + TileEntity var6 = (TileEntityGrinder)par1World.getBlockTileEntity(x, y, z); + ModLoader.openGUI(par5EntityPlayer, new GuiGrinder(par5EntityPlayer.inventory, (TileEntityGrinder) var6 )); ; + } + if(blockEntity instanceof TileEntityBoiler) + { + TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); + ModLoader.openGUI(par5EntityPlayer, new GuiBoiler(par5EntityPlayer.inventory, (TileEntityBoiler) var6 )); ; + } + if(blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); + ModLoader.openGUI(par5EntityPlayer, new GUIFireBox(par5EntityPlayer.inventory, (TileEntityFireBox) var6 )); ; + } + if(blockEntity instanceof TileEntityGenerator) + { + TileEntity var6 = (TileEntityGenerator)par1World.getBlockTileEntity(x, y, z); + ModLoader.openGUI(par5EntityPlayer, new GUIGenerator(par5EntityPlayer.inventory, (TileEntityGenerator) var6 )); ; + } + } + + return true; + } + } + @Override + public TileEntity getBlockEntity(int meta) + { + switch(meta) + { + case 0: return new TileEntityGrinder(); + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityGenerator(); + case 14: return new TileEntityCondenser(); + case 15: return new TileEntityNuller(); + } + return null; + } + + /** + * Called when the block is placed in the world. + */ + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + if(metadata == 0) + { + switch (angle) + { + case 0: tileEntity.setDirection((byte)5); break; + case 1: tileEntity.setDirection((byte)3); break; + case 2: tileEntity.setDirection((byte)4); break; + case 3: tileEntity.setDirection((byte)2); break; + } + } + else + { + switch (angle) + { + case 0: tileEntity.setDirection((byte)3); break; + case 1: tileEntity.setDirection((byte)4); break; + case 2: tileEntity.setDirection((byte)2); break; + case 3: tileEntity.setDirection((byte)5); break; + } + } + } + /** + * Called whenever the block is removed. + */ + public void onBlockRemoval(World par1World, int par2, int par3, int par4) + { + if (!keepFurnaceInventory) + { + TileEntityGrinder var5 = (TileEntityGrinder)par1World.getBlockTileEntity(par2, par3, par4); + + if (var5 != null) + { + for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) + { + ItemStack var7 = var5.getStackInSlot(var6); + + if (var7 != null) + { + float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + + while (var7.stackSize > 0) + { + int var11 = this.furnaceRand.nextInt(21) + 10; + + if (var11 > var7.stackSize) + { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); + + if (var7.hasTagCompound()) + { + var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); + } + + float var13 = 0.05F; + var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); + var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); + par1World.spawnEntityInWorld(var12); + } + } + } + } + } + + super.onBlockRemoval(par1World, par2, par3, par4); + } + @Override + public TileEntity getBlockEntity() { + // TODO Auto-generated method stub + return null; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + public int getRenderType() + { + return UniversalComponents.MachineRenderType; + } +public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,14)); + itemList.add(new ItemStack(this, 1,15)); +} +} diff --git a/minecraft/net/minecraft/src/eui/ItemCoalFuel.java b/minecraft/net/minecraft/src/eui/ItemCoalFuel.java new file mode 100644 index 00000000..8438a16f --- /dev/null +++ b/minecraft/net/minecraft/src/eui/ItemCoalFuel.java @@ -0,0 +1,60 @@ +package net.minecraft.src.eui; + +import java.util.ArrayList; + +import net.minecraft.src.*; +import net.minecraft.src.forge.*; + +public class ItemCoalFuel extends Item implements ITextureProvider +{ + + public ItemCoalFuel(int par1) + { + super(par1); + this.setItemName("CoalDust"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 0; + case 1: return 1; + case 2: return 2; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/Items.png"; + } + public String getItemName() + { + return "CoalDust"; + } + + + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalNuggets"; + case 1: return "CoalPellets"; + case 2: return "CoalDust"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + + } +} diff --git a/minecraft/net/minecraft/src/eui/ItemMachine.java b/minecraft/net/minecraft/src/eui/ItemMachine.java new file mode 100644 index 00000000..3785adcc --- /dev/null +++ b/minecraft/net/minecraft/src/eui/ItemMachine.java @@ -0,0 +1,50 @@ +package net.minecraft.src.eui; +import java.util.ArrayList; + +import net.minecraft.src.*; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + } + public int getMetadata(int metadata) + { + return metadata; + } + + public String getItemName() + { + return "Machine"; + } + + public int getPlacedBlockMetadata(int damage) { + return damage; + } + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalProcessor"; + case 1: return "Boiler"; + case 2: return "FireBox"; + case 3: return "SteamGen"; + case 15: return "EnergyNuller"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,15)); + + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/ItemParts.java b/minecraft/net/minecraft/src/eui/ItemParts.java new file mode 100644 index 00000000..6c91a348 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/ItemParts.java @@ -0,0 +1,71 @@ +package net.minecraft.src.eui; + +import java.util.ArrayList; + +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.forge.ITextureProvider; + +public class ItemParts extends Item implements ITextureProvider{ + + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 3; + case 1: return 4; + case 2: return 5; + case 3: return 6; + case 4: return 7; + case 5: return 8; + case 6: return 9; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/Items.png"; + } + public String getItemName() + { + return "parts"; + } + + + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "Tank"; + case 3: return "Valve"; + case 4: return "Tube"; + case 5: return "Seal"; + case 6: return "Rivits"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,4)); + itemList.add(new ItemStack(this, 1,5)); + itemList.add(new ItemStack(this, 1,6)); + + } +} + + + diff --git a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java new file mode 100644 index 00000000..9e5d3fcf --- /dev/null +++ b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java @@ -0,0 +1,79 @@ +package net.minecraft.src.eui; + +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.eui.api.IWaterProducer; +import net.minecraft.src.universalelectricity.UEIConsumer; + +public class TileEntityCondenser extends TileEntityMachine implements IWaterProducer,UEIConsumer { + int tickCount = 0; + int waterStored = 0; + int energyStored = 0; + @Override + public int onProduceWater(int maxVol, int side) { + if( maxVol > 0) + { + int tradeW = Math.min(maxVol, waterStored); + waterStored -= tradeW; + return tradeW; + } + return 0; + } + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + } + + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.energyStored = par1NBTTagCompound.getInteger("energyStored"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + } + public void updateEntity() + { + if(energyStored > 100 && tickCount > 200 && waterStored < 10) + { + energyStored -= 100; + waterStored += 1; + tickCount = 0; + } + tickCount++; + } + + @Override + public boolean canProduceWater(byte side) { + // TODO Auto-generated method stub + return true; + } + @Override + public int onReceiveElectricity(int watts, int voltage, byte side) { + int rejectedElectricity = Math.max((this.waterStored + watts) - this.getElectricityCapacity(), 0); + this.energyStored += watts - rejectedElectricity; + return rejectedElectricity; + } + @Override + public boolean canRecieveElectricity(byte side) { + // TODO Auto-generated method stub + return true; + } + @Override + public int getStoredElectricity() { + // TODO Auto-generated method stub + return this.energyStored; + } + @Override + public int getElectricityCapacity() { + // TODO Auto-generated method stub + return 1000; + } + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 240; + } + + + +} diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/minecraft/net/minecraft/src/eui/TileEntityMachine.java new file mode 100644 index 00000000..c5f5eac5 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/TileEntityMachine.java @@ -0,0 +1,56 @@ +package net.minecraft.src.eui; + +import net.minecraft.src.*; +import net.minecraft.src.forge.ITextureProvider; +import net.minecraft.src.universalelectricity.UEIRotatable; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +public class TileEntityMachine extends TileEntity implements ITextureProvider,UEIRotatable { + private int facing; + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", (int)this.facing); + + } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.facing = par1NBTTagCompound.getInteger("facing"); + } + public TileEntity getSteamMachine(int i) + { + + int x = this.xCoord; + int y = this.yCoord; + int z = this.zCoord; + switch(i){ + case 0: y = y - 1;break; + case 1: y = y + 1;break; + case 2: z = z + 1;break; + case 3: z = z - 1;break; + case 4: x = x + 1;break; + case 5: x = x - 1;break; + } + TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntityMachine) + { + return aEntity; + } + + return null; + } + public byte getDirection() { + // TODO Auto-generated method stub + return (byte) this.facing; + } + public void setDirection(byte facingDirection) { + this.facing = facingDirection; + } + @Override + public String getTextureFile() + { + return "/eui/blocks.png"; + } + +} diff --git a/minecraft/net/minecraft/src/eui/TileEntityNuller.java b/minecraft/net/minecraft/src/eui/TileEntityNuller.java new file mode 100644 index 00000000..ecf5ee45 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/TileEntityNuller.java @@ -0,0 +1,37 @@ +package net.minecraft.src.eui; + +import net.minecraft.src.universalelectricity.UEIConsumer; + +public class TileEntityNuller extends TileEntityMachine implements UEIConsumer { + + @Override + public int onReceiveElectricity(int watts, int voltage, byte side) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canRecieveElectricity(byte side) { + // TODO Auto-generated method stub + return true; + } + + @Override + public int getStoredElectricity() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getElectricityCapacity() { + // TODO Auto-generated method stub + return 100000; + } + + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 100000000; + } + +} diff --git a/minecraft/net/minecraft/src/eui/api/IHeatConsumer.java b/minecraft/net/minecraft/src/eui/api/IHeatConsumer.java new file mode 100644 index 00000000..a9049bc2 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/IHeatConsumer.java @@ -0,0 +1,22 @@ +package net.minecraft.src.eui.api; + +/** + * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. + * @author Darkguardsman code sourced from Calclavia + * + */ +public interface IHeatConsumer +{ + /** + * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). + * @param vol - The amount of steam this block received + * @param side - The side of the block in which the electricity came from. + * @return vol - The amount of rejected steam to be sent to back + */ + public float onReceiveHeat(float jouls, int side); + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + public float getStoredHeat(); +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/api/IHeatProducer.java b/minecraft/net/minecraft/src/eui/api/IHeatProducer.java new file mode 100644 index 00000000..dc013e51 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/IHeatProducer.java @@ -0,0 +1,14 @@ +package net.minecraft.src.eui.api; + + +public interface IHeatProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param jouls - The maximum jouls can be transfered + * @param side - The side of block in which the conductor is on + * @return jouls - Return jouls to consumer + */ + public float onProduceHeat(float jouls, int side); +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/api/ISteamConsumer.java b/minecraft/net/minecraft/src/eui/api/ISteamConsumer.java new file mode 100644 index 00000000..8be12412 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/ISteamConsumer.java @@ -0,0 +1,30 @@ +package net.minecraft.src.eui.api; + + +public interface ISteamConsumer +{ + /** + * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). + * @param watts - The amount of watts this block received. + * @param side - The side of the block in which the electricity came from. + * @return watt - The amount of rejected power to be sent back into the conductor + */ + public int onReceiveSteam(int watts, byte side); + // 1 unit of steam is = to 7132.6gal(27m^3) at 1ATM 424*F(200*C) + /** + * You can use this to check if a wire can connect to this UE consumer to properly render the graphics + * @param side - The side in which the electricity is coming from. + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveSteam(byte side); + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + public int getStoredSteam(); + + /** + * @return Return the maximum amount of stored electricity this consumer can get. + */ + public int getSteamCapacity(); +} diff --git a/minecraft/net/minecraft/src/eui/api/ISteamProducer.java b/minecraft/net/minecraft/src/eui/api/ISteamProducer.java new file mode 100644 index 00000000..8a67cdeb --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/ISteamProducer.java @@ -0,0 +1,20 @@ +package net.minecraft.src.eui.api; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface ISteamProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param maxvol - The maximum vol the steam pipe can take + * @param side - The side of block in which the conductor is on + * @return vol - Return the amount of vol that cam be moved at one time + */ + public int onProduceSteam(float maxVol, int side); + + public boolean canProduceSteam(byte side); +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/api/IWaterConsumer.java b/minecraft/net/minecraft/src/eui/api/IWaterConsumer.java new file mode 100644 index 00000000..95c7fb1a --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/IWaterConsumer.java @@ -0,0 +1,30 @@ +package net.minecraft.src.eui.api; + + +public interface IWaterConsumer +{ + /** + * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). + * @param watts - The amount of watts this block received. + * @param side - The side of the block in which the electricity came from. + * @return watt - The amount of rejected power to be sent back into the conductor + */ + public int onReceiveWater(int vol, byte side); + + /** + * You can use this to check if a wire can connect to this UE consumer to properly render the graphics + * @param side - The side in which the electricity is coming from. + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveWater(byte side); + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + public int getStoredWater(); + + /** + * @return Return the maximum amount of stored electricity this consumer can get. + */ + public int getWaterCapacity(); +} diff --git a/minecraft/net/minecraft/src/eui/api/IWaterProducer.java b/minecraft/net/minecraft/src/eui/api/IWaterProducer.java new file mode 100644 index 00000000..fefa8eb8 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/api/IWaterProducer.java @@ -0,0 +1,20 @@ +package net.minecraft.src.eui.api; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface IWaterProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param maxvol - The maximum vol the steam pipe can take + * @param side - The side of block in which the conductor is on + * @return vol - Return the amount of vol that cam be moved at one time + */ + public int onProduceWater(int maxVol, int side); + + public boolean canProduceWater(byte side); +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java b/minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java new file mode 100644 index 00000000..539e1673 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java @@ -0,0 +1,59 @@ +package net.minecraft.src.eui.boiler; +import net.minecraft.src.*; + +public class ContainerBoiler extends Container +{ + private TileEntityBoiler boiler; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) + { + this.boiler = par2TileEntityboiler; + this.addSlot(new Slot(par2TileEntityboiler, 0, 56, 17)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + + + public void updateProgressBar(int par1, int par2) + { + if (par1 == 0) + { + // this.boiler.furnaceCookTime = par2; + } + + if (par1 == 1) + { + //this.boiler.boilerRunTime = par2; + } + + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.boiler.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java b/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java new file mode 100644 index 00000000..8ea530d6 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java @@ -0,0 +1,84 @@ +package net.minecraft.src.eui.boiler; +import java.text.DecimalFormat; + +import net.minecraft.src.*; + +import org.lwjgl.opengl.GL11; + +public class GuiBoiler extends GuiContainer +{ + private TileEntityBoiler boilerInventory; + + public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) + { + super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); + this.boilerInventory = par2TileEntityGrinder; + } + + /** + * Draw the foreground layer for the GuiContainer (everythin in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Boiler", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) + { + this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); + } + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/BoilerGui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); + int var7; + int var8; + int var9; + int var10; + if (this.boilerInventory.waterStored > 0) + { + var7 = boilerInventory.getStoredWater()*4 + 1; + this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); + } + if (this.boilerInventory.steamStored > 0) + { + var8 = boilerInventory.steamStored/14*4 + 1; + this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); + } + + float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); + var9 = (int) Math.min(precentH*3.0F,30); + this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); + float precentSH = this.boilerInventory.heatStored/1000; + var10 = (int) Math.round(precentSH*5.33); + this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); + + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" kJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java b/minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java new file mode 100644 index 00000000..5f7709a4 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java @@ -0,0 +1,60 @@ +package net.minecraft.src.eui.boiler; +import net.minecraft.src.*; + +public class SlotBoiler extends Slot +{ + /** The player that is using the GUI where this slot resides. */ + private EntityPlayer thePlayer; + private int field_48437_f; + + public SlotBoiler(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5) + { + super(par2IInventory, par3, par4, par5); + this.thePlayer = par1EntityPlayer; + } + + /** + * Check if the stack is a valid item for this slot. Always true beside for the armor slots. + */ + public boolean isItemValid(ItemStack par1ItemStack) + { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int par1) + { + if (this.getHasStack()) + { + this.field_48437_f += Math.min(par1, this.getStack().stackSize); + } + + return super.decrStackSize(par1); + } + + /** + * Called when the player picks up an item from an inventory slot + */ + public void onPickupFromSlot(ItemStack par1ItemStack) + { + this.func_48434_c(par1ItemStack); + super.onPickupFromSlot(par1ItemStack); + } + + protected void func_48435_a(ItemStack par1ItemStack, int par2) + { + this.field_48437_f += par2; + this.func_48434_c(par1ItemStack); + } + + protected void func_48434_c(ItemStack par1ItemStack) + { + par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_48437_f); + this.field_48437_f = 0; + ModLoader.takenFromFurnace(this.thePlayer, par1ItemStack); + + } +} diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..35944bcb --- /dev/null +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -0,0 +1,601 @@ +package net.minecraft.src.eui.boiler; +import net.minecraft.src.*; +import net.minecraft.src.eui.BlockMachine; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.eui.api.*; +import net.minecraft.src.eui.burner.TileEntityFireBox; +import net.minecraft.src.eui.steam.TileEntityPipe; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.forge.ISidedInventory; +import net.minecraft.src.universalelectricity.UniversalElectricity; + +public class TileEntityBoiler extends TileEntityMachine implements IInventory, ISidedInventory,ISteamProducer, IWaterConsumer +{ + + /** + * The ItemStacks that hold the items currently being used in the furnace + */ + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + + /** The number of ticks that the boiler will keep burning */ + public int RunTime = 0; + /** The ammount of energy stored before being add to run Timer */ + public int energyStore = 0; + /** The ammount of water stored */ + public int waterStored = 0; + /** The ammount of steam stored */ + public int steamStored = 0; + /** The ammount of heat stored */ + public int heatStored = 0; + public int heatMax = 10000; + /** The ammount of heat stored */ + public int hullHeat = 0; + public int hullHeatMax = 10000; + private int heatTick = 0; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + public TileEntity[] connectedFaces = {null, null, null, null, null, null, null, null}; + int steamMax = 140; + public boolean isBeingHeated = false; + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.furnaceItemStacks.length; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.furnaceItemStacks[par1]; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int par1, int par2) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var3; + + if (this.furnaceItemStacks[par1].stackSize <= par2) + { + var3 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var3; + } + else + { + var3 = this.furnaceItemStacks[par1].splitStack(par2); + + if (this.furnaceItemStacks[par1].stackSize == 0) + { + this.furnaceItemStacks[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var2 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.furnaceItemStacks[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + + /** + * Returns the name of the inventory. + */ + public String getInvName() + { + return "container.boiler"; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.furnaceItemStacks.length) + { + this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + this.RunTime = par1NBTTagCompound.getShort("BurnTime"); + this.energyStore = par1NBTTagCompound.getInteger("energyStore"); + this.steamStored = par1NBTTagCompound.getInteger("steamStore"); + this.heatStored = par1NBTTagCompound.getInteger("heatStore"); + this.waterStored = par1NBTTagCompound.getInteger("waterStore"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); + par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); + par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); + par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); + par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); + par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) + { + if (this.furnaceItemStacks[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.furnaceItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + private boolean getIsHeated() { + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); + if(blockEntity instanceof TileEntityFireBox) + { + return true; + } + else + { + return false; + } + } + private int getTextureFront() { + + return 0; + } + public TileEntity getFacingBoilers(int i) + { + + int x = this.xCoord; + int y = this.yCoord; + int z = this.zCoord; + switch(i){ + case 0: y = y - 1;break; + case 1: y = y + 1;break; + case 2: z = z + 1;break; + case 3: z = z - 1;break; + case 4: x = x + 1;break; + case 5: x = x - 1;break; + } + TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntityBoiler) + { + return aEntity; + } + + return null; + } + int count = 0; + public void updateEntity(){ + if(count == 20){ + isBeingHeated = getIsHeated(); + addConnection(); + shareResources(); + count = 0; + } + else + { + count++; + } + boolean hullHeated = false; + //changed hullHeat max depending on contents of boiler + if(waterStored>0) + { + hullHeatMax = 4700; + if(hullHeat > hullHeatMax) + { + hullHeat = 4700; + } + } + else + { + hullHeatMax = 10000; + } + //Checks if the hull is heated + if(hullHeat >= hullHeatMax) + { + hullHeated = true; + } + else + { + hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); + } + //checks if heat level hit max + if(hullHeat >= 10000) + { + if(heatTick >= 1200) + { + // TODO remove block and set fire + heatTick = 0; + } + else + { + heatTick += 1; + } + } + //adds water from container slot + addWater(); + + int heatNeeded = mod_EUIndustry.boilerHeat; // kilo joules + //if hull heated do work + if(hullHeated) + { + if(heatStored > mod_EUIndustry.fireOutput) + { + if(waterStored >= 1){ + if(heatStored >= heatNeeded) + { + heatStored = Math.max(heatStored - heatNeeded, 0); + --waterStored; + steamStored = Math.min(steamStored + mod_EUIndustry.steamOutBoiler,this.steamMax); + } + } + else + { + heatStored = 0; + } + } + } + TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); + if(blockE instanceof TileEntityFireBox) + { + if(!hullHeated || waterStored > 0) + { + heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(mod_EUIndustry.fireOutput, 1)), heatMax); + } + } + + } + int transferW = 0; + int transferS = 0; + int transferH = 0; + public void shareResources() + { + + for(int i = 0; i<6; i++) + { + if(connectedBlocks[i] instanceof TileEntityBoiler) + { + TileEntityBoiler connectedConsumer = (TileEntityBoiler)connectedBlocks[i]; + //add steam to other boiler if less + boolean canTradeSteam; + if( i ==0) + { + if(this.steamStored == this.steamMax) + { + canTradeSteam = true; + } + else + { + canTradeSteam = false; + } + } + else + { + canTradeSteam = true; + } + if(canTradeSteam) + { + if( this.steamStored > 0) + { + int SSum = (this.steamStored + connectedConsumer.steamStored)/2; + if(i == 1 && connectedConsumer.steamStored < connectedConsumer.steamMax && this.steamStored > 0){ + if(this.steamStored >= 10 ) + { + + int rejectedW = connectedConsumer.addSteam(10); + this.steamStored = Math.max(Math.min(this.steamStored - 10 + rejectedW, this.steamMax), 0); + } + else + { + int rejectedW = connectedConsumer.addSteam(this.steamStored); + this.steamStored = Math.max(Math.min(this.steamStored - this.steamStored + rejectedW, this.steamMax), 0); + } + } + if(this.steamStored > connectedConsumer.steamStored) + { + transferS = SSum - connectedConsumer.steamStored; + int rejectedS = connectedConsumer.addSteam(transferS); + this.steamStored = Math.max(Math.min(this.steamStored - transferS + rejectedS, 140), 0); + } + } + } + //add water to other boiler if less + if( this.waterStored > 0) + { + boolean canTradeWater; + if( i ==1) + { + if(this.waterStored == this.getWaterCapacity()) + { + canTradeWater = true; + } + else + { + canTradeWater = false; + } + } + else + { + canTradeWater = true; + } + if(canTradeWater) + { + int WSum = (this.waterStored + connectedConsumer.waterStored)/2; + if(i == 0 && this.waterStored > 0 && connectedConsumer.waterStored < connectedConsumer.getWaterCapacity()) + { + + int rejectedW = connectedConsumer.addwater(1); + this.waterStored = Math.max(Math.min(this.waterStored - 1 + rejectedW, this.getWaterCapacity()), 0); + } + if(this.waterStored > connectedConsumer.waterStored) + { + transferW =Math.round(WSum - connectedConsumer.waterStored); + if(transferW > 0) + { + int rejectedW = connectedConsumer.addwater(transferW); + this.waterStored = Math.max(Math.min(this.waterStored - transferW + rejectedW, this.getWaterCapacity()), 0); + } + } + + + } + + } + + + //add heat to other boiler if less + boolean canTradeHeat; + + if(this.heatStored == heatMax || !isBeingHeated) + { + canTradeHeat = true; + } + else + { + canTradeHeat = false; + } + + if(canTradeHeat) + { + if( this.heatStored > 0) + { + + if(this.heatStored > connectedConsumer.heatStored ) + { + int HSum = (this.heatStored + connectedConsumer.heatStored)/2; + transferH = HSum - connectedConsumer.heatStored; + int rejectedH = connectedConsumer.onReceiveHeat(transferH); + this.heatStored = Math.max(Math.min(this.waterStored - transferW + rejectedH, heatMax), 0); + } + + + } + } + } + } + + + } + + + private int onProduceWater(int t, int i) { + if(waterStored - t > 0) + { + waterStored = waterStored - t; + return t; + } + + return 0; + + } + public void addConnection() + { + for(int i = 0; i<6; i++) + { + + TileEntity aEntity = getSteamMachine(i); + if(aEntity instanceof TileEntityBoiler) + { + this.connectedBlocks[i] = aEntity; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + + + public int addSteam(int watt) { + int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); + this.steamStored += watt - rejectedElectricity; + return rejectedElectricity; + } + public int addwater(int watt) { + int rejectedElectricity = Math.max((this.waterStored + watt) - this.getWaterCapacity(), 0); + this.waterStored += watt - rejectedElectricity; + return rejectedElectricity; + } + public int onReceiveHeat(int watt) { + if(heatStored < heatMax) + { + int rejectedElectricity = Math.max((this.heatStored + watt) - heatMax, 0); + this.heatStored += watt - rejectedElectricity; + return rejectedElectricity; + } + return watt; + } + /** + * adds water too the system + */ + private void addWater() { + if (this.furnaceItemStacks[0] != null) + { + if(this.furnaceItemStacks[0].isItemEqual(new ItemStack(Item.bucketWater,1))) + { + if((int)waterStored < getWaterCapacity()) + { + ++waterStored; + this.furnaceItemStacks[0] = new ItemStack(Item.bucketEmpty,1); + this.onInventoryChanged(); + } + } + } + + } + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() {} + + public void closeChest() {} + + @Override + public int getStartInventorySide(int side) + { + if (side == 0) return 1; + if (side == 1) return 0; + return 2; + } + + @Override + public int getSizeInventorySide(int side) + { + return 1; + } + @Override + public int onReceiveWater(int vol, byte side) { + + if(waterStored + vol < getWaterCapacity()){ + waterStored = waterStored + (int)vol; + return 0; + } + return vol; + + } + + @Override + public int getStoredWater() { + + return this.waterStored; + + } + @Override + public int getWaterCapacity() { + return 14; + } + + public int precentHeated() { + int var1; + if(hullHeat < 100) + { + var1 = (int)(100 *(hullHeat/100)); + } + else + { + var1 = 100; + } + return var1; + } + + + @Override + public boolean canRecieveWater(byte side) { + + return true; + } + + @Override + public int onProduceSteam(float maxVol, int side) { + + if(steamStored > 0) + { + --steamStored; + return 1; + } + + return 0; + + } + + @Override + public boolean canProduceSteam(byte side) { + + return true; + + } + + } diff --git a/minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java b/minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java new file mode 100644 index 00000000..1b0264bc --- /dev/null +++ b/minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java @@ -0,0 +1,42 @@ +package net.minecraft.src.eui.burner; + +import net.minecraft.src.*; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlot(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/minecraft/net/minecraft/src/eui/burner/GUIFireBox.java b/minecraft/net/minecraft/src/eui/burner/GUIFireBox.java new file mode 100644 index 00000000..82966aaf --- /dev/null +++ b/minecraft/net/minecraft/src/eui/burner/GUIFireBox.java @@ -0,0 +1,87 @@ +package net.minecraft.src.eui.burner; + +import org.lwjgl.opengl.GL11; +import java.math.*; +import java.text.DecimalFormat; +import java.lang.Integer; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.UniversalElectricity; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if(!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if(tileEntity.containingItems[0] != null) + { + if(tileEntity.containingItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Coal"; + } + else{ + if(tileEntity.generateRate*20 < 20) + { + displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate*20)); + } + } + } + this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" KJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java b/minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java new file mode 100644 index 00000000..220750d4 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java @@ -0,0 +1,265 @@ +package net.minecraft.src.eui.burner; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.eui.api.IHeatProducer; +import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.forge.ISidedInventory; + +public class TileEntityFireBox extends TileEntityMachine implements IInventory, ISidedInventory, IHeatProducer +{ + //max heat generated per second + private int connectedUnits = 0; + public static int maxGenerateRate = 0; + //Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + public boolean isConnected = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + int count = 0; + public int itemCookTime = 0; + public ItemStack[] containingItems = new ItemStack[1]; + public void updateEntity() + {if (!this.worldObj.isRemote){ + + if(count == 20) + { + addConnection(); + sharCoal(); + + count = 0; + } + count++; + maxGenerateRate = mod_EUIndustry.fireOutput + (connectedUnits*5); + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if(blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.containingItems[0] != null && isConnected) + { + if (this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + if(isConnected) + { + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); + } + } + //Loose heat when the generator is not connected or if there is no coal in the inventory. + if(this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate-5, 0); + } + } + + //gets all connected fireBoxes and shares its supply of coal + public void sharCoal(){ + for(int i =0; i<6;i++) + { + + if(connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if(this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.containingItems[0].stackSize > 0) + { + if(connectedConsumer.containingItems[0] != null) + { + if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.containingItems[0].stackSize + connectedConsumer.containingItems[0].stackSize)/2; + if(this.containingItems[0].stackSize > connectedConsumer.containingItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.containingItems[0].stackSize); + connectedConsumer.containingItems[0].stackSize = connectedConsumer.containingItems[0].stackSize + transferC; + this.containingItems[0].stackSize = this.containingItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.containingItems[0] = new ItemStack(this.containingItems[0].getItem()); + this.containingItems[0].stackSize -= 1; + } + } + } + } + } + + + } + public void addConnection() + { + connectedUnits = 0; + for(int i = 0; i<6; i++) + { + + TileEntity aEntity = getSteamMachine(i); + if(aEntity instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(int side) + { + if (side == 0) + { + return 1; + } + if (side == 1) + { + return 0; + } + return 2; + } + @Override + public int getSizeInventorySide(int side) { return getSizeInventory(); } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "FireBox"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + @Override + public float onProduceHeat(float jouls, int side) { + // TODO Auto-generated method stub + return Math.min(generateRate,jouls); + } +} diff --git a/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java b/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java new file mode 100644 index 00000000..f9827d4c --- /dev/null +++ b/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java @@ -0,0 +1,87 @@ +package net.minecraft.src.eui.grinder; +import net.minecraft.src.*; + +public class ContainerGrinder extends Container +{ + private TileEntityGrinder grinder; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerGrinder(InventoryPlayer par1InventoryPlayer, TileEntityGrinder par2TileEntityGrinder) + { + this.grinder = par2TileEntityGrinder; + this.addSlot(new Slot(par2TileEntityGrinder, 0, 56, 17)); + //this.addSlot(new Slot(par2TileEntityGrinder, 1, 116, 35)); + this.addSlot(new SlotGrinder(par1InventoryPlayer.player, par2TileEntityGrinder, 1, 116, 35)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + /** + * Updates crafting matrix; called from onCraftMatrixChanged. Args: none + */ + public void updateCraftingResults() + { + super.updateCraftingResults(); + + for (int var1 = 0; var1 < this.crafters.size(); ++var1) + { + ICrafting var2 = (ICrafting)this.crafters.get(var1); + + if (this.lastCookTime != this.grinder.furnaceCookTime) + { + var2.updateCraftingInventoryInfo(this, 0, this.grinder.furnaceCookTime); + } + + if (this.lastBurnTime != this.grinder.GrinderRunTime) + { + var2.updateCraftingInventoryInfo(this, 1, this.grinder.GrinderRunTime); + } + } + + this.lastCookTime = this.grinder.furnaceCookTime; + this.lastBurnTime = this.grinder.GrinderRunTime; + } + + public void updateProgressBar(int par1, int par2) + { + if (par1 == 0) + { + this.grinder.furnaceCookTime = par2; + } + + if (par1 == 1) + { + this.grinder.GrinderRunTime = par2; + } + + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.grinder.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + + return null; + } +} diff --git a/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java b/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java new file mode 100644 index 00000000..90a8cd59 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java @@ -0,0 +1,74 @@ +package net.minecraft.src.eui.grinder; +import net.minecraft.src.*; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class GrinderRecipes +{ + private static final GrinderRecipes smeltingBase = new GrinderRecipes(); + + /** The list of smelting results. */ + private Map smeltingList = new HashMap(); + private Map metaSmeltingList = new HashMap(); + + /** + * Used to call methods addSmelting and getSmeltingResult. + */ + public static final GrinderRecipes smelting() + { + return smeltingBase; + } + + private GrinderRecipes() + { + + this.addSmelting(Item.coal.shiftedIndex, new ItemStack(mod_EUIndustry.coalNugget, 2,0)); + this.addSmelting(mod_EUIndustry.coalNugget.shiftedIndex,0, new ItemStack(mod_EUIndustry.coalNugget,2,1)); + this.addSmelting(mod_EUIndustry.coalNugget.shiftedIndex,1, new ItemStack(mod_EUIndustry.coalNugget,2,2)); + } + + /** + * Adds a smelting recipe. + */ + public void addSmelting(int par1, ItemStack par2ItemStack) + { + this.smeltingList.put(Integer.valueOf(par1), par2ItemStack); + } + + public Map getSmeltingList() + { + return this.smeltingList; + } + + /** + * Add a metadata-sensitive furnace recipe + * @param itemID The Item ID + * @param metadata The Item Metadata + * @param itemstack The ItemStack for the result + */ + public void addSmelting(int itemID, int metadata, ItemStack itemstack) + { + metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack); + } + + /** + * Used to get the resulting ItemStack form a source ItemStack + * @param item The Source ItemStack + * @return The result ItemStack + */ + public ItemStack getSmeltingResult(ItemStack item) + { + if (item == null) + { + return null; + } + ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage())); + if (ret != null) + { + return ret; + } + return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID)); + } +} diff --git a/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java b/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java new file mode 100644 index 00000000..8be9ef57 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java @@ -0,0 +1,46 @@ +package net.minecraft.src.eui.grinder; +import net.minecraft.src.*; +import org.lwjgl.opengl.GL11; + +public class GuiGrinder extends GuiContainer +{ + private TileEntityGrinder grinderInventory; + + public GuiGrinder(InventoryPlayer par1InventoryPlayer, TileEntityGrinder par2TileEntityGrinder) + { + super(new ContainerGrinder(par1InventoryPlayer, par2TileEntityGrinder)); + this.grinderInventory = par2TileEntityGrinder; + } + + /** + * Draw the foreground layer for the GuiContainer (everythin in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Coal Processor", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/GrinderGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + int var7; + + if (this.grinderInventory.isBurning()) + { + var7 = this.grinderInventory.getBurnTimeRemainingScaled(12); + this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2); + } + + var7 = this.grinderInventory.getCookProgressScaled(24); + this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16); + } +} diff --git a/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java b/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java new file mode 100644 index 00000000..feb08e7a --- /dev/null +++ b/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java @@ -0,0 +1,60 @@ +package net.minecraft.src.eui.grinder; +import net.minecraft.src.*; + +public class SlotGrinder extends Slot +{ + /** The player that is using the GUI where this slot resides. */ + private EntityPlayer thePlayer; + private int field_48437_f; + + public SlotGrinder(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5) + { + super(par2IInventory, par3, par4, par5); + this.thePlayer = par1EntityPlayer; + } + + /** + * Check if the stack is a valid item for this slot. Always true beside for the armor slots. + */ + public boolean isItemValid(ItemStack par1ItemStack) + { + return false; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int par1) + { + if (this.getHasStack()) + { + this.field_48437_f += Math.min(par1, this.getStack().stackSize); + } + + return super.decrStackSize(par1); + } + + /** + * Called when the player picks up an item from an inventory slot + */ + public void onPickupFromSlot(ItemStack par1ItemStack) + { + this.func_48434_c(par1ItemStack); + super.onPickupFromSlot(par1ItemStack); + } + + protected void func_48435_a(ItemStack par1ItemStack, int par2) + { + this.field_48437_f += par2; + this.func_48434_c(par1ItemStack); + } + + protected void func_48434_c(ItemStack par1ItemStack) + { + par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_48437_f); + this.field_48437_f = 0; + ModLoader.takenFromFurnace(this.thePlayer, par1ItemStack); + + } +} diff --git a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java new file mode 100644 index 00000000..4ff8c8a6 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java @@ -0,0 +1,386 @@ +package net.minecraft.src.eui.grinder; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.UEIConsumer; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.forge.ISidedInventory; + +public class TileEntityGrinder extends TileEntityMachine implements IInventory, ISidedInventory, UEIConsumer +{ + + /** + * The ItemStacks that hold the items currently being used in the furnace + */ + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + + /** The number of ticks that the furnace will keep burning */ + public int GrinderRunTime = 0; + /** The ammount of energy stored before turning into runtimer */ + public int energyStore = 0; + + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int currentItemBurnTime = 0; + + /** The number of ticks that the current item has been cooking for */ + public int furnaceCookTime = 0; + + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.furnaceItemStacks.length; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.furnaceItemStacks[par1]; + } + + /** + * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new + * stack. + */ + public ItemStack decrStackSize(int par1, int par2) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var3; + + if (this.furnaceItemStacks[par1].stackSize <= par2) + { + var3 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var3; + } + else + { + var3 = this.furnaceItemStacks[par1].splitStack(par2); + + if (this.furnaceItemStacks[par1].stackSize == 0) + { + this.furnaceItemStacks[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var2 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.furnaceItemStacks[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + + /** + * Returns the name of the inventory. + */ + public String getInvName() + { + return "container.furnace"; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.furnaceItemStacks.length) + { + this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + this.GrinderRunTime = par1NBTTagCompound.getShort("BurnTime"); + this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime"); + this.energyStore = par1NBTTagCompound.getInteger("energyStore"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("BurnTime", (short)this.GrinderRunTime); + par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime); + par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) + { + if (this.furnaceItemStacks[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.furnaceItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Returns an integer between 0 and the passed value representing how close the current item is to being completely + * cooked + */ + public int getCookProgressScaled(int par1) + { + return this.furnaceCookTime * par1 / 600; + } + + /** + * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel + * item, where 0 means that the item is exhausted and the passed value means that the item is fresh + */ + public int getBurnTimeRemainingScaled(int par1) + { + + return this.GrinderRunTime * par1 / 120; + } + + /** + * Returns true if the furnace is currently burning + */ + public boolean isBurning() + { + return this.GrinderRunTime > 0; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void updateEntity() + { + boolean var1 = this.GrinderRunTime > 0; + boolean var2 = false; + + + if (!this.worldObj.isRemote) + { + if(this.GrinderRunTime < 120) + { + int varE = (int) (this.energyStore / 50); + if(GrinderRunTime + varE >= 120) + { + this.GrinderRunTime = this.GrinderRunTime + varE; + this.energyStore = this.energyStore - (varE * 150); + } + } + if (this.GrinderRunTime > 0) + { + --this.GrinderRunTime; + } + if (this.isBurning() && this.canSmelt()) + { + ++this.furnaceCookTime; + + if (this.furnaceCookTime == 600) + { + this.furnaceCookTime = 0; + this.smeltItem(); + var2 = true; + } + } + else + { + this.furnaceCookTime = 0; + } + + } + + if (var2) + { + this.onInventoryChanged(); + } + } + + /** + * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc. + */ + private boolean canSmelt() + { + if (this.furnaceItemStacks[0] == null) + { + return false; + } + else + { + ItemStack var1 = GrinderRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); + if(var1 == null) + { + return false; + } + if(this.furnaceItemStacks[1] == null) + { + return true; + } + if (!this.furnaceItemStacks[1].isItemEqual(var1)) + { + return false; + } + int result = furnaceItemStacks[1].stackSize + var1.stackSize; + return (result <= getInventoryStackLimit() && result <= var1.getMaxStackSize()); + } + } + + /** + * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack + */ + public void smeltItem() + { + if (this.canSmelt()) + { + ItemStack var1 = GrinderRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); + if (this.furnaceItemStacks[1] == null) + { + this.furnaceItemStacks[1] = var1.copy(); + } + if (this.furnaceItemStacks[1].isItemEqual(var1)) + { + this.furnaceItemStacks[1].stackSize += var1.stackSize; + } + + if (this.furnaceItemStacks[0].getItem().func_46056_k()) + { + this.furnaceItemStacks[0] = new ItemStack(this.furnaceItemStacks[0].getItem().setFull3D()); + } + else + { + --this.furnaceItemStacks[0].stackSize; + } + + if (this.furnaceItemStacks[0].stackSize <= 0) + { + this.furnaceItemStacks[0] = null; + } + } + } + + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() {} + + public void closeChest() {} + + @Override + public int getStartInventorySide(int side) + { + if (side == 0) return 1; + if (side == 1) return 0; + return 2; + } + + @Override + public int getSizeInventorySide(int side) + { + return 1; + } + + @Override + public int onReceiveElectricity(int watts, int voltage, byte side) { + //can store 1 min of energy too do work + if(this.energyStore <= 1000) + { + if(!(this.energyStore + watts > 1000)) + { + this.energyStore = this.energyStore + watts; + return 0; + } + else + { + int varB = watts - this.energyStore; + int eGain = (varB * varB) / 2; + this.energyStore = this.energyStore + eGain; + return (watts - eGain); + } + } + return watts; + } + + @Override + public int getStoredElectricity() { + // TODO what is acutal returned + return this.energyStore; + } + @Override + public int getElectricityCapacity() { + // TODO Auto-generated method stub + return 1000; + } + + @Override + public boolean canRecieveElectricity(byte side) { + // TODO Auto-generated method stub + return true; + } + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 120; + } + + + } diff --git a/minecraft/net/minecraft/src/eui/steam/BlockPipe.java b/minecraft/net/minecraft/src/eui/steam/BlockPipe.java new file mode 100644 index 00000000..58028088 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/BlockPipe.java @@ -0,0 +1,139 @@ +package net.minecraft.src.eui.steam; + +import java.util.ArrayList; + +import net.minecraft.src.eui.api.*; +import net.minecraft.src.eui.*; +import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.eui.turbine.TileEntityGenerator; +import net.minecraft.src.eui.steam.TileEntityPipe; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockPipe extends BlockContainer +{ + static String type = ""; + public BlockPipe(int id) + { + super(id, Material.iron); + this.setBlockName("Pipe"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return mod_EUIndustry.pipeID; + } + + public TileEntity getBlockEntity() + { + return new TileEntityPipe(); + } + + //Per tick + public int conductorCapacity() + { + return 5; + } + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side) + { + switch(side) + { + case 0: y -= 1; break; + case 1: y += 1; break; + case 2: z += 1; break; + case 3: z -= 1; break; + case 4: x += 1; break; + case 5: x -= 1; break; + } + + //Check if the designated block is a UE Unit - producer, consumer or a conductor + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity returnValue = null; + + if(tileEntity instanceof ISteamConsumer) + { + if(((ISteamConsumer)tileEntity).canRecieveSteam(UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + if (tileEntity instanceof ISteamProducer) + { + if(((ISteamProducer)tileEntity).canProduceSteam(UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + return returnValue; + } + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + this.updateConductorTileEntity(world, x, y, z); + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + + this.updateConductorTileEntity(world, x, y, z); + } + + public void updateConductorTileEntity(World world, int x, int y, int z) + { + for(byte i = 0; i < 6; i++) + { + //Update the tile entity on neighboring blocks + TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i), i); + } + } + + + } + + diff --git a/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java b/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java new file mode 100644 index 00000000..160544ec --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java @@ -0,0 +1,139 @@ +package net.minecraft.src.eui.steam; + +import java.util.ArrayList; + +import net.minecraft.src.eui.api.IWaterConsumer; +import net.minecraft.src.eui.api.IWaterProducer; +import net.minecraft.src.eui.*; +import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.eui.turbine.TileEntityGenerator; +import net.minecraft.src.eui.steam.TileEntityPipeWater; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockPipeWater extends BlockContainer +{ + static String type = ""; + public BlockPipeWater(int id) + { + super(id, Material.iron); + this.setBlockName("PipeW"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return mod_EUIndustry.pipeID; + } + + public TileEntity getBlockEntity() + { + return new TileEntityPipeWater(); + } + + //Per tick + public int conductorCapacity() + { + return 5; + } + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side) + { + switch(side) + { + case 0: y -= 1; break; + case 1: y += 1; break; + case 2: z += 1; break; + case 3: z -= 1; break; + case 4: x += 1; break; + case 5: x -= 1; break; + } + + //Check if the designated block is a UE Unit - producer, consumer or a conductor + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity returnValue = null; + + if(tileEntity instanceof IWaterConsumer) + { + if(((IWaterConsumer)tileEntity).canRecieveWater(UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + if (tileEntity instanceof IWaterProducer) + { + if(((IWaterProducer)tileEntity).canProduceWater(UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + return returnValue; + } + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + this.updateConductorTileEntity(world, x, y, z); + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + + this.updateConductorTileEntity(world, x, y, z); + } + + public void updateConductorTileEntity(World world, int x, int y, int z) + { + for(byte i = 0; i < 6; i++) + { + //Update the tile entity on neighboring blocks + TileEntityPipeWater conductorTileEntity = (TileEntityPipeWater)world.getBlockTileEntity(x, y, z); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i), i); + } + } + + } + + diff --git a/minecraft/net/minecraft/src/eui/steam/ItemPipe.java b/minecraft/net/minecraft/src/eui/steam/ItemPipe.java new file mode 100644 index 00000000..a30e52bb --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/ItemPipe.java @@ -0,0 +1,123 @@ +package net.minecraft.src.eui.steam; + +import java.util.ArrayList; + +import net.minecraft.src.forge.*; +import net.minecraft.src.*; + +public class ItemPipe extends Item implements ITextureProvider +{ + private int spawnID; + + public ItemPipe(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("pipe"); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 11; + case 1: return 10; + } + return this.iconIndex; + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "waterPipe"; + case 0: return "steamPipe"; + } + return this.getItemName(); + } + /** + * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return + * True if something happen and false if it don't. This is for ITEMS, not BLOCKS ! + */ + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + { + int blockID = par3World.getBlockId(par4, par5, par6); + if(par1ItemStack.getItemDamage() == 0) + { + spawnID = mod_EUIndustry.pipeBlockID; + } + if(par1ItemStack.getItemDamage() == 1) + { + spawnID = mod_EUIndustry.pipeBlockID2; + } + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (par3World.canBlockBePlacedAt(this.spawnID, par4, par5, par6, false, par7)) + { + Block var9 = Block.blocksList[this.spawnID]; + + if (par3World.setBlockWithNotify(par4, par5, par6, this.spawnID)) + { + if (par3World.getBlockId(par4, par5, par6) == this.spawnID) + { + Block.blocksList[this.spawnID].onBlockPlaced(par3World, par4, par5, par6, par7); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + } + + --par1ItemStack.stackSize; + + return true; + } + } + + return false; + } + + @Override + public String getTextureFile() { + return "/eui/Items.png"; + } + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); +} + +} diff --git a/minecraft/net/minecraft/src/eui/steam/ModelPipe.java b/minecraft/net/minecraft/src/eui/steam/ModelPipe.java new file mode 100644 index 00000000..da86f193 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/ModelPipe.java @@ -0,0 +1,98 @@ +package net.minecraft.src.eui.steam; + +import net.minecraft.src.*; + +public class ModelPipe extends ModelBase +{ + //fields + ModelRenderer Middle; + ModelRenderer Right; + ModelRenderer Left; + ModelRenderer Back; + ModelRenderer Front; + ModelRenderer Top; + ModelRenderer Bottom; + + public ModelPipe() + { + textureWidth = 64; + textureHeight = 32; + + Middle = new ModelRenderer(this, 0, 0); + Middle.addBox(-1F, -1F, -1F, 4, 4, 4); + Middle.setRotationPoint(-1F, 15F, -1F); + Middle.setTextureSize(64, 32); + Middle.mirror = true; + setRotation(Middle, 0F, 0F, 0F); + Right = new ModelRenderer(this, 21, 0); + Right.addBox(0F, 0F, 0F, 6, 4, 4); + Right.setRotationPoint(2F, 14F, -2F); + Right.setTextureSize(64, 32); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + Left = new ModelRenderer(this, 21, 0); + Left.addBox(0F, 0F, 0F, 6, 4, 4); + Left.setRotationPoint(-8F, 14F, -2F); + Left.setTextureSize(64, 32); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + Back = new ModelRenderer(this, 0, 11); + Back.addBox(0F, 0F, 0F, 4, 4, 6); + Back.setRotationPoint(-2F, 14F, 2F); + Back.setTextureSize(64, 32); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + Front = new ModelRenderer(this, 0, 11); + Front.addBox(0F, 0F, 0F, 4, 4, 6); + Front.setRotationPoint(-2F, 14F, -8F); + Front.setTextureSize(64, 32); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + Top = new ModelRenderer(this, 21, 11); + Top.addBox(0F, 0F, 0F, 4, 6, 4); + Top.setRotationPoint(-2F, 8F, -2F); + Top.setTextureSize(64, 32); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Bottom = new ModelRenderer(this, 21, 11); + Bottom.addBox(0F, 0F, 0F, 4, 6, 4); + Bottom.setRotationPoint(-2F, 18F, -2F); + Bottom.setTextureSize(64, 32); + Bottom.mirror = true; + setRotation(Bottom, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() { Middle.render(0.0625F); } + public void renderBottom() { Bottom.render(0.0625F); } + public void renderTop() { Top.render(0.0625F); } + public void renderLeft() { Left.render(0.0625F); } + public void renderRight() { Right.render(0.0625F); } + public void renderBack() { Back.render(0.0625F); } + public void renderFront() { Front.render(0.0625F);} + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/minecraft/net/minecraft/src/eui/steam/RenderPipe.java b/minecraft/net/minecraft/src/eui/steam/RenderPipe.java new file mode 100644 index 00000000..7a0a8637 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/RenderPipe.java @@ -0,0 +1,40 @@ +package net.minecraft.src.eui.steam; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderPipe extends TileEntitySpecialRenderer +{ + private ModelPipe model; + + public RenderPipe() + { + model = new ModelPipe(); + } + + public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) + { + //Texture file + bindTextureByName("/eui/CopperWire.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) model.renderTop(); + if(tileEntity.connectedBlocks[2] != null) model.renderFront(); + if(tileEntity.connectedBlocks[3] != null) model.renderBack(); + if(tileEntity.connectedBlocks[4] != null) model.renderRight(); + if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); + + model.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java b/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java new file mode 100644 index 00000000..30ed6bff --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java @@ -0,0 +1,40 @@ +package net.minecraft.src.eui.steam; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderPipeWater extends TileEntitySpecialRenderer +{ + private ModelPipe model; + + public RenderPipeWater() + { + model = new ModelPipe(); + } + + public void renderAModelAt(TileEntityPipeWater tileEntity, double d, double d1, double d2, float f) + { + //Texture file + bindTextureByName("/eui/WaterPipe.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) model.renderTop(); + if(tileEntity.connectedBlocks[2] != null) model.renderFront(); + if(tileEntity.connectedBlocks[3] != null) model.renderBack(); + if(tileEntity.connectedBlocks[4] != null) model.renderRight(); + if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); + + model.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipeWater)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java new file mode 100644 index 00000000..966b8e7e --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java @@ -0,0 +1,213 @@ +package net.minecraft.src.eui.steam; + +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.eui.api.ISteamConsumer; +import net.minecraft.src.eui.api.ISteamProducer; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.Vector3; + +public class TileEntityPipe extends TileEntity implements ISteamConsumer +{ + //The amount of electricity stored in the conductor + protected int steamStored = 0; + + //The maximum amount of electricity this conductor can take + protected int capacity = 5; + + //Stores information on all connected blocks around this tile entity + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + + //Checks if this is the first the tile entity updates + protected boolean firstUpdate = true; + + /** + * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity + * should transfer + */ + public TileEntity closestConsumer = null; + + /** + * This function adds a connection between this conductor and the UE unit + * @param tileEntity - Must be either a producer, consumer or a conductor + * @param side - side in which the connection is coming from + */ + public void addConnection(TileEntity tileEntity, byte side) + { + if(tileEntity instanceof ISteamConsumer || tileEntity instanceof ISteamProducer) + { + this.connectedBlocks[side] = tileEntity; + } + else + { + this.connectedBlocks[side] = null; + } + } + + /** + * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). + * @param watts - The amount of watt this block recieved + * @param side - The side of the block in which the electricity came from + * @return watt - The amount of rejected power to be sent back into the conductor + */ + @Override + public int onReceiveSteam(int watt, byte side) + { + int rejectedElectricity = Math.max((this.steamStored + watt) - this.capacity, 0); + this.steamStored += watt - rejectedElectricity; + return rejectedElectricity; + } + + /** + * You can use this to check if a wire can connect to this UE consumer to properly render the graphics + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveSteam(byte side) + { + return true; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + @Override + public void updateEntity() + { + if(this.firstUpdate) + { + //Update some variables + BlockPipe conductorBlock = (BlockPipe)this.getBlockType(); + this.capacity = (conductorBlock).conductorCapacity(); + ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + this.firstUpdate = false; + } + + //Spread the electricity to neighboring blocks + byte connectedUnits = 0; + byte connectedConductors = 1; + int averageElectricity = this.steamStored; + this.closestConsumer = null; + + Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); + if(this.steamStored * 3.3 > 250) + { + // TODO add logic to damage pipe if steam rises to 250PSI + } + //Find the connected unit with the least amount of electricity and give more to them + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + if(connectedBlocks[i] instanceof ISteamConsumer) + { + connectedUnits ++; + + if(connectedBlocks[i].getClass() == this.getClass()) + { + averageElectricity += ((TileEntityPipe)connectedBlocks[i]).steamStored; + + TileEntity tileEntity = ((TileEntityPipe)connectedBlocks[i]).closestConsumer; + + if(tileEntity != null) + { + this.closestConsumer = tileEntity; + } + + connectedConductors ++; + } + else if(connectedBlocks[i] instanceof ISteamConsumer) + { + if(((ISteamConsumer)connectedBlocks[i]).canRecieveSteam(UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + this.closestConsumer = connectedBlocks[i]; + } + } + + } + } + } + + averageElectricity = averageElectricity/connectedConductors; + + + float averageWatt = 0; + + if(connectedUnits > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the electricity among the different blocks + if(connectedBlocks[i] instanceof ISteamConsumer && this.steamStored > 0) + { + if(((ISteamConsumer)connectedBlocks[i]).canRecieveSteam(UniversalElectricity.getOrientationFromSide(i, (byte) 2))) + { + int transferElectricityAmount = 0; + ISteamConsumer connectedConsumer = ((ISteamConsumer)connectedBlocks[i]); + + if(connectedBlocks[i].getClass() == this.getClass() && this.steamStored > ((TileEntityPipe)connectedConsumer).steamStored) + { + transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipe)connectedConsumer).steamStored, this.steamStored), 0); + } + else if(!(connectedConsumer instanceof TileEntityPipe)) + { + transferElectricityAmount = this.steamStored; + } + + int rejectedElectricity = connectedConsumer.onReceiveSteam(transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.steamStored = Math.max(Math.min(this.steamStored - transferElectricityAmount + rejectedElectricity, this.capacity), 0); + } + } + + if(connectedBlocks[i] instanceof ISteamProducer && this.steamStored < this.getSteamCapacity()) + { + if(((ISteamProducer)connectedBlocks[i]).canProduceSteam(UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + int gainedElectricity = ((ISteamProducer)connectedBlocks[i]).onProduceSteam(this.capacity-this.steamStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.steamStored = Math.max(Math.min(this.steamStored + gainedElectricity, this.capacity), 0); + } + } + } + } + } + } + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + @Override + public int getStoredSteam() + { + return this.steamStored; + } + + @Override + public int getSteamCapacity() + { + return this.capacity; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.steamStored = par1NBTTagCompound.getInteger("steamStored"); + this.capacity = par1NBTTagCompound.getInteger("capacity"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("steamStored", this.steamStored); + par1NBTTagCompound.setInteger("capacity", this.capacity); + } + +} + diff --git a/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java b/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java new file mode 100644 index 00000000..2423e4d2 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java @@ -0,0 +1,207 @@ +package net.minecraft.src.eui.steam; + +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.eui.api.IWaterConsumer; +import net.minecraft.src.eui.api.IWaterProducer; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.Vector3; + +public class TileEntityPipeWater extends TileEntity implements IWaterConsumer +{ + //The amount of electricity stored in the conductor + protected int waterStored = 0; + + //The maximum amount of electricity this conductor can take + protected int capacity = 5; + + //Stores information on all connected blocks around this tile entity + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + + //Checks if this is the first the tile entity updates + protected boolean firstUpdate = true; + + /** + * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity + * should transfer + */ + public TileEntity closestConsumer = null; + + /** + * This function adds a connection between this conductor and the UE unit + * @param tileEntity - Must be either a producer, consumer or a conductor + * @param side - side in which the connection is coming from + */ + public void addConnection(TileEntity tileEntity, byte side) + { + if(tileEntity instanceof IWaterConsumer || tileEntity instanceof IWaterProducer) + { + this.connectedBlocks[side] = tileEntity; + } + else + { + this.connectedBlocks[side] = null; + } + } + + /** + * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). + * @param watts - The amount of watt this block recieved + * @param side - The side of the block in which the electricity came from + * @return watt - The amount of rejected power to be sent back into the conductor + */ + @Override + public int onReceiveWater(int watt, byte side) + { + int rejectedElectricity = Math.max((this.waterStored + watt) - this.capacity, 0); + this.waterStored += watt - rejectedElectricity; + return rejectedElectricity; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + @Override + public void updateEntity() + { + if(this.firstUpdate) + { + //Update some variables + BlockPipeWater conductorBlock = (BlockPipeWater)this.getBlockType(); + this.capacity = (conductorBlock).conductorCapacity(); + ((BlockPipeWater)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + this.firstUpdate = false; + } + + //Spread the electricity to neighboring blocks + byte connectedUnits = 0; + byte connectedConductors = 1; + int averageElectricity = this.waterStored; + this.closestConsumer = null; + + Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); + + //Find the connected unit with the least amount of electricity and give more to them + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + if(connectedBlocks[i] instanceof IWaterConsumer) + { + connectedUnits ++; + + if(connectedBlocks[i].getClass() == this.getClass()) + { + averageElectricity += ((TileEntityPipeWater)connectedBlocks[i]).waterStored; + + TileEntity tileEntity = ((TileEntityPipeWater)connectedBlocks[i]).closestConsumer; + + if(tileEntity != null) + { + this.closestConsumer = tileEntity; + } + + connectedConductors ++; + } + else if(connectedBlocks[i] instanceof IWaterConsumer) + { + if(((IWaterConsumer)connectedBlocks[i]).canRecieveWater(UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + this.closestConsumer = connectedBlocks[i]; + } + } + + } + } + } + + averageElectricity = averageElectricity/connectedConductors; + + + float averageWatt = 0; + + if(connectedUnits > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the electricity among the different blocks + if(connectedBlocks[i] instanceof IWaterConsumer && this.waterStored > 0) + { + if(((IWaterConsumer)connectedBlocks[i]).canRecieveWater(UniversalElectricity.getOrientationFromSide(i, (byte) 2))) + { + int transferElectricityAmount = 0; + IWaterConsumer connectedConsumer = ((IWaterConsumer)connectedBlocks[i]); + + if(connectedBlocks[i].getClass() == this.getClass() && this.waterStored > ((TileEntityPipeWater)connectedConsumer).waterStored) + { + transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipeWater)connectedConsumer).waterStored, this.waterStored), 0); + } + else if(!(connectedConsumer instanceof TileEntityPipeWater)) + { + transferElectricityAmount = this.waterStored; + } + + int rejectedElectricity = connectedConsumer.onReceiveWater(transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.waterStored = Math.max(Math.min(this.waterStored - transferElectricityAmount + rejectedElectricity, this.capacity), 0); + } + } + + if(connectedBlocks[i] instanceof IWaterProducer && this.waterStored < this.getWaterCapacity()) + { + if(((IWaterProducer)connectedBlocks[i]).canProduceWater(UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + int gainedElectricity = ((IWaterProducer)connectedBlocks[i]).onProduceWater(this.capacity-this.waterStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.waterStored = Math.max(Math.min(this.waterStored + gainedElectricity, this.capacity), 0); + } + } + } + } + } + } + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + @Override + public int getStoredWater() + { + return this.waterStored; + } + + @Override + public int getWaterCapacity() + { + return this.capacity; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + this.capacity = par1NBTTagCompound.getInteger("capacity"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("waterStored", this.waterStored); + par1NBTTagCompound.setInteger("capacity", this.capacity); + } + + @Override + public boolean canRecieveWater(byte side) { + // TODO Auto-generated method stub + return true; + } + +} + diff --git a/minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java b/minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java new file mode 100644 index 00000000..dea1a8bc --- /dev/null +++ b/minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java @@ -0,0 +1,41 @@ +package net.minecraft.src.eui.turbine; + +import net.minecraft.src.*; + +public class ContainerGenerator extends Container +{ + private TileEntityGenerator tileEntity; + + public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + { + this.tileEntity = tileEntity; + this.addSlot(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java b/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java new file mode 100644 index 00000000..e8954ca3 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java @@ -0,0 +1,77 @@ +package net.minecraft.src.eui.turbine; + +import org.lwjgl.opengl.GL11; +import java.math.*; +import java.lang.Integer; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; +import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; + + public class GUIGenerator extends GuiContainer + { + private TileEntityGenerator tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + { + super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + if(tileEntity.connectedWire == null) + { + displayText = "Not Connected"; + } + else if(tileEntity.generateRate*20 <= 0) + { + if(tileEntity.steamStored> 0) + { + displayText = "Power Full"; + } + if(tileEntity.steamStored<= 0) + { + displayText = "No Steam"; + } + } + else if(tileEntity.generateRate*20 < 20) + { + displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); + } + displayText2 = "water" + "-" + tileEntity.waterStored; + displayText3 = "steam" + "-" + tileEntity.steamStored; + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java new file mode 100644 index 00000000..316b3fd4 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java @@ -0,0 +1,305 @@ +package net.minecraft.src.eui.turbine; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.eui.api.*; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.forge.ISidedInventory; + +public class TileEntityGenerator extends TileEntityMachine implements UEIProducer,ISteamConsumer,IWaterProducer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public int maxGenerateRate = 1000; + public int waterStored = 0; + public int steamStored = 0; + public int steamConsumed = 0; + //Current generation rate based on hull heat. In TICKS. + public float generateRate = 0; + public UETileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int itemCookTime = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + + @Override + public int onProduceElectricity(int maxWatts, int voltage, byte side) + { + //Only produce electricity on the back side. + if(canProduceElectricity(side) && maxWatts > 0) + { + return Math.min(maxWatts, (int)generateRate); + } + return 0; + } + + @Override + public boolean canProduceElectricity(byte side) + { + return true; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void updateEntity() + { + //Check nearby blocks and see if the conductor is full. If so, then it is connected + TileEntity tileEntity = UEBlockConductor.getUEUnit(this.worldObj, this.xCoord, this.yCoord, this.zCoord, UniversalElectricity.getOrientationFromSide(this.getDirection(), (byte)2)); + + if(tileEntity instanceof UETileEntityConductor) + { + if(((UETileEntityConductor)tileEntity).closestConsumer != null) + { + this.connectedWire = (UETileEntityConductor)tileEntity; + } + else + { + this.connectedWire = null; + } + } + else + { + this.connectedWire = null; + } + + if (!this.worldObj.isRemote) + { + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) + { + if(this.waterStored > 0) + { + this.containingItems[0] = new ItemStack(Item.bucketWater,1); + --waterStored; + } + } + } + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + + if(this.connectedWire != null && this.connectedWire.getStoredElectricity() < this.connectedWire.getElectricityCapacity()) + { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); + } + } + else + { + if(steamStored > 0) + { + --steamStored; + ++steamConsumed; + if(steamConsumed == mod_EUIndustry.steamOutBoiler) + { + ++waterStored; + steamConsumed = 0; + } + itemCookTime = itemCookTime + 65; + } + } + + if(this.connectedWire == null || this.itemCookTime <= 0) + { + this.generateRate = (float)Math.max(this.generateRate-0.05, 0); + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); + this.steamStored = par1NBTTagCompound.getInteger("steamStored"); + this.generateRate = par1NBTTagCompound.getFloat("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); + par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); + par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(int side) + { + if (side == 0) + { + return 1; + } + if (side == 1) + { + return 0; + } + return 2; + } + @Override + public int getSizeInventorySide(int side) { return getSizeInventory(); } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + + @Override + public int onReceiveSteam(int vol, byte side) { + + + if(steamStored + vol <= 100) + { + steamStored = steamStored + vol; + return 0; + } + return vol; + + } + + @Override + public boolean canRecieveSteam(byte side) { + + return true; + } + + @Override + public int getStoredSteam() { + + return this.steamStored; + } + + @Override + public int getSteamCapacity() { + return 100; + } + + @Override + public int onProduceWater(int maxVol, int side) { + + if(this.waterStored > 0) + { + --waterStored; + return 1; + } + + return 0; + } + + @Override + public boolean canProduceWater(byte side) { + + return true; + } + + + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 120; + } +} diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java new file mode 100644 index 00000000..3434e391 --- /dev/null +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -0,0 +1,132 @@ +package net.minecraft.src; +import net.minecraft.client.Minecraft; +import net.minecraft.src.eui.*; +import net.minecraft.src.eui.steam.RenderPipe; +import net.minecraft.src.eui.steam.RenderPipeWater; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +import java.util.ArrayList; +import java.util.Map; +import java.io.*; +public class mod_EUIndustry extends NetworkMod { + static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); + private static int coalID = configurationProperties(); + private static int BlockID; + public static int pipeID; + public static int partID; + public static int pipeBlockID; + public static int pipeBlockID2; + public static int genOutput; + public static int steamOutBoiler; + public static int pipeLoss; + public static int boilerHeat; + public static int fireOutput; + public static Block machine = new net.minecraft.src.eui.BlockMachine(BlockID).setBlockName("machine"); + public static Block pipe = new net.minecraft.src.eui.steam.BlockPipe(pipeBlockID).setBlockName("pipe"); + public static Block pipeW = new net.minecraft.src.eui.steam.BlockPipeWater(pipeBlockID2).setBlockName("pipeW"); + public static Item coalNugget = new net.minecraft.src.eui.ItemCoalFuel(coalID); + public static Item pipeItem = new net.minecraft.src.eui.steam.ItemPipe(pipeID); + public static Item parts = new net.minecraft.src.eui.ItemParts(partID); + @Override + public String getVersion() { + // TODO change version on each update ;/ + return "0.0.4"; + } + public static int configurationProperties() + { + config.load(); + coalID = Integer.parseInt(config.getOrCreateIntProperty("coalItems", Configuration.CATEGORY_ITEM, 30439).value); + pipeBlockID = Integer.parseInt(config.getOrCreateIntProperty("PipeS", Configuration.CATEGORY_BLOCK, 128).value); + pipeBlockID2 = Integer.parseInt(config.getOrCreateIntProperty("PipeW", Configuration.CATEGORY_BLOCK, 130).value); + BlockID = Integer.parseInt(config.getOrCreateIntProperty("Machines", Configuration.CATEGORY_BLOCK, 129).value); + pipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 30433).value); + partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 30434).value); + genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWatts", Configuration.CATEGORY_GENERAL, 1000).value); + steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutBoiler", Configuration.CATEGORY_GENERAL, 10).value); + boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJ", Configuration.CATEGORY_GENERAL, 4500).value); + fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJ", Configuration.CATEGORY_GENERAL,50).value); + config.save(); + return coalID; + } + @Override + public void load() { + //register + UniversalElectricity.registerAddon(this, "0.2.0"); + MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); + MinecraftForgeClient.preloadTexture("/eui/Items.png"); + //Blocks + //gen + //machine + ModLoader.registerBlock(machine,net.minecraft.src.eui.ItemMachine.class); + ModLoader.registerBlock(pipe); + ModLoader.registerBlock(pipeW); + ModLoader.addName((new ItemStack(pipeItem, 1, 0)), "SteamPipe"); + ModLoader.addName((new ItemStack(pipeItem, 1, 1)), "WaterPipe"); + ModLoader.addName((new ItemStack(machine, 1, 0)), "CoalRefiner"); + ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); + ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); + ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); + ModLoader.addName((new ItemStack(machine, 1, 14)), "WaterCondenser"); + ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); + ModLoader.registerTileEntity(net.minecraft.src.eui.grinder.TileEntityGrinder.class, "grinder",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityCondenser.class, "waterPump",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.steam.TileEntityPipe.class, "pipe", new RenderPipe()); + ModLoader.registerTileEntity(net.minecraft.src.eui.steam.TileEntityPipeWater.class, "pipeW", new RenderPipeWater()); + //Items + ModLoader.addName((new ItemStack(coalNugget, 1, 0)), "CoalNuggets"); + ModLoader.addName((new ItemStack(coalNugget, 1, 1)), "CoalPellets"); + ModLoader.addName((new ItemStack(coalNugget, 1, 2)), "CoalDust"); + ModLoader.addName((new ItemStack(parts, 1, 1)), "Tank"); + ModLoader.addName((new ItemStack(parts, 1, 3)), "Valve"); + ModLoader.addName((new ItemStack(parts, 1, 4)), "Tube"); + ModLoader.addName((new ItemStack(parts, 1, 5)), "Seal"); + ModLoader.addName((new ItemStack(parts, 1, 6)), "Rivits"); + ModLoader.addName(pipeItem, "SteamPipe"); + //fuels + ModLoader.addAllFuel((new ItemStack(coalNugget, 1, 0).itemID), 1000); + //Crafting + + ModLoader.addRecipe(new ItemStack(machine, 1, 0), new Object [] {"@S@", "SCW", "@S@", + 'S',UniversalComponents.ItemSteelIngot, + '@',new ItemStack(UniversalComponents.ItemSteelPlate), + 'C',new ItemStack(UniversalComponents.ItemCircuit,1,1), + 'W',UniversalComponents.ItemCopperWire}); + ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(parts, 1,1), + '@',new ItemStack(UniversalComponents.ItemSteelPlate), + 'O',new ItemStack(parts, 1,4), + 'V',new ItemStack(parts, 1,3)}); + ModLoader.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", + 'F',Block.stoneOvenIdle, + '@',new ItemStack(UniversalComponents.ItemSteelPlate)}); + ModLoader.addRecipe(new ItemStack(machine, 1, 3), new Object [] {"@T@", "PMP", "@T@", + 'T',new ItemStack(parts, 1,4), + '@',new ItemStack(UniversalComponents.ItemSteelPlate), + 'P',Block.pistonBase, + 'M',new ItemStack(UniversalComponents.ItemMotor)}); + ModLoader.addShapelessRecipe(new ItemStack(pipeItem, 4), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); + ModLoader.addShapelessRecipe(new ItemStack(pipeItem, 4), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Block.glass, 1),new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); + //crafting parts + ModLoader.addShapelessRecipe(new ItemStack(parts, 2,1), new Object[] { new ItemStack(UniversalComponents.ItemCopperIngot, 1), + new ItemStack(UniversalComponents.ItemCopperIngot, 1),new ItemStack(UniversalComponents.ItemCopperIngot, 1), + new ItemStack(UniversalComponents.ItemCopperIngot, 1), new ItemStack(parts,1,6)}); + ModLoader.addRecipe(new ItemStack(parts, 2, 3), new Object [] {" S ", "TTT", " ", 'T', + new ItemStack(parts, 8, 4),'S',UniversalComponents.ItemSteelIngot}); + ModLoader.addRecipe(new ItemStack(parts, 8, 4), new Object [] {"@@@", " ", "@@@", '@', + UniversalComponents.ItemBronzeIngot}); + ModLoader.addRecipe(new ItemStack(parts, 8, 5), new Object [] {"@@@", "@ @", "@@@", '@', + Item.leather}); + ModLoader.addShapelessRecipe(new ItemStack(parts, 4,6), new Object[] { new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); + + //smelting + + } + + +} From 4dac2739c17918c8a006e647991dc50417193b25 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 29 Jun 2012 04:42:17 -0400 Subject: [PATCH 003/115] Updated for UE 3.1 --- .../net/minecraft/src/Utility/BlockTotum.java | 264 ++++++++++++++++++ .../minecraft/src/Utility/ContainerBoost.java | 40 +++ .../src/Utility/ContainerHealer.java | 40 +++ .../net/minecraft/src/Utility/GUIBoost.java | 54 ++++ .../net/minecraft/src/Utility/GUIHealer.java | 54 ++++ .../net/minecraft/src/Utility/ItemTotum.java | 47 ++++ .../src/Utility/TileEntityBoost.java | 228 +++++++++++++++ .../src/Utility/TileEntityHealer.java | 228 +++++++++++++++ .../src/Utility/TileEntityTotum.java | 56 ++++ .../src/eui/TileEntityCondenser.java | 13 +- .../minecraft/src/eui/TileEntityNuller.java | 14 +- .../src/eui/grinder/TileEntityGrinder.java | 14 +- .../src/eui/turbine/TileEntityGenerator.java | 12 + .../net/minecraft/src/mod_EUIndustry.java | 2 +- .../net/minecraft/src/mod_UtilityBlocks.java | 24 ++ 15 files changed, 1086 insertions(+), 4 deletions(-) create mode 100644 minecraft/net/minecraft/src/Utility/BlockTotum.java create mode 100644 minecraft/net/minecraft/src/Utility/ContainerBoost.java create mode 100644 minecraft/net/minecraft/src/Utility/ContainerHealer.java create mode 100644 minecraft/net/minecraft/src/Utility/GUIBoost.java create mode 100644 minecraft/net/minecraft/src/Utility/GUIHealer.java create mode 100644 minecraft/net/minecraft/src/Utility/ItemTotum.java create mode 100644 minecraft/net/minecraft/src/Utility/TileEntityBoost.java create mode 100644 minecraft/net/minecraft/src/Utility/TileEntityHealer.java create mode 100644 minecraft/net/minecraft/src/Utility/TileEntityTotum.java create mode 100644 minecraft/net/minecraft/src/mod_UtilityBlocks.java diff --git a/minecraft/net/minecraft/src/Utility/BlockTotum.java b/minecraft/net/minecraft/src/Utility/BlockTotum.java new file mode 100644 index 00000000..975b1768 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/BlockTotum.java @@ -0,0 +1,264 @@ +package net.minecraft.src.Utility; + +import java.util.ArrayList; +import java.util.Random; +import net.minecraft.client.Minecraft; +import net.minecraft.src.*; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +public class BlockTotum extends UEBlockMachine implements ITextureProvider +{ + + private Random furnaceRand = new Random(); + private static boolean keepFurnaceInventory = true; + + public BlockTotum(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + } + @Override + protected int damageDropped(int metadata) + { + return metadata; + } + + + @Override + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); + int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); + + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + + //If it is the front side + if(side == ((TileEntityTotum)tileEntity).getDirection()) + { + switch(metadata) + { + + case 1: return 3; + case 3: return 3; + } + } + //If it is the back side + else if(side == UniversalElectricity.getOrientationFromSide(((TileEntityTotum)tileEntity).getDirection(), (byte)2)) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + return 0; + + + } + @Override + public int getBlockTextureFromSideAndMetadata(int side, int metadata) + { + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + else + { + //If it is the front side + if(side == 3) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + //If it is the back side + else if(side == 2) + { + switch(metadata) + { + case 0: return this.blockIndexInTexture + 2; + case 1: return this.blockIndexInTexture + 3; + case 2: return this.blockIndexInTexture + 2; + } + } + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + } + return 0; + } + public boolean blockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + int metadata = par1World.getBlockMetadata(par2, par3, par4); + + /** + * Check if the player is holding a wrench or an electric item. If so, do not open the GUI. + */ + if(par5EntityPlayer.inventory.getCurrentItem() != null) + { + if(par5EntityPlayer.inventory.getCurrentItem().itemID == UniversalComponents.ItemWrench.shiftedIndex) + { + if(onUseWrench(par1World, par2, par3, par4, par5EntityPlayer)) + { + par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID); + return true; + } + } + else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof UEElectricItem) + { + if(onUseElectricItem(par1World, par2, par3, par4, par5EntityPlayer)) + { + return true; + } + } + } + + return machineActivated(par1World, par2, par3, par4, par5EntityPlayer); + } + public boolean onUseElectricItem(World par1World, int par2, int par3, + int par4, EntityPlayer par5EntityPlayer) { + // TODO Auto-generated method stub + return false; + } + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityTotum tileEntity = (TileEntityTotum)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 2: tileEntity.setDirection((byte)5); break; + case 5: tileEntity.setDirection((byte)3); break; + case 3: tileEntity.setDirection((byte)4); break; + case 4: tileEntity.setDirection((byte)2); break; + } + + return true; + } + /** + * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the + * block. + */ + public boolean machineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + if(blockEntity instanceof TileEntityHealer) + { + TileEntity var6 = (TileEntityHealer)par1World.getBlockTileEntity(x, y, z); + ModLoader.openGUI(par5EntityPlayer, new GUIHealer(par5EntityPlayer.inventory, (TileEntityHealer) var6 )); ; + } + } + + return true; + } + } + @Override + public TileEntity getBlockEntity(int meta) + { + switch(meta) + { + case 0: return new TileEntityHealer(); + } + return null; + } + + /** + * Called when the block is placed in the world. + */ + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityTotum tileEntity = (TileEntityTotum)par1World.getBlockTileEntity(x, y, z); + + if(metadata == 0) + { + switch (angle) + { + case 0: tileEntity.setDirection((byte)5); break; + case 1: tileEntity.setDirection((byte)3); break; + case 2: tileEntity.setDirection((byte)4); break; + case 3: tileEntity.setDirection((byte)2); break; + } + } + else + { + switch (angle) + { + case 0: tileEntity.setDirection((byte)3); break; + case 1: tileEntity.setDirection((byte)4); break; + case 2: tileEntity.setDirection((byte)2); break; + case 3: tileEntity.setDirection((byte)5); break; + } + } + } + /** + * Called whenever the block is removed. + */ + + + @Override + public TileEntity getBlockEntity() { + // TODO Auto-generated method stub + return null; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + public int getRenderType() + { + return UniversalComponents.MachineRenderType; + } +} diff --git a/minecraft/net/minecraft/src/Utility/ContainerBoost.java b/minecraft/net/minecraft/src/Utility/ContainerBoost.java new file mode 100644 index 00000000..e64c3e21 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/ContainerBoost.java @@ -0,0 +1,40 @@ +package net.minecraft.src.Utility; + +import net.minecraft.src.*; + +public class ContainerBoost extends Container +{ + private TileEntityBoost tileEntity; + + public ContainerBoost(InventoryPlayer par1InventoryPlayer, TileEntityBoost tileEntity2) + { + this.tileEntity = tileEntity2; + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/minecraft/net/minecraft/src/Utility/ContainerHealer.java b/minecraft/net/minecraft/src/Utility/ContainerHealer.java new file mode 100644 index 00000000..64983995 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/ContainerHealer.java @@ -0,0 +1,40 @@ +package net.minecraft.src.Utility; + +import net.minecraft.src.*; + +public class ContainerHealer extends Container +{ + private TileEntityHealer tileEntity; + + public ContainerHealer(InventoryPlayer par1InventoryPlayer, TileEntityHealer tileEntity) + { + this.tileEntity = tileEntity; + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/minecraft/net/minecraft/src/Utility/GUIBoost.java b/minecraft/net/minecraft/src/Utility/GUIBoost.java new file mode 100644 index 00000000..bf70bca2 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/GUIBoost.java @@ -0,0 +1,54 @@ +package net.minecraft.src.Utility; + +import org.lwjgl.opengl.GL11; +import java.math.*; +import java.lang.Integer; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; +import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; + + public class GUIBoost extends GuiContainer + { + private TileEntityBoost tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIBoost(InventoryPlayer par1InventoryPlayer, TileEntityBoost tileEntity) + { + super(new ContainerBoost(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Doc-o-Matic", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + displayText2 = "Energy" + "-" + tileEntity.eStored; + displayText3 = "Effects" + "-" + tileEntity.hStored; + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/minecraft/net/minecraft/src/Utility/GUIHealer.java b/minecraft/net/minecraft/src/Utility/GUIHealer.java new file mode 100644 index 00000000..98a81f9c --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/GUIHealer.java @@ -0,0 +1,54 @@ +package net.minecraft.src.Utility; + +import org.lwjgl.opengl.GL11; +import java.math.*; +import java.lang.Integer; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; +import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; + + public class GUIHealer extends GuiContainer + { + private TileEntityHealer tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIHealer(InventoryPlayer par1InventoryPlayer, TileEntityHealer tileEntity) + { + super(new ContainerHealer(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Doc-o-Matic", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + displayText2 = "Energy" + "-" + tileEntity.eStored; + displayText3 = "heals" + "-" + tileEntity.hStored; + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/minecraft/net/minecraft/src/Utility/ItemTotum.java b/minecraft/net/minecraft/src/Utility/ItemTotum.java new file mode 100644 index 00000000..c01f00a4 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/ItemTotum.java @@ -0,0 +1,47 @@ +package net.minecraft.src.Utility; +import java.util.ArrayList; + +import net.minecraft.src.*; + +public class ItemTotum extends ItemBlock { + + public ItemTotum(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + } + public int getMetadata(int metadata) + { + return metadata; + } + + public String getItemName() + { + return "Totum"; + } + + public int getPlacedBlockMetadata(int damage) { + return damage; + } + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "Healer"; + case 1: return "Booster"; + case 2: return ""; + case 3: return ""; + case 15: return ""; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/Utility/TileEntityBoost.java b/minecraft/net/minecraft/src/Utility/TileEntityBoost.java new file mode 100644 index 00000000..81342275 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/TileEntityBoost.java @@ -0,0 +1,228 @@ +package net.minecraft.src.Utility; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.eui.api.*; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.forge.ISidedInventory; + +public class TileEntityBoost extends TileEntityTotum implements UEIConsumer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public UETileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int itemCookTime = 0; + public int eStored = 0; + public int hStored = 0; + public int tCount = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void updateEntity() + { + if(eStored >= 1000 && hStored < 100) + { + eStored -= 1000; + hStored += 1; + } + if(hStored > 0 && tCount > 40) + { + if(this.containingItems[0] != null && this.containingItems[0].itemID == 373) + { + + EntityPlayer player = this.worldObj.getClosestPlayer(xCoord, yCoord, zCoord, 4.0F); + if(player != null){ + //player.addPotionEffect(par1PotionEffect); + hStored -= 1; + tCount = 0; + } + } + + + } + tCount++; + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.eStored = par1NBTTagCompound.getInteger("EU"); + this.hStored = par1NBTTagCompound.getInteger("HP"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("EU", (int)this.eStored); + par1NBTTagCompound.setInteger("HP", (int)this.hStored); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(int side) + { + if (side == 0) + { + return 1; + } + if (side == 1) + { + return 0; + } + return 2; + } + @Override + public int getSizeInventorySide(int side) { return getSizeInventory(); } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + + + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 12000; + } + @Override + public int onReceiveElectricity(int watts, int voltage, byte side) { + if(this.eStored < this.getElectricityCapacity()) + { + int rejectedElectricity = Math.max((this.eStored + watts) - this.getElectricityCapacity(), 0); + this.eStored += watts - rejectedElectricity; + return rejectedElectricity; + } + return watts; + } + @Override + public boolean canReceiveElectricity(byte side) { + if(side == 0) + { + return true; + } + return false; + } + @Override + public int getStoredElectricity() { + return eStored; + } + @Override + public int getElectricityCapacity() { + return 1000; + } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/minecraft/net/minecraft/src/Utility/TileEntityHealer.java b/minecraft/net/minecraft/src/Utility/TileEntityHealer.java new file mode 100644 index 00000000..ad7549c5 --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/TileEntityHealer.java @@ -0,0 +1,228 @@ +package net.minecraft.src.Utility; +import net.minecraft.src.eui.TileEntityMachine; +import net.minecraft.src.eui.api.*; +import net.minecraft.src.forge.ForgeHooks; +import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.forge.ISidedInventory; + +public class TileEntityHealer extends TileEntityTotum implements UEIConsumer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public UETileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int itemCookTime = 0; + public int eStored = 0; + public int hStored = 0; + public int tCount = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void updateEntity() + { + if(eStored >= 1000 && hStored < 100) + { + eStored -= 1000; + hStored += 1; + } + if(hStored > 0 && tCount > 40) + { + EntityPlayer player = this.worldObj.getClosestPlayer(xCoord, yCoord, zCoord, 4.0F); + if(player != null){ + + if(player.getHealth() < player.heartsHalvesLife) + { + System.out.println("hearts"+ player.getHealth()); + System.out.println("heartsMax"+ player.heartsHalvesLife); + player.heal(1); + hStored -= 1; + tCount = 0; + } + } + + } + tCount++; + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.eStored = par1NBTTagCompound.getInteger("EU"); + this.hStored = par1NBTTagCompound.getInteger("HP"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("EU", (int)this.eStored); + par1NBTTagCompound.setInteger("HP", (int)this.hStored); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(int side) + { + if (side == 0) + { + return 1; + } + if (side == 1) + { + return 0; + } + return 2; + } + @Override + public int getSizeInventorySide(int side) { return getSizeInventory(); } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + + + @Override + public int getVolts() { + // TODO Auto-generated method stub + return 12000; + } + @Override + public int onReceiveElectricity(int watts, int voltage, byte side) { + if(this.eStored < this.getElectricityCapacity()) + { + int rejectedElectricity = Math.max((this.eStored + watts) - this.getElectricityCapacity(), 0); + this.eStored += watts - rejectedElectricity; + return rejectedElectricity; + } + return watts; + } + @Override + public boolean canReceiveElectricity(byte side) { + if(side == 0) + { + return true; + } + return false; + } + @Override + public int getStoredElectricity() { + return eStored; + } + @Override + public int getElectricityCapacity() { + return 1000; + } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } +} diff --git a/minecraft/net/minecraft/src/Utility/TileEntityTotum.java b/minecraft/net/minecraft/src/Utility/TileEntityTotum.java new file mode 100644 index 00000000..abb9dcce --- /dev/null +++ b/minecraft/net/minecraft/src/Utility/TileEntityTotum.java @@ -0,0 +1,56 @@ +package net.minecraft.src.Utility; + +import net.minecraft.src.*; +import net.minecraft.src.forge.ITextureProvider; +import net.minecraft.src.universalelectricity.UEIRotatable; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +public class TileEntityTotum extends TileEntity implements ITextureProvider,UEIRotatable { + private int facing; + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", (int)this.facing); + + } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.facing = par1NBTTagCompound.getInteger("facing"); + } + public TileEntity getSteamMachine(int i) + { + + int x = this.xCoord; + int y = this.yCoord; + int z = this.zCoord; + switch(i){ + case 0: y = y - 1;break; + case 1: y = y + 1;break; + case 2: z = z + 1;break; + case 3: z = z - 1;break; + case 4: x = x + 1;break; + case 5: x = x - 1;break; + } + TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntityTotum) + { + return aEntity; + } + + return null; + } + public byte getDirection() { + // TODO Auto-generated method stub + return (byte) this.facing; + } + public void setDirection(byte facingDirection) { + this.facing = facingDirection; + } + @Override + public String getTextureFile() + { + return "/eui/blocks.png"; + } + +} diff --git a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java index 9e5d3fcf..9c6af53a 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java +++ b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java @@ -54,7 +54,7 @@ public class TileEntityCondenser extends TileEntityMachine implements IWaterProd return rejectedElectricity; } @Override - public boolean canRecieveElectricity(byte side) { + public boolean canReceiveElectricity(byte side) { // TODO Auto-generated method stub return true; } @@ -73,6 +73,17 @@ public class TileEntityCondenser extends TileEntityMachine implements IWaterProd // TODO Auto-generated method stub return 240; } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + diff --git a/minecraft/net/minecraft/src/eui/TileEntityNuller.java b/minecraft/net/minecraft/src/eui/TileEntityNuller.java index ecf5ee45..048b1cc8 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityNuller.java +++ b/minecraft/net/minecraft/src/eui/TileEntityNuller.java @@ -11,7 +11,7 @@ public class TileEntityNuller extends TileEntityMachine implements UEIConsumer { } @Override - public boolean canRecieveElectricity(byte side) { + public boolean canReceiveElectricity(byte side) { // TODO Auto-generated method stub return true; } @@ -34,4 +34,16 @@ public class TileEntityNuller extends TileEntityMachine implements UEIConsumer { return 100000000; } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + } diff --git a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java index 4ff8c8a6..72c0ee24 100644 --- a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java +++ b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java @@ -372,7 +372,7 @@ public class TileEntityGrinder extends TileEntityMachine implements IInventory, } @Override - public boolean canRecieveElectricity(byte side) { + public boolean canReceiveElectricity(byte side) { // TODO Auto-generated method stub return true; } @@ -382,5 +382,17 @@ public class TileEntityGrinder extends TileEntityMachine implements IInventory, return 120; } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + } diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java index 316b3fd4..c3322e27 100644 --- a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java +++ b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java @@ -302,4 +302,16 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce // TODO Auto-generated method stub return 120; } + + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } } diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index 3434e391..e209fc86 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -53,7 +53,7 @@ public class mod_EUIndustry extends NetworkMod { @Override public void load() { //register - UniversalElectricity.registerAddon(this, "0.2.0"); + UniversalElectricity.registerAddon(this, "0.3.1"); MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); MinecraftForgeClient.preloadTexture("/eui/Items.png"); //Blocks diff --git a/minecraft/net/minecraft/src/mod_UtilityBlocks.java b/minecraft/net/minecraft/src/mod_UtilityBlocks.java new file mode 100644 index 00000000..d251ebb6 --- /dev/null +++ b/minecraft/net/minecraft/src/mod_UtilityBlocks.java @@ -0,0 +1,24 @@ +package net.minecraft.src; +import net.minecraft.src.eui.steam.RenderPipeWater; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.UEBlockRenderer; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.components.UniversalComponents; +public class mod_UtilityBlocks extends NetworkMod { + + public static Block totum = new net.minecraft.src.Utility.BlockTotum(210).setBlockName("totum"); + @Override + public String getVersion() { + // TODO change each update + return "V0.0.1"; + } + + @Override + public void load() { + UniversalElectricity.registerAddon(this, "0.3.1"); + ModLoader.registerBlock(totum,net.minecraft.src.eui.ItemMachine.class); + ModLoader.registerTileEntity(net.minecraft.src.Utility.TileEntityHealer.class, "healer", new UEBlockRenderer()); + ModLoader.addShapelessRecipe(new ItemStack(totum, 1,0), new Object[] { new ItemStack(Block.dirt,1)}); + } + +} From 2a6f3cb9f9c3048cd7678c16d84713869cdfcaa4 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 2 Jul 2012 02:37:26 -0400 Subject: [PATCH 004/115] Changed version # --- .../minecraft/src/eui/TileEntityMachine.java | 93 ++++++++++--------- .../net/minecraft/src/mod_EUIndustry.java | 2 +- 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/minecraft/net/minecraft/src/eui/TileEntityMachine.java index c5f5eac5..b081cc87 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityMachine.java +++ b/minecraft/net/minecraft/src/eui/TileEntityMachine.java @@ -5,52 +5,61 @@ import net.minecraft.src.forge.ITextureProvider; import net.minecraft.src.universalelectricity.UEIRotatable; import net.minecraft.src.universalelectricity.components.UniversalComponents; -public class TileEntityMachine extends TileEntity implements ITextureProvider,UEIRotatable { - private int facing; - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", (int)this.facing); - - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.facing = par1NBTTagCompound.getInteger("facing"); - } - public TileEntity getSteamMachine(int i) - { - - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - switch(i){ - case 0: y = y - 1;break; - case 1: y = y + 1;break; - case 2: z = z + 1;break; - case 3: z = z - 1;break; - case 4: x = x + 1;break; - case 5: x = x - 1;break; - } - TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntityMachine) - { - return aEntity; - } - - return null; +public class TileEntityMachine extends TileEntity implements ITextureProvider, UEIRotatable +{ + private byte facing; + + public TileEntity getSteamMachine(int i) + { + int x = this.xCoord; + int y = this.yCoord; + int z = this.zCoord; + + switch(i) + { + case 0: y = y - 1;break; + case 1: y = y + 1;break; + case 2: z = z + 1;break; + case 3: z = z - 1;break; + case 4: x = x + 1;break; + case 5: x = x - 1;break; + } + TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntityMachine) + { + return aEntity; } - public byte getDirection() { - // TODO Auto-generated method stub - return (byte) this.facing; + + return null; } - public void setDirection(byte facingDirection) { - this.facing = facingDirection; - } + + public byte getDirection() + { + return this.facing; + } + + public void setDirection(byte facingDirection) + { + this.facing = facingDirection; + } + @Override public String getTextureFile() { return "/eui/blocks.png"; } - -} + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setByte("facing", (byte)this.facing); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.facing = par1NBTTagCompound.getByte("facing"); + } +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index e209fc86..b64f9fe1 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -32,7 +32,7 @@ public class mod_EUIndustry extends NetworkMod { @Override public String getVersion() { // TODO change version on each update ;/ - return "0.0.4"; + return "0.0.5"; } public static int configurationProperties() { From cd3ee4e4c82722385e26b38be780ae7d03e4ddf6 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 2 Jul 2012 02:38:05 -0400 Subject: [PATCH 005/115] stuff --- minecraft/net/minecraft/src/eui/TileEntityMachine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/minecraft/net/minecraft/src/eui/TileEntityMachine.java index b081cc87..fcea8539 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityMachine.java +++ b/minecraft/net/minecraft/src/eui/TileEntityMachine.java @@ -11,7 +11,7 @@ public class TileEntityMachine extends TileEntity implements ITextureProvider, U public TileEntity getSteamMachine(int i) { - int x = this.xCoord; + int x = this.xCoord; int y = this.yCoord; int z = this.zCoord; From e3f5753b0e74cd6fafac07553d7b69791db9e4cc Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 6 Jul 2012 03:49:13 -0400 Subject: [PATCH 006/115] Seperated pipes from mods Seperated pipes and there related files from steam power in order to make it it's own mod. Too do so a lot of classes where edited to fit the new API. Though the code has bugs that still need fixed. Main bug: pipe only transfer if the consumer falls under the pipes max volume. --- .../net/minecraft/src/eui/BlockMachine.java | 2 - .../net/minecraft/src/eui/ItemMachine.java | 10 +- .../src/eui/TileEntityCondenser.java | 28 ++- .../minecraft/src/eui/boiler/GuiBoiler.java | 2 +- .../src/eui/boiler/TileEntityBoiler.java | 117 +++++---- .../minecraft/src/eui/pipes/BlockPipe.java | 136 +++++++++++ .../minecraft/src/eui/pipes/ItemParts.java | 68 ++++++ .../net/minecraft/src/eui/pipes/ItemPipe.java | 137 +++++++++++ .../minecraft/src/eui/pipes/ModelPipe.java | 98 ++++++++ .../minecraft/src/eui/pipes/RenderPipe.java | 53 ++++ .../src/eui/pipes/TileEntityPipe.java | 231 ++++++++++++++++++ .../src/eui/pipes/api/ILiquidConsumer.java | 31 +++ .../src/eui/pipes/api/ILiquidProducer.java | 21 ++ .../src/eui/turbine/TileEntityGenerator.java | 115 +++++---- .../net/minecraft/src/mod_BasicPipes.java | 82 +++++++ .../net/minecraft/src/mod_EUIndustry.java | 38 +-- .../net/minecraft/src/mod_UtilityBlocks.java | 1 - .../net/minecraft/src/EntityCreeper.java | 192 +++++++++++++++ 18 files changed, 1202 insertions(+), 160 deletions(-) create mode 100644 minecraft/net/minecraft/src/eui/pipes/BlockPipe.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemParts.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemPipe.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/ModelPipe.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/RenderPipe.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java create mode 100644 minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java create mode 100644 minecraft/net/minecraft/src/mod_BasicPipes.java create mode 100644 minecraft_server/net/minecraft/src/EntityCreeper.java diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/minecraft/net/minecraft/src/eui/BlockMachine.java index 2e6d3803..1f5a6d1c 100644 --- a/minecraft/net/minecraft/src/eui/BlockMachine.java +++ b/minecraft/net/minecraft/src/eui/BlockMachine.java @@ -4,8 +4,6 @@ import java.util.ArrayList; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.src.*; -import net.minecraft.src.eui.api.ISteamConsumer; -import net.minecraft.src.eui.api.ISteamProducer; import net.minecraft.src.eui.boiler.*; import net.minecraft.src.eui.burner.GUIFireBox; import net.minecraft.src.eui.burner.TileEntityFireBox; diff --git a/minecraft/net/minecraft/src/eui/ItemMachine.java b/minecraft/net/minecraft/src/eui/ItemMachine.java index 3785adcc..8a7104f0 100644 --- a/minecraft/net/minecraft/src/eui/ItemMachine.java +++ b/minecraft/net/minecraft/src/eui/ItemMachine.java @@ -10,20 +10,17 @@ public class ItemMachine extends ItemBlock { setMaxDamage(0); setHasSubtypes(true); } + @Override public int getMetadata(int metadata) { return metadata; } - + @Override public String getItemName() { return "Machine"; } - - public int getPlacedBlockMetadata(int damage) { - return damage; - } - + @Override public String getItemNameIS(ItemStack par1ItemStack) { int var3 = par1ItemStack.getItemDamage(); @@ -37,6 +34,7 @@ public class ItemMachine extends ItemBlock { } return this.getItemName(); } + @Override public void addCreativeItems(ArrayList itemList) { itemList.add(new ItemStack(this, 1,0)); diff --git a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java index 9c6af53a..06ab54fe 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java +++ b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java @@ -1,22 +1,22 @@ package net.minecraft.src.eui; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.eui.api.IWaterProducer; +import net.minecraft.src.eui.pipes.api.ILiquidProducer; import net.minecraft.src.universalelectricity.UEIConsumer; -public class TileEntityCondenser extends TileEntityMachine implements IWaterProducer,UEIConsumer { +public class TileEntityCondenser extends TileEntityMachine implements ILiquidProducer,UEIConsumer { int tickCount = 0; int waterStored = 0; int energyStored = 0; @Override - public int onProduceWater(int maxVol, int side) { - if( maxVol > 0) + public int onProduceLiquid(int type,int maxVol, int side) { + /**if(type == 1) { int tradeW = Math.min(maxVol, waterStored); waterStored -= tradeW; return tradeW; - } - return 0; + }**/ + return 5; } public void writeToNBT(NBTTagCompound par1NBTTagCompound) { @@ -32,7 +32,7 @@ public class TileEntityCondenser extends TileEntityMachine implements IWaterProd this.waterStored = par1NBTTagCompound.getInteger("waterStored"); } public void updateEntity() - { + { if(energyStored > 100 && tickCount > 200 && waterStored < 10) { energyStored -= 100; @@ -41,12 +41,6 @@ public class TileEntityCondenser extends TileEntityMachine implements IWaterProd } tickCount++; } - - @Override - public boolean canProduceWater(byte side) { - // TODO Auto-generated method stub - return true; - } @Override public int onReceiveElectricity(int watts, int voltage, byte side) { int rejectedElectricity = Math.max((this.waterStored + watts) - this.getElectricityCapacity(), 0); @@ -83,6 +77,14 @@ public class TileEntityCondenser extends TileEntityMachine implements IWaterProd // TODO Auto-generated method stub return false; } + @Override + public boolean canProduceLiquid(int type, byte side) { + if(type == 1) + { + return true; + } + return false; + } diff --git a/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java b/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java index 8ea530d6..96a36c05 100644 --- a/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java @@ -45,7 +45,7 @@ public class GuiBoiler extends GuiContainer int var10; if (this.boilerInventory.waterStored > 0) { - var7 = boilerInventory.getStoredWater()*4 + 1; + var7 = boilerInventory.getStoredLiquid(1)*4 + 1; this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); } if (this.boilerInventory.steamStored > 0) diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java index 35944bcb..d2d95a3f 100644 --- a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -4,12 +4,13 @@ import net.minecraft.src.eui.BlockMachine; import net.minecraft.src.eui.TileEntityMachine; import net.minecraft.src.eui.api.*; import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.steam.TileEntityPipe; +import net.minecraft.src.eui.pipes.api.ILiquidConsumer; +import net.minecraft.src.eui.pipes.api.ILiquidProducer; import net.minecraft.src.forge.ForgeHooks; import net.minecraft.src.forge.ISidedInventory; import net.minecraft.src.universalelectricity.UniversalElectricity; -public class TileEntityBoiler extends TileEntityMachine implements IInventory, ISidedInventory,ISteamProducer, IWaterConsumer +public class TileEntityBoiler extends TileEntityMachine implements IInventory, ISidedInventory,ILiquidProducer, ILiquidConsumer { /** @@ -372,7 +373,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I boolean canTradeWater; if( i ==1) { - if(this.waterStored == this.getWaterCapacity()) + if(this.waterStored == this.getLiquidCapacity(1)) { canTradeWater = true; } @@ -388,11 +389,11 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I if(canTradeWater) { int WSum = (this.waterStored + connectedConsumer.waterStored)/2; - if(i == 0 && this.waterStored > 0 && connectedConsumer.waterStored < connectedConsumer.getWaterCapacity()) + if(i == 0 && this.waterStored > 0 && connectedConsumer.waterStored < connectedConsumer.getLiquidCapacity(1)) { int rejectedW = connectedConsumer.addwater(1); - this.waterStored = Math.max(Math.min(this.waterStored - 1 + rejectedW, this.getWaterCapacity()), 0); + this.waterStored = Math.max(Math.min(this.waterStored - 1 + rejectedW, this.getLiquidCapacity(1)), 0); } if(this.waterStored > connectedConsumer.waterStored) { @@ -400,7 +401,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I if(transferW > 0) { int rejectedW = connectedConsumer.addwater(transferW); - this.waterStored = Math.max(Math.min(this.waterStored - transferW + rejectedW, this.getWaterCapacity()), 0); + this.waterStored = Math.max(Math.min(this.waterStored - transferW + rejectedW, this.getLiquidCapacity(1)), 0); } } @@ -479,7 +480,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I return rejectedElectricity; } public int addwater(int watt) { - int rejectedElectricity = Math.max((this.waterStored + watt) - this.getWaterCapacity(), 0); + int rejectedElectricity = Math.max((this.waterStored + watt) - this.getLiquidCapacity(1), 0); this.waterStored += watt - rejectedElectricity; return rejectedElectricity; } @@ -500,7 +501,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I { if(this.furnaceItemStacks[0].isItemEqual(new ItemStack(Item.bucketWater,1))) { - if((int)waterStored < getWaterCapacity()) + if((int)waterStored < getLiquidCapacity(1)) { ++waterStored; this.furnaceItemStacks[0] = new ItemStack(Item.bucketEmpty,1); @@ -536,28 +537,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I { return 1; } - @Override - public int onReceiveWater(int vol, byte side) { - - if(waterStored + vol < getWaterCapacity()){ - waterStored = waterStored + (int)vol; - return 0; - } - return vol; - - } - - @Override - public int getStoredWater() { - - return this.waterStored; - - } - @Override - public int getWaterCapacity() { - return 14; - } - public int precentHeated() { int var1; if(hullHeat < 100) @@ -570,32 +549,70 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I } return var1; } - - @Override - public boolean canRecieveWater(byte side) { - - return true; - } - - @Override - public int onProduceSteam(float maxVol, int side) { - - if(steamStored > 0) + public int onReceiveLiquid(int type, int vol, byte side) { + if(type == 1) { - --steamStored; - return 1; + int rejectedElectricity = Math.max((this.waterStored + vol) - 14, 0); + this.waterStored = vol - rejectedElectricity; + return rejectedElectricity; } - - return 0; - + return vol; } @Override - public boolean canProduceSteam(byte side) { - - return true; - + public boolean canRecieveLiquid(int type, byte side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 1) + { + return this.waterStored; + } + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type ==1) + { + return 14; + } + return 0; + } + @Override + public int onProduceLiquid(int type, int maxVol, int side) { + if(count == 10 || count == 20) + { + if(type == 0) + { + if(steamStored > maxVol) + { + this.steamStored -= maxVol; + return maxVol; + } + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, byte side) { + if(type == 0) + { + return true; + } + return false; } } diff --git a/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java b/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java new file mode 100644 index 00000000..85cc7d41 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java @@ -0,0 +1,136 @@ +package net.minecraft.src.eui.pipes; + +import java.util.ArrayList; + +import net.minecraft.src.eui.api.*; +import net.minecraft.src.eui.pipes.api.ILiquidConsumer; +import net.minecraft.src.eui.pipes.api.ILiquidProducer; +import net.minecraft.src.eui.*; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockPipe extends BlockContainer +{ + + public BlockPipe(int id) + { + super(id, Material.iron); + this.setBlockName("Pipe"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return 0; + } + + public TileEntity getBlockEntity() + { + return new TileEntityPipe(); + } + + //Per tick + public int conductorCapacity() + { + return 5; + } + + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + this.updateConductorTileEntity(world, x, y, z); + } + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) + { + switch(side) + { + case 0: y -= 1; break; + case 1: y += 1; break; + case 2: z += 1; break; + case 3: z -= 1; break; + case 4: x += 1; break; + case 5: x -= 1; break; + } + + //Check if the designated block is a UE Unit - producer, consumer or a conductor + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity returnValue = null; + + if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + if (tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(type,UniversalElectricity.getOrientationFromSide(side, (byte)2))) + { + returnValue = tileEntity; + } + } + + return returnValue; + } + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + this.updateConductorTileEntity(world, x, y, z); + } + + public static void updateConductorTileEntity(World world, int x, int y, int z) + { + for(byte i = 0; i < 6; i++) + { + //Update the tile entity on neighboring blocks + TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); + int type = conductorTileEntity.getType(); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), i);; + } + } + } + + diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemParts.java b/minecraft/net/minecraft/src/eui/pipes/ItemParts.java new file mode 100644 index 00000000..5366f4ac --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/ItemParts.java @@ -0,0 +1,68 @@ +package net.minecraft.src.eui.pipes; + +import java.util.ArrayList; + +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.forge.ITextureProvider; + +public class ItemParts extends Item implements ITextureProvider{ + + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 7; + case 1: return 7; + case 2: return 8; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/Items.png"; + } + @Override + public String getItemName() + { + return "parts"; + } + + +@Override + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "BronzeTube"; + case 1: return "ObbyTube"; + case 2: return "Seal"; + case 3: return "IronTube"; + case 4: return "StickSeal"; + } + return this.getItemName(); + } +@Override + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,4)); + } +} + + + diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java new file mode 100644 index 00000000..a2ff3dda --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java @@ -0,0 +1,137 @@ +package net.minecraft.src.eui.pipes; + +import java.util.ArrayList; + +import net.minecraft.src.forge.*; +import net.minecraft.src.*; + +public class ItemPipe extends Item implements ITextureProvider +{ + private int spawnID; + + public ItemPipe(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("pipe"); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 11; + case 1: return 10; + case 2: return 11; + case 3: return 10; + case 4: return 11; + case 5: return 10; + } + return this.iconIndex; + } + @Override + public String getItemName() + { + return "Pipes"; + } + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = mod_BasicPipes.pipeID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (par3World.canBlockBePlacedAt(this.spawnID, par4, par5, par6, false, par7)) + { + Block var9 = Block.blocksList[this.spawnID]; + + if (par3World.setBlockWithNotify(par4, par5, par6, this.spawnID)) + { + if (par3World.getBlockId(par4, par5, par6) == this.spawnID) + { + Block.blocksList[this.spawnID].onBlockPlaced(par3World, par4, par5, par6, par7); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int dm = par1ItemStack.getItemDamage(); + String rType = "air"; + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + + return true; + } + } + + return false; + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "waterPipe"; + case 0: return "steamPipe"; + case 2: return "22"; + case 3: return "22"; + case 4: return "22"; + case 5: return "22"; + } + return this.getItemName(); + } + @Override + public String getTextureFile() { + return "/eui/Items.png"; + } + @Override + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,4)); + itemList.add(new ItemStack(this, 1,5)); +} + +} diff --git a/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java b/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java new file mode 100644 index 00000000..1d960c51 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java @@ -0,0 +1,98 @@ +package net.minecraft.src.eui.pipes; + +import net.minecraft.src.*; + +public class ModelPipe extends ModelBase +{ + //fields + ModelRenderer Middle; + ModelRenderer Right; + ModelRenderer Left; + ModelRenderer Back; + ModelRenderer Front; + ModelRenderer Top; + ModelRenderer Bottom; + + public ModelPipe() + { + textureWidth = 64; + textureHeight = 32; + + Middle = new ModelRenderer(this, 0, 0); + Middle.addBox(-1F, -1F, -1F, 4, 4, 4); + Middle.setRotationPoint(-1F, 15F, -1F); + Middle.setTextureSize(64, 32); + Middle.mirror = true; + setRotation(Middle, 0F, 0F, 0F); + Right = new ModelRenderer(this, 21, 0); + Right.addBox(0F, 0F, 0F, 6, 4, 4); + Right.setRotationPoint(2F, 14F, -2F); + Right.setTextureSize(64, 32); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + Left = new ModelRenderer(this, 21, 0); + Left.addBox(0F, 0F, 0F, 6, 4, 4); + Left.setRotationPoint(-8F, 14F, -2F); + Left.setTextureSize(64, 32); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + Back = new ModelRenderer(this, 0, 11); + Back.addBox(0F, 0F, 0F, 4, 4, 6); + Back.setRotationPoint(-2F, 14F, 2F); + Back.setTextureSize(64, 32); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + Front = new ModelRenderer(this, 0, 11); + Front.addBox(0F, 0F, 0F, 4, 4, 6); + Front.setRotationPoint(-2F, 14F, -8F); + Front.setTextureSize(64, 32); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + Top = new ModelRenderer(this, 21, 11); + Top.addBox(0F, 0F, 0F, 4, 6, 4); + Top.setRotationPoint(-2F, 8F, -2F); + Top.setTextureSize(64, 32); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Bottom = new ModelRenderer(this, 21, 11); + Bottom.addBox(0F, 0F, 0F, 4, 6, 4); + Bottom.setRotationPoint(-2F, 18F, -2F); + Bottom.setTextureSize(64, 32); + Bottom.mirror = true; + setRotation(Bottom, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() { Middle.render(0.0625F); } + public void renderBottom() { Bottom.render(0.0625F); } + public void renderTop() { Top.render(0.0625F); } + public void renderLeft() { Left.render(0.0625F); } + public void renderRight() { Right.render(0.0625F); } + public void renderBack() { Back.render(0.0625F); } + public void renderFront() { Front.render(0.0625F);} + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java b/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java new file mode 100644 index 00000000..4799438f --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java @@ -0,0 +1,53 @@ +package net.minecraft.src.eui.pipes; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderPipe extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelPipe model; + + public RenderPipe() + { + model = new ModelPipe(); + } + + public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) + { + //Texture file + + type = tileEntity.getType(); + switch(type) + { + case 0: bindTextureByName("/eui/SteamPipe.png");break; + case 1: bindTextureByName("/eui/WaterPipe.png");break; + case 2: bindTextureByName("/eui/lavaPipe.png");break; + case 3: bindTextureByName("/eui/oilPipe.png");break; + case 4: bindTextureByName("/eui/fuelPipe.png");break; + case 5: bindTextureByName("/eui/airPipe.png");break; + default: break; + } + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) model.renderTop(); + if(tileEntity.connectedBlocks[2] != null) model.renderFront(); + if(tileEntity.connectedBlocks[3] != null) model.renderBack(); + if(tileEntity.connectedBlocks[4] != null) model.renderRight(); + if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); + + model.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java new file mode 100644 index 00000000..7cd9b5e9 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -0,0 +1,231 @@ +package net.minecraft.src.eui.pipes; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraft.src.eui.pipes.api.ILiquidConsumer; +import net.minecraft.src.eui.pipes.api.ILiquidProducer; +import net.minecraft.src.universalelectricity.UniversalElectricity; +import net.minecraft.src.universalelectricity.Vector3; + +public class TileEntityPipe extends TileEntity implements ILiquidConsumer +{ + //The amount stored in the conductor + protected int liquidStored = 0; + protected int type = 0; + //The maximum amount of electricity this conductor can take + protected int capacity = 5; + + //Stores information on all connected blocks around this tile entity + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + + //Checks if this is the first the tile entity updates + protected boolean firstUpdate = true; + + /** + * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity + * should transfer + */ + public TileEntity closestConsumer = null; + + /** + * This function adds a connection between this conductor and the UE unit + * @param tileEntity - Must be either a producer, consumer or a conductor + * @param side - side in which the connection is coming from + */ + public void addConnection(TileEntity tileEntity, byte side) + { + if(tileEntity instanceof TileEntityPipe) + { + if(((TileEntityPipe)tileEntity).getType() == this.getType()) + { + this.connectedBlocks[side] = tileEntity; + } + else + { + this.connectedBlocks[side] = null; + } + } + else + { + if(tileEntity instanceof ILiquidConsumer || tileEntity instanceof ILiquidProducer) + { + this.connectedBlocks[side] = tileEntity; + } + else + { + this.connectedBlocks[side] = null; + } + } + } + + + + /** + * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). + * @param watts - The amount of watt this block recieved + * @param side - The side of the block in which the electricity came from + * @return watt - The amount of rejected power to be sent back into the conductor + */ + @Override + public int onReceiveLiquid(int type,int watt, byte side) + { + if(type == this.type) + { + int rejectedElectricity = Math.max((this.getStoredLiquid(type) + watt) - this.capacity, 0); + this.liquidStored = watt - rejectedElectricity; + return rejectedElectricity; + } + return watt; + } + @Override + public void updateEntity() + { + BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + + //Find the connected unit with the least amount of electricity and give more to them + if(!this.worldObj.isRemote) + { + //Spread the electricity to neighboring blocks + byte connectedUnits = 0; + byte connectedConductors = 1; + int averageElectricity = this.liquidStored; + this.closestConsumer = null; + + Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); + + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + { + connectedUnits ++; + + if(connectedBlocks[i].getClass() == this.getClass()) + { + averageElectricity += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + + TileEntity tileEntity = ((TileEntityPipe)connectedBlocks[i]).closestConsumer; + + if(tileEntity != null) + { + this.closestConsumer = tileEntity; + } + + connectedConductors ++; + } + else if(connectedBlocks[i] instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + this.closestConsumer = connectedBlocks[i]; + } + } + + } + } + } + + averageElectricity = averageElectricity/connectedConductors; + if(connectedUnits > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the electricity among the different blocks + if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) + { + if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + int transferElectricityAmount = 0; + ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); + + if(connectedBlocks[i].getClass() == this.getClass() && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) + { + transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); + } + else if(!(connectedConsumer instanceof TileEntityPipe)) + { + transferElectricityAmount = this.liquidStored; + } + + int rejectedElectricity = connectedConsumer.onReceiveLiquid(this.type,transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferElectricityAmount + rejectedElectricity, 5), 0); + } + } + + if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) + { + if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) + { + int gainedElectricity = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.onReceiveLiquid(this.type, gainedElectricity, i); + } + } + } + } + } + } + } + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + @Override + public int getStoredLiquid(int type) + { + if(type == this.type) + { + return this.liquidStored; + } + return 0; + } + + + @Override + public int getLiquidCapacity(int type) + { + return 5; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = par1NBTTagCompound.getInteger("type"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type); + } + + @Override + public boolean canRecieveLiquid(int type, byte side) { + if(type == this.type) + { + return true; + } + return false; + } + public int getType() { + return this.type; + } + + + public void setType(int rType) { + this.type = rType; + + } + +} + diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java new file mode 100644 index 00000000..519c7d3e --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java @@ -0,0 +1,31 @@ +package net.minecraft.src.eui.pipes.api; + + +public interface ILiquidConsumer +{ + /** + * onRecieveLiquid + * @param vol - The amount this block received. + * @param side - The side of the block in which the liquid came from. + * @return vol - The amount liquid that can't be recieved + */ + public int onReceiveLiquid(int type, int vol, byte side); + + /** + * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics + * @param side - The side in which the electricity is coming from. + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveLiquid(int type, byte side); + + /** + * @return Return the stored liquid of type in this consumer. + */ + public int getStoredLiquid(int type); + + /** + * @return Return the maximum amount of stored liquid this consumer can get. + */ + public int getLiquidCapacity(int type); + +} diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java new file mode 100644 index 00000000..e715828d --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java @@ -0,0 +1,21 @@ +package net.minecraft.src.eui.pipes.api; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface ILiquidProducer +{ + /** + * onProduceLiquid + * block. + * @param type - the type of liquid or gas + * @param maxvol - The maximum vol + * @param side - The side + * @return vol - Return a vol of liquid type + */ + public int onProduceLiquid(int type, int maxVol, int side); + + public boolean canProduceLiquid(int type, byte side); +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java index c3322e27..a1e36680 100644 --- a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java +++ b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java @@ -1,12 +1,14 @@ package net.minecraft.src.eui.turbine; import net.minecraft.src.eui.TileEntityMachine; import net.minecraft.src.eui.api.*; +import net.minecraft.src.eui.pipes.api.ILiquidConsumer; +import net.minecraft.src.eui.pipes.api.ILiquidProducer; import net.minecraft.src.forge.ForgeHooks; import net.minecraft.src.*; import net.minecraft.src.universalelectricity.*; import net.minecraft.src.forge.ISidedInventory; -public class TileEntityGenerator extends TileEntityMachine implements UEIProducer,ISteamConsumer,IWaterProducer, IInventory, ISidedInventory +public class TileEntityGenerator extends TileEntityMachine implements UEIProducer,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory { //Maximum possible generation rate of watts in SECONDS public int maxGenerateRate = 1000; @@ -246,57 +248,6 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce public void openChest() { } @Override public void closeChest() { } - - - @Override - public int onReceiveSteam(int vol, byte side) { - - - if(steamStored + vol <= 100) - { - steamStored = steamStored + vol; - return 0; - } - return vol; - - } - - @Override - public boolean canRecieveSteam(byte side) { - - return true; - } - - @Override - public int getStoredSteam() { - - return this.steamStored; - } - - @Override - public int getSteamCapacity() { - return 100; - } - - @Override - public int onProduceWater(int maxVol, int side) { - - if(this.waterStored > 0) - { - --waterStored; - return 1; - } - - return 0; - } - - @Override - public boolean canProduceWater(byte side) { - - return true; - } - - @Override public int getVolts() { // TODO Auto-generated method stub @@ -314,4 +265,64 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce // TODO Auto-generated method stub return false; } + + @Override + public int onProduceLiquid(int type, int maxVol, int side) { + if(type == 1) + { + if(this.waterStored > 0) + { + --waterStored; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, byte side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int onReceiveLiquid(int type, int vol, byte side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); + this.steamStored = vol - rejectedSteam; + return rejectedSteam; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type, byte side) { + if(type == 0) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type == 0) + { + return 100; + } + return 0; + } } diff --git a/minecraft/net/minecraft/src/mod_BasicPipes.java b/minecraft/net/minecraft/src/mod_BasicPipes.java new file mode 100644 index 00000000..101e90d4 --- /dev/null +++ b/minecraft/net/minecraft/src/mod_BasicPipes.java @@ -0,0 +1,82 @@ +package net.minecraft.src; +import net.minecraft.client.Minecraft; +import net.minecraft.src.eui.pipes.RenderPipe; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.universalelectricity.components.UniversalComponents; + +import java.util.ArrayList; +import java.util.Map; +import java.io.*; +public class mod_BasicPipes extends NetworkMod { + static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/BasicPipes.cfg"))); + public static int pipeID = configurationProperties(); + private static int partID; + private static int ppipeID; + public static Block pipe = new net.minecraft.src.eui.pipes.BlockPipe(pipeID).setBlockName("pipe"); + public static Item parts = new net.minecraft.src.eui.pipes.ItemParts(partID); + public static Item itemPipes = new net.minecraft.src.eui.pipes.ItemPipe(ppipeID); + @Override + public String getVersion() { + // TODO change version on each update ;/ + return "0.0.1"; + } + public static int configurationProperties() + { + config.load(); + pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); + partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); + ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); + config.save(); + return pipeID; + } + @Override + public void load() { + //register + UniversalElectricity.registerAddon(this, "0.3.1"); + MinecraftForgeClient.preloadTexture("/eui/Items.png"); + ModLoader.registerBlock(pipe); + ModLoader.registerTileEntity(net.minecraft.src.eui.pipes.TileEntityPipe.class, "pipe", new RenderPipe()); + //Names + + ModLoader.addName((new ItemStack(itemPipes, 1, 0)), "Steam"); + ModLoader.addName((new ItemStack(itemPipes, 1, 1)), "Water"); + ModLoader.addName((new ItemStack(itemPipes, 1, 2)), "Lava"); + ModLoader.addName((new ItemStack(itemPipes, 1, 3)), "Oil"); + ModLoader.addName((new ItemStack(itemPipes, 1, 4)), "Fuel"); + ModLoader.addName((new ItemStack(itemPipes, 1, 5)), "Air"); + ModLoader.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + ModLoader.addName((new ItemStack(parts, 1, 1)), "ObbyTube"); + ModLoader.addName((new ItemStack(parts, 1, 2)), "LeatherSeal"); + ModLoader.addName((new ItemStack(parts, 1, 3)), "ObsidianTube"); + ModLoader.addName((new ItemStack(parts, 1, 4)), "SlimeSeal"); + //Blocks + + ModLoader.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@', + UniversalComponents.ItemBronzeIngot}); + ModLoader.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@', + Block.obsidian}); + ModLoader.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@","@@", '@', + Item.leather}); + ModLoader.addRecipe(new ItemStack(parts, 2,3), new Object[] { "@@@", '@', + Item.ingotIron}); + ModLoader.addShapelessRecipe(new ItemStack(parts, 1,4), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.slimeBall, 1)}); + //crafting parts + /** + * case 0: return "steam"; + case 1: return "water"; + case 2: return "lava"; + case 3: return "oil"; + case 4: return "fuel"; + case 5: return "air"; + */ + ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,2)}); + ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,4)}); + ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,1)}); + ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,3),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); + ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,3),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + + } + + +} diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index b64f9fe1..0532f2fd 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -1,8 +1,6 @@ package net.minecraft.src; import net.minecraft.client.Minecraft; import net.minecraft.src.eui.*; -import net.minecraft.src.eui.steam.RenderPipe; -import net.minecraft.src.eui.steam.RenderPipeWater; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.*; import net.minecraft.src.universalelectricity.components.UniversalComponents; @@ -24,11 +22,7 @@ public class mod_EUIndustry extends NetworkMod { public static int boilerHeat; public static int fireOutput; public static Block machine = new net.minecraft.src.eui.BlockMachine(BlockID).setBlockName("machine"); - public static Block pipe = new net.minecraft.src.eui.steam.BlockPipe(pipeBlockID).setBlockName("pipe"); - public static Block pipeW = new net.minecraft.src.eui.steam.BlockPipeWater(pipeBlockID2).setBlockName("pipeW"); public static Item coalNugget = new net.minecraft.src.eui.ItemCoalFuel(coalID); - public static Item pipeItem = new net.minecraft.src.eui.steam.ItemPipe(pipeID); - public static Item parts = new net.minecraft.src.eui.ItemParts(partID); @Override public String getVersion() { // TODO change version on each update ;/ @@ -59,11 +53,7 @@ public class mod_EUIndustry extends NetworkMod { //Blocks //gen //machine - ModLoader.registerBlock(machine,net.minecraft.src.eui.ItemMachine.class); - ModLoader.registerBlock(pipe); - ModLoader.registerBlock(pipeW); - ModLoader.addName((new ItemStack(pipeItem, 1, 0)), "SteamPipe"); - ModLoader.addName((new ItemStack(pipeItem, 1, 1)), "WaterPipe"); + ModLoader.registerBlock(machine, net.minecraft.src.eui.ItemMachine.class); ModLoader.addName((new ItemStack(machine, 1, 0)), "CoalRefiner"); ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); @@ -76,20 +66,11 @@ public class mod_EUIndustry extends NetworkMod { ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator",new UEBlockRenderer()); ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityCondenser.class, "waterPump",new UEBlockRenderer()); ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.steam.TileEntityPipe.class, "pipe", new RenderPipe()); - ModLoader.registerTileEntity(net.minecraft.src.eui.steam.TileEntityPipeWater.class, "pipeW", new RenderPipeWater()); //Items ModLoader.addName((new ItemStack(coalNugget, 1, 0)), "CoalNuggets"); ModLoader.addName((new ItemStack(coalNugget, 1, 1)), "CoalPellets"); ModLoader.addName((new ItemStack(coalNugget, 1, 2)), "CoalDust"); - ModLoader.addName((new ItemStack(parts, 1, 1)), "Tank"); - ModLoader.addName((new ItemStack(parts, 1, 3)), "Valve"); - ModLoader.addName((new ItemStack(parts, 1, 4)), "Tube"); - ModLoader.addName((new ItemStack(parts, 1, 5)), "Seal"); - ModLoader.addName((new ItemStack(parts, 1, 6)), "Rivits"); - ModLoader.addName(pipeItem, "SteamPipe"); //fuels - ModLoader.addAllFuel((new ItemStack(coalNugget, 1, 0).itemID), 1000); //Crafting ModLoader.addRecipe(new ItemStack(machine, 1, 0), new Object [] {"@S@", "SCW", "@S@", @@ -97,7 +78,7 @@ public class mod_EUIndustry extends NetworkMod { '@',new ItemStack(UniversalComponents.ItemSteelPlate), 'C',new ItemStack(UniversalComponents.ItemCircuit,1,1), 'W',UniversalComponents.ItemCopperWire}); - ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + /**ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", 'T',new ItemStack(parts, 1,1), '@',new ItemStack(UniversalComponents.ItemSteelPlate), 'O',new ItemStack(parts, 1,4), @@ -109,20 +90,7 @@ public class mod_EUIndustry extends NetworkMod { 'T',new ItemStack(parts, 1,4), '@',new ItemStack(UniversalComponents.ItemSteelPlate), 'P',Block.pistonBase, - 'M',new ItemStack(UniversalComponents.ItemMotor)}); - ModLoader.addShapelessRecipe(new ItemStack(pipeItem, 4), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); - ModLoader.addShapelessRecipe(new ItemStack(pipeItem, 4), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Block.glass, 1),new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); - //crafting parts - ModLoader.addShapelessRecipe(new ItemStack(parts, 2,1), new Object[] { new ItemStack(UniversalComponents.ItemCopperIngot, 1), - new ItemStack(UniversalComponents.ItemCopperIngot, 1),new ItemStack(UniversalComponents.ItemCopperIngot, 1), - new ItemStack(UniversalComponents.ItemCopperIngot, 1), new ItemStack(parts,1,6)}); - ModLoader.addRecipe(new ItemStack(parts, 2, 3), new Object [] {" S ", "TTT", " ", 'T', - new ItemStack(parts, 8, 4),'S',UniversalComponents.ItemSteelIngot}); - ModLoader.addRecipe(new ItemStack(parts, 8, 4), new Object [] {"@@@", " ", "@@@", '@', - UniversalComponents.ItemBronzeIngot}); - ModLoader.addRecipe(new ItemStack(parts, 8, 5), new Object [] {"@@@", "@ @", "@@@", '@', - Item.leather}); - ModLoader.addShapelessRecipe(new ItemStack(parts, 4,6), new Object[] { new ItemStack(UniversalComponents.ItemCopperIngot, 1)}); + 'M',new ItemStack(UniversalComponents.ItemMotor)});**/ //smelting diff --git a/minecraft/net/minecraft/src/mod_UtilityBlocks.java b/minecraft/net/minecraft/src/mod_UtilityBlocks.java index d251ebb6..de813a03 100644 --- a/minecraft/net/minecraft/src/mod_UtilityBlocks.java +++ b/minecraft/net/minecraft/src/mod_UtilityBlocks.java @@ -1,5 +1,4 @@ package net.minecraft.src; -import net.minecraft.src.eui.steam.RenderPipeWater; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.UEBlockRenderer; import net.minecraft.src.universalelectricity.UniversalElectricity; diff --git a/minecraft_server/net/minecraft/src/EntityCreeper.java b/minecraft_server/net/minecraft/src/EntityCreeper.java new file mode 100644 index 00000000..c466d52a --- /dev/null +++ b/minecraft_server/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,192 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMob +{ + /** + * The amount of time since the creeper was close enough to the player to ignite + */ + int timeSinceIgnited; + + /** + * Time when this creeper was last in an active state (Messed up code here, probably causes creeper animation to go + * weird) + */ + int lastActiveTime; + + public EntityCreeper(World par1World) + { + super(par1World); + this.texture = "/mob/creeper.png"; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAICreeperSwell(this)); + this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 0.25F, 0.3F)); + this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 0.25F, false)); + this.tasks.addTask(5, new EntityAIWander(this, 0.2F)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(6, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 16.0F, 0, true)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false)); + } + + /** + * Returns true if the newer Entity AI code should be run + */ + public boolean isAIEnabled() + { + return true; + } + + public int getMaxHealth() + { + return 20; + } + + protected void entityInit() + { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte) - 1)); + this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); + } + + /** + * (abstract) Protected helper method to write subclass entity data to NBT. + */ + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + + if (this.dataWatcher.getWatchableObjectByte(17) == 1) + { + par1NBTTagCompound.setBoolean("powered", true); + } + } + + /** + * (abstract) Protected helper method to read subclass entity data from NBT. + */ + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)(par1NBTTagCompound.getBoolean("powered") ? 1 : 0))); + } + + /** + * Called to update the entity's position/logic. + */ + public void onUpdate() + { + if (this.isEntityAlive()) + { + this.lastActiveTime = this.timeSinceIgnited; + int var1 = this.getCreeperState(); + + if (var1 > 0 && this.timeSinceIgnited == 0) + { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.timeSinceIgnited += var1; + + if (this.timeSinceIgnited < 0) + { + this.timeSinceIgnited = 0; + } + + if (this.timeSinceIgnited >= 30) + { + this.timeSinceIgnited = 30; + + if (!this.worldObj.isRemote) + { + if (this.getPowered()) + { + //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 6.0F); + } + else + { + //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 3.0F); + } + + this.setDead(); + } + } + } + + super.onUpdate(); + } + + /** + * Returns the sound this mob makes when it is hurt. + */ + protected String getHurtSound() + { + return "mob.creeper"; + } + + /** + * Returns the sound this mob makes on death. + */ + protected String getDeathSound() + { + return "mob.creeperdeath"; + } + + /** + * Called when the mob's health reaches 0. + */ + public void onDeath(DamageSource par1DamageSource) + { + super.onDeath(par1DamageSource); + + if (par1DamageSource.getEntity() instanceof EntitySkeleton) + { + this.dropItem(Item.record13.shiftedIndex + this.rand.nextInt(10), 1); + } + } + + public boolean attackEntityAsMob(Entity par1Entity) + { + return true; + } + + /** + * Returns true if the creeper is powered by a lightning bolt. + */ + public boolean getPowered() + { + return this.dataWatcher.getWatchableObjectByte(17) == 1; + } + + /** + * Returns the item ID for the item the mob drops on death. + */ + protected int getDropItemId() + { + return Item.gunpowder.shiftedIndex; + } + + /** + * Returns the current state of creeper, -1 is idle, 1 is 'in fuse' + */ + public int getCreeperState() + { + return this.dataWatcher.getWatchableObjectByte(16); + } + + /** + * Sets the state of creeper, -1 to idle and 1 to be 'in fuse' + */ + public void setCreeperState(int par1) + { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)par1)); + } + + /** + * Called when a lightning bolt hits the entity. + */ + public void onStruckByLightning(EntityLightningBolt par1EntityLightningBolt) + { + super.onStruckByLightning(par1EntityLightningBolt); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)1)); + } +} From 23b1e4ee29e9332e18f9e03861e2bcc3e2085a85 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sat, 7 Jul 2012 03:34:42 -0400 Subject: [PATCH 007/115] Remove old code *already remove from main code but forgot to delete from git repo --- .../minecraft/src/eui/steam/BlockPipe.java | 139 ------------ .../src/eui/steam/BlockPipeWater.java | 139 ------------ .../net/minecraft/src/eui/steam/ItemPipe.java | 123 ---------- .../minecraft/src/eui/steam/ModelPipe.java | 98 -------- .../minecraft/src/eui/steam/RenderPipe.java | 40 ---- .../src/eui/steam/RenderPipeWater.java | 40 ---- .../src/eui/steam/TileEntityPipe.java | 213 ------------------ .../src/eui/steam/TileEntityPipeWater.java | 207 ----------------- 8 files changed, 999 deletions(-) delete mode 100644 minecraft/net/minecraft/src/eui/steam/BlockPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/ItemPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/ModelPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/RenderPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java diff --git a/minecraft/net/minecraft/src/eui/steam/BlockPipe.java b/minecraft/net/minecraft/src/eui/steam/BlockPipe.java deleted file mode 100644 index 58028088..00000000 --- a/minecraft/net/minecraft/src/eui/steam/BlockPipe.java +++ /dev/null @@ -1,139 +0,0 @@ -package net.minecraft.src.eui.steam; - -import java.util.ArrayList; - -import net.minecraft.src.eui.api.*; -import net.minecraft.src.eui.*; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.eui.turbine.TileEntityGenerator; -import net.minecraft.src.eui.steam.TileEntityPipe; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.*; - -import java.util.Random; - -public class BlockPipe extends BlockContainer -{ - static String type = ""; - public BlockPipe(int id) - { - super(id, Material.iron); - this.setBlockName("Pipe"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return mod_EUIndustry.pipeID; - } - - public TileEntity getBlockEntity() - { - return new TileEntityPipe(); - } - - //Per tick - public int conductorCapacity() - { - return 5; - } - public static TileEntity getUEUnit(World world, int x, int y, int z, byte side) - { - switch(side) - { - case 0: y -= 1; break; - case 1: y += 1; break; - case 2: z += 1; break; - case 3: z -= 1; break; - case 4: x += 1; break; - case 5: x -= 1; break; - } - - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - TileEntity returnValue = null; - - if(tileEntity instanceof ISteamConsumer) - { - if(((ISteamConsumer)tileEntity).canRecieveSteam(UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - if (tileEntity instanceof ISteamProducer) - { - if(((ISteamProducer)tileEntity).canProduceSteam(UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - return returnValue; - } - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - - this.updateConductorTileEntity(world, x, y, z); - } - - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - - this.updateConductorTileEntity(world, x, y, z); - } - - public void updateConductorTileEntity(World world, int x, int y, int z) - { - for(byte i = 0; i < 6; i++) - { - //Update the tile entity on neighboring blocks - TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i), i); - } - } - - - } - - diff --git a/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java b/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java deleted file mode 100644 index 160544ec..00000000 --- a/minecraft/net/minecraft/src/eui/steam/BlockPipeWater.java +++ /dev/null @@ -1,139 +0,0 @@ -package net.minecraft.src.eui.steam; - -import java.util.ArrayList; - -import net.minecraft.src.eui.api.IWaterConsumer; -import net.minecraft.src.eui.api.IWaterProducer; -import net.minecraft.src.eui.*; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.eui.turbine.TileEntityGenerator; -import net.minecraft.src.eui.steam.TileEntityPipeWater; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.*; - -import java.util.Random; - -public class BlockPipeWater extends BlockContainer -{ - static String type = ""; - public BlockPipeWater(int id) - { - super(id, Material.iron); - this.setBlockName("PipeW"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return mod_EUIndustry.pipeID; - } - - public TileEntity getBlockEntity() - { - return new TileEntityPipeWater(); - } - - //Per tick - public int conductorCapacity() - { - return 5; - } - public static TileEntity getUEUnit(World world, int x, int y, int z, byte side) - { - switch(side) - { - case 0: y -= 1; break; - case 1: y += 1; break; - case 2: z += 1; break; - case 3: z -= 1; break; - case 4: x += 1; break; - case 5: x -= 1; break; - } - - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - TileEntity returnValue = null; - - if(tileEntity instanceof IWaterConsumer) - { - if(((IWaterConsumer)tileEntity).canRecieveWater(UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - if (tileEntity instanceof IWaterProducer) - { - if(((IWaterProducer)tileEntity).canProduceWater(UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - return returnValue; - } - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - - this.updateConductorTileEntity(world, x, y, z); - } - - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - - this.updateConductorTileEntity(world, x, y, z); - } - - public void updateConductorTileEntity(World world, int x, int y, int z) - { - for(byte i = 0; i < 6; i++) - { - //Update the tile entity on neighboring blocks - TileEntityPipeWater conductorTileEntity = (TileEntityPipeWater)world.getBlockTileEntity(x, y, z); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i), i); - } - } - - } - - diff --git a/minecraft/net/minecraft/src/eui/steam/ItemPipe.java b/minecraft/net/minecraft/src/eui/steam/ItemPipe.java deleted file mode 100644 index a30e52bb..00000000 --- a/minecraft/net/minecraft/src/eui/steam/ItemPipe.java +++ /dev/null @@ -1,123 +0,0 @@ -package net.minecraft.src.eui.steam; - -import java.util.ArrayList; - -import net.minecraft.src.forge.*; -import net.minecraft.src.*; - -public class ItemPipe extends Item implements ITextureProvider -{ - private int spawnID; - - public ItemPipe(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("pipe"); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 11; - case 1: return 10; - } - return this.iconIndex; - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "waterPipe"; - case 0: return "steamPipe"; - } - return this.getItemName(); - } - /** - * Callback for item usage. If the item does something special on right clicking, he will have one of those. Return - * True if something happen and false if it don't. This is for ITEMS, not BLOCKS ! - */ - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) - { - int blockID = par3World.getBlockId(par4, par5, par6); - if(par1ItemStack.getItemDamage() == 0) - { - spawnID = mod_EUIndustry.pipeBlockID; - } - if(par1ItemStack.getItemDamage() == 1) - { - spawnID = mod_EUIndustry.pipeBlockID2; - } - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (par3World.canBlockBePlacedAt(this.spawnID, par4, par5, par6, false, par7)) - { - Block var9 = Block.blocksList[this.spawnID]; - - if (par3World.setBlockWithNotify(par4, par5, par6, this.spawnID)) - { - if (par3World.getBlockId(par4, par5, par6) == this.spawnID) - { - Block.blocksList[this.spawnID].onBlockPlaced(par3World, par4, par5, par6, par7); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - } - - --par1ItemStack.stackSize; - - return true; - } - } - - return false; - } - - @Override - public String getTextureFile() { - return "/eui/Items.png"; - } - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); -} - -} diff --git a/minecraft/net/minecraft/src/eui/steam/ModelPipe.java b/minecraft/net/minecraft/src/eui/steam/ModelPipe.java deleted file mode 100644 index da86f193..00000000 --- a/minecraft/net/minecraft/src/eui/steam/ModelPipe.java +++ /dev/null @@ -1,98 +0,0 @@ -package net.minecraft.src.eui.steam; - -import net.minecraft.src.*; - -public class ModelPipe extends ModelBase -{ - //fields - ModelRenderer Middle; - ModelRenderer Right; - ModelRenderer Left; - ModelRenderer Back; - ModelRenderer Front; - ModelRenderer Top; - ModelRenderer Bottom; - - public ModelPipe() - { - textureWidth = 64; - textureHeight = 32; - - Middle = new ModelRenderer(this, 0, 0); - Middle.addBox(-1F, -1F, -1F, 4, 4, 4); - Middle.setRotationPoint(-1F, 15F, -1F); - Middle.setTextureSize(64, 32); - Middle.mirror = true; - setRotation(Middle, 0F, 0F, 0F); - Right = new ModelRenderer(this, 21, 0); - Right.addBox(0F, 0F, 0F, 6, 4, 4); - Right.setRotationPoint(2F, 14F, -2F); - Right.setTextureSize(64, 32); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - Left = new ModelRenderer(this, 21, 0); - Left.addBox(0F, 0F, 0F, 6, 4, 4); - Left.setRotationPoint(-8F, 14F, -2F); - Left.setTextureSize(64, 32); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - Back = new ModelRenderer(this, 0, 11); - Back.addBox(0F, 0F, 0F, 4, 4, 6); - Back.setRotationPoint(-2F, 14F, 2F); - Back.setTextureSize(64, 32); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - Front = new ModelRenderer(this, 0, 11); - Front.addBox(0F, 0F, 0F, 4, 4, 6); - Front.setRotationPoint(-2F, 14F, -8F); - Front.setTextureSize(64, 32); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - Top = new ModelRenderer(this, 21, 11); - Top.addBox(0F, 0F, 0F, 4, 6, 4); - Top.setRotationPoint(-2F, 8F, -2F); - Top.setTextureSize(64, 32); - Top.mirror = true; - setRotation(Top, 0F, 0F, 0F); - Bottom = new ModelRenderer(this, 21, 11); - Bottom.addBox(0F, 0F, 0F, 4, 6, 4); - Bottom.setRotationPoint(-2F, 18F, -2F); - Bottom.setTextureSize(64, 32); - Bottom.mirror = true; - setRotation(Bottom, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - this.renderMiddle(); - this.renderBottom(); - this.renderTop(); - this.renderLeft(); - this.renderRight(); - this.renderBack(); - this.renderFront(); - } - - public void renderMiddle() { Middle.render(0.0625F); } - public void renderBottom() { Bottom.render(0.0625F); } - public void renderTop() { Top.render(0.0625F); } - public void renderLeft() { Left.render(0.0625F); } - public void renderRight() { Right.render(0.0625F); } - public void renderBack() { Back.render(0.0625F); } - public void renderFront() { Front.render(0.0625F);} - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/minecraft/net/minecraft/src/eui/steam/RenderPipe.java b/minecraft/net/minecraft/src/eui/steam/RenderPipe.java deleted file mode 100644 index 7a0a8637..00000000 --- a/minecraft/net/minecraft/src/eui/steam/RenderPipe.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.src.eui.steam; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderPipe extends TileEntitySpecialRenderer -{ - private ModelPipe model; - - public RenderPipe() - { - model = new ModelPipe(); - } - - public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) - { - //Texture file - bindTextureByName("/eui/CopperWire.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - - if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) model.renderTop(); - if(tileEntity.connectedBlocks[2] != null) model.renderFront(); - if(tileEntity.connectedBlocks[3] != null) model.renderBack(); - if(tileEntity.connectedBlocks[4] != null) model.renderRight(); - if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); - - model.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java b/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java deleted file mode 100644 index 30ed6bff..00000000 --- a/minecraft/net/minecraft/src/eui/steam/RenderPipeWater.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.src.eui.steam; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderPipeWater extends TileEntitySpecialRenderer -{ - private ModelPipe model; - - public RenderPipeWater() - { - model = new ModelPipe(); - } - - public void renderAModelAt(TileEntityPipeWater tileEntity, double d, double d1, double d2, float f) - { - //Texture file - bindTextureByName("/eui/WaterPipe.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - - if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) model.renderTop(); - if(tileEntity.connectedBlocks[2] != null) model.renderFront(); - if(tileEntity.connectedBlocks[3] != null) model.renderBack(); - if(tileEntity.connectedBlocks[4] != null) model.renderRight(); - if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); - - model.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipeWater)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java deleted file mode 100644 index 966b8e7e..00000000 --- a/minecraft/net/minecraft/src/eui/steam/TileEntityPipe.java +++ /dev/null @@ -1,213 +0,0 @@ -package net.minecraft.src.eui.steam; - -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.eui.api.ISteamConsumer; -import net.minecraft.src.eui.api.ISteamProducer; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.Vector3; - -public class TileEntityPipe extends TileEntity implements ISteamConsumer -{ - //The amount of electricity stored in the conductor - protected int steamStored = 0; - - //The maximum amount of electricity this conductor can take - protected int capacity = 5; - - //Stores information on all connected blocks around this tile entity - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - - //Checks if this is the first the tile entity updates - protected boolean firstUpdate = true; - - /** - * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity - * should transfer - */ - public TileEntity closestConsumer = null; - - /** - * This function adds a connection between this conductor and the UE unit - * @param tileEntity - Must be either a producer, consumer or a conductor - * @param side - side in which the connection is coming from - */ - public void addConnection(TileEntity tileEntity, byte side) - { - if(tileEntity instanceof ISteamConsumer || tileEntity instanceof ISteamProducer) - { - this.connectedBlocks[side] = tileEntity; - } - else - { - this.connectedBlocks[side] = null; - } - } - - /** - * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param watts - The amount of watt this block recieved - * @param side - The side of the block in which the electricity came from - * @return watt - The amount of rejected power to be sent back into the conductor - */ - @Override - public int onReceiveSteam(int watt, byte side) - { - int rejectedElectricity = Math.max((this.steamStored + watt) - this.capacity, 0); - this.steamStored += watt - rejectedElectricity; - return rejectedElectricity; - } - - /** - * You can use this to check if a wire can connect to this UE consumer to properly render the graphics - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveSteam(byte side) - { - return true; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - @Override - public void updateEntity() - { - if(this.firstUpdate) - { - //Update some variables - BlockPipe conductorBlock = (BlockPipe)this.getBlockType(); - this.capacity = (conductorBlock).conductorCapacity(); - ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - this.firstUpdate = false; - } - - //Spread the electricity to neighboring blocks - byte connectedUnits = 0; - byte connectedConductors = 1; - int averageElectricity = this.steamStored; - this.closestConsumer = null; - - Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); - if(this.steamStored * 3.3 > 250) - { - // TODO add logic to damage pipe if steam rises to 250PSI - } - //Find the connected unit with the least amount of electricity and give more to them - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - if(connectedBlocks[i] instanceof ISteamConsumer) - { - connectedUnits ++; - - if(connectedBlocks[i].getClass() == this.getClass()) - { - averageElectricity += ((TileEntityPipe)connectedBlocks[i]).steamStored; - - TileEntity tileEntity = ((TileEntityPipe)connectedBlocks[i]).closestConsumer; - - if(tileEntity != null) - { - this.closestConsumer = tileEntity; - } - - connectedConductors ++; - } - else if(connectedBlocks[i] instanceof ISteamConsumer) - { - if(((ISteamConsumer)connectedBlocks[i]).canRecieveSteam(UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - this.closestConsumer = connectedBlocks[i]; - } - } - - } - } - } - - averageElectricity = averageElectricity/connectedConductors; - - - float averageWatt = 0; - - if(connectedUnits > 0) - { - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the electricity among the different blocks - if(connectedBlocks[i] instanceof ISteamConsumer && this.steamStored > 0) - { - if(((ISteamConsumer)connectedBlocks[i]).canRecieveSteam(UniversalElectricity.getOrientationFromSide(i, (byte) 2))) - { - int transferElectricityAmount = 0; - ISteamConsumer connectedConsumer = ((ISteamConsumer)connectedBlocks[i]); - - if(connectedBlocks[i].getClass() == this.getClass() && this.steamStored > ((TileEntityPipe)connectedConsumer).steamStored) - { - transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipe)connectedConsumer).steamStored, this.steamStored), 0); - } - else if(!(connectedConsumer instanceof TileEntityPipe)) - { - transferElectricityAmount = this.steamStored; - } - - int rejectedElectricity = connectedConsumer.onReceiveSteam(transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.steamStored = Math.max(Math.min(this.steamStored - transferElectricityAmount + rejectedElectricity, this.capacity), 0); - } - } - - if(connectedBlocks[i] instanceof ISteamProducer && this.steamStored < this.getSteamCapacity()) - { - if(((ISteamProducer)connectedBlocks[i]).canProduceSteam(UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - int gainedElectricity = ((ISteamProducer)connectedBlocks[i]).onProduceSteam(this.capacity-this.steamStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.steamStored = Math.max(Math.min(this.steamStored + gainedElectricity, this.capacity), 0); - } - } - } - } - } - } - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - @Override - public int getStoredSteam() - { - return this.steamStored; - } - - @Override - public int getSteamCapacity() - { - return this.capacity; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.steamStored = par1NBTTagCompound.getInteger("steamStored"); - this.capacity = par1NBTTagCompound.getInteger("capacity"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("steamStored", this.steamStored); - par1NBTTagCompound.setInteger("capacity", this.capacity); - } - -} - diff --git a/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java b/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java deleted file mode 100644 index 2423e4d2..00000000 --- a/minecraft/net/minecraft/src/eui/steam/TileEntityPipeWater.java +++ /dev/null @@ -1,207 +0,0 @@ -package net.minecraft.src.eui.steam; - -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.eui.api.IWaterConsumer; -import net.minecraft.src.eui.api.IWaterProducer; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.Vector3; - -public class TileEntityPipeWater extends TileEntity implements IWaterConsumer -{ - //The amount of electricity stored in the conductor - protected int waterStored = 0; - - //The maximum amount of electricity this conductor can take - protected int capacity = 5; - - //Stores information on all connected blocks around this tile entity - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - - //Checks if this is the first the tile entity updates - protected boolean firstUpdate = true; - - /** - * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity - * should transfer - */ - public TileEntity closestConsumer = null; - - /** - * This function adds a connection between this conductor and the UE unit - * @param tileEntity - Must be either a producer, consumer or a conductor - * @param side - side in which the connection is coming from - */ - public void addConnection(TileEntity tileEntity, byte side) - { - if(tileEntity instanceof IWaterConsumer || tileEntity instanceof IWaterProducer) - { - this.connectedBlocks[side] = tileEntity; - } - else - { - this.connectedBlocks[side] = null; - } - } - - /** - * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param watts - The amount of watt this block recieved - * @param side - The side of the block in which the electricity came from - * @return watt - The amount of rejected power to be sent back into the conductor - */ - @Override - public int onReceiveWater(int watt, byte side) - { - int rejectedElectricity = Math.max((this.waterStored + watt) - this.capacity, 0); - this.waterStored += watt - rejectedElectricity; - return rejectedElectricity; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - @Override - public void updateEntity() - { - if(this.firstUpdate) - { - //Update some variables - BlockPipeWater conductorBlock = (BlockPipeWater)this.getBlockType(); - this.capacity = (conductorBlock).conductorCapacity(); - ((BlockPipeWater)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - this.firstUpdate = false; - } - - //Spread the electricity to neighboring blocks - byte connectedUnits = 0; - byte connectedConductors = 1; - int averageElectricity = this.waterStored; - this.closestConsumer = null; - - Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); - - //Find the connected unit with the least amount of electricity and give more to them - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - if(connectedBlocks[i] instanceof IWaterConsumer) - { - connectedUnits ++; - - if(connectedBlocks[i].getClass() == this.getClass()) - { - averageElectricity += ((TileEntityPipeWater)connectedBlocks[i]).waterStored; - - TileEntity tileEntity = ((TileEntityPipeWater)connectedBlocks[i]).closestConsumer; - - if(tileEntity != null) - { - this.closestConsumer = tileEntity; - } - - connectedConductors ++; - } - else if(connectedBlocks[i] instanceof IWaterConsumer) - { - if(((IWaterConsumer)connectedBlocks[i]).canRecieveWater(UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - this.closestConsumer = connectedBlocks[i]; - } - } - - } - } - } - - averageElectricity = averageElectricity/connectedConductors; - - - float averageWatt = 0; - - if(connectedUnits > 0) - { - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the electricity among the different blocks - if(connectedBlocks[i] instanceof IWaterConsumer && this.waterStored > 0) - { - if(((IWaterConsumer)connectedBlocks[i]).canRecieveWater(UniversalElectricity.getOrientationFromSide(i, (byte) 2))) - { - int transferElectricityAmount = 0; - IWaterConsumer connectedConsumer = ((IWaterConsumer)connectedBlocks[i]); - - if(connectedBlocks[i].getClass() == this.getClass() && this.waterStored > ((TileEntityPipeWater)connectedConsumer).waterStored) - { - transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipeWater)connectedConsumer).waterStored, this.waterStored), 0); - } - else if(!(connectedConsumer instanceof TileEntityPipeWater)) - { - transferElectricityAmount = this.waterStored; - } - - int rejectedElectricity = connectedConsumer.onReceiveWater(transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.waterStored = Math.max(Math.min(this.waterStored - transferElectricityAmount + rejectedElectricity, this.capacity), 0); - } - } - - if(connectedBlocks[i] instanceof IWaterProducer && this.waterStored < this.getWaterCapacity()) - { - if(((IWaterProducer)connectedBlocks[i]).canProduceWater(UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - int gainedElectricity = ((IWaterProducer)connectedBlocks[i]).onProduceWater(this.capacity-this.waterStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.waterStored = Math.max(Math.min(this.waterStored + gainedElectricity, this.capacity), 0); - } - } - } - } - } - } - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - @Override - public int getStoredWater() - { - return this.waterStored; - } - - @Override - public int getWaterCapacity() - { - return this.capacity; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - this.capacity = par1NBTTagCompound.getInteger("capacity"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("waterStored", this.waterStored); - par1NBTTagCompound.setInteger("capacity", this.capacity); - } - - @Override - public boolean canRecieveWater(byte side) { - // TODO Auto-generated method stub - return true; - } - -} - From 2e245662c21228224496457e2aa16eeea497b442 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sat, 7 Jul 2012 03:35:55 -0400 Subject: [PATCH 008/115] Fixed liquid storage Liquid entering was being used as the current liquid storage. Fixed so liquid entering added to current --- minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java | 2 +- .../net/minecraft/src/eui/turbine/TileEntityGenerator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java index d2d95a3f..310bf120 100644 --- a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -554,7 +554,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I if(type == 1) { int rejectedElectricity = Math.max((this.waterStored + vol) - 14, 0); - this.waterStored = vol - rejectedElectricity; + this.waterStored += vol - rejectedElectricity; return rejectedElectricity; } return vol; diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java index a1e36680..2784f86b 100644 --- a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java +++ b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java @@ -293,7 +293,7 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce if(type == 0) { int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored = vol - rejectedSteam; + this.steamStored += vol - rejectedSteam; return rejectedSteam; } return vol; From 5d098d517df6021484bda405e2a7d2f25ad07916 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sat, 7 Jul 2012 03:36:27 -0400 Subject: [PATCH 009/115] Code Clean up messed with some code and cleanup a little --- .../src/eui/pipes/TileEntityPipe.java | 30 ++++--------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 7cd9b5e9..747719fa 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -25,7 +25,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity * should transfer */ - public TileEntity closestConsumer = null; + /** * This function adds a connection between this conductor and the UE unit @@ -79,8 +79,8 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } @Override public void updateEntity() - { - BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + { + ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); //Find the connected unit with the least amount of electricity and give more to them if(!this.worldObj.isRemote) @@ -89,7 +89,6 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer byte connectedUnits = 0; byte connectedConductors = 1; int averageElectricity = this.liquidStored; - this.closestConsumer = null; Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); @@ -101,27 +100,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer { connectedUnits ++; - if(connectedBlocks[i].getClass() == this.getClass()) + if(connectedBlocks[i] instanceof TileEntityPipe) { averageElectricity += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - - TileEntity tileEntity = ((TileEntityPipe)connectedBlocks[i]).closestConsumer; - - if(tileEntity != null) - { - this.closestConsumer = tileEntity; - } connectedConductors ++; } - else if(connectedBlocks[i] instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - this.closestConsumer = connectedBlocks[i]; - } - } - } } } @@ -141,7 +125,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer int transferElectricityAmount = 0; ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - if(connectedBlocks[i].getClass() == this.getClass() && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) + if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) { transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); } @@ -175,11 +159,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer @Override public int getStoredLiquid(int type) { - if(type == this.type) - { return this.liquidStored; - } - return 0; } From da780329bc055366e2e8ada6abb6db08882f64ba Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 9 Jul 2012 18:52:33 -0500 Subject: [PATCH 010/115] Update master --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java index 519c7d3e..57e4aa59 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java @@ -27,5 +27,6 @@ public interface ILiquidConsumer * @return Return the maximum amount of stored liquid this consumer can get. */ public int getLiquidCapacity(int type); + public int canConnectFromSideAndType(int type, byte side); } From 9197dc0dabc30dbad6a12ed9b118bb3aae2c897e Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 9 Jul 2012 18:53:11 -0500 Subject: [PATCH 011/115] Update master --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java index e715828d..008cb43e 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java @@ -18,4 +18,6 @@ public interface ILiquidProducer public int onProduceLiquid(int type, int maxVol, int side); public boolean canProduceLiquid(int type, byte side); + + public boolean canConnectFromTypeAndSide(int type, byte side); } \ No newline at end of file From 945f9c962bb1d3ef35985281acfb3049c5596ce4 Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 9 Jul 2012 18:53:33 -0500 Subject: [PATCH 012/115] Update master --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java index 57e4aa59..f6714cb0 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java @@ -27,6 +27,6 @@ public interface ILiquidConsumer * @return Return the maximum amount of stored liquid this consumer can get. */ public int getLiquidCapacity(int type); - public int canConnectFromSideAndType(int type, byte side); + public int canConnectFromTypeAndSide(int type, byte side); } From 9d720d48ec7c6bc9ed09eda4da40dbf6d1bb43bb Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 9 Jul 2012 19:00:24 -0500 Subject: [PATCH 013/115] Updates. --- .../minecraft/src/eui/pipes/TileEntityPipe.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 747719fa..26c25361 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -47,9 +47,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } else { - if(tileEntity instanceof ILiquidConsumer || tileEntity instanceof ILiquidProducer) + if(tileEntity instanceof ILiquidProducer) { - this.connectedBlocks[side] = tileEntity; + if(((ILiquidProducer) tileEntity).canConnectFromTypeAndSide(this.getType(), side)) this.connectedBlocks[side] = tileEntity; + }else if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer) tileEntity).canConnectFromTypeAndSide(this.getType(), side)) this.connectedBlocks[side] = tileEntity; } else { @@ -67,13 +70,13 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer * @return watt - The amount of rejected power to be sent back into the conductor */ @Override - public int onReceiveLiquid(int type,int watt, byte side) + public int onReceiveLiquid(int type,int amt, byte side) { if(type == this.type) { - int rejectedElectricity = Math.max((this.getStoredLiquid(type) + watt) - this.capacity, 0); - this.liquidStored = watt - rejectedElectricity; - return rejectedElectricity; + int rejectedLiquid = Math.max((this.getStoredLiquid(type) + amt) - this.capacity, 0); + this.liquidStored += watt - rejectedElectricity; + return rejectedLiquid; } return watt; } @@ -154,7 +157,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + * @return Return the stored liquid in this consumer. Called by conductors to spread electricity to this unit. */ @Override public int getStoredLiquid(int type) From 8b0d8a9c82c8cdea09b9c6a95ead0582a8c49f99 Mon Sep 17 00:00:00 2001 From: atrain99 Date: Mon, 9 Jul 2012 19:54:56 -0500 Subject: [PATCH 014/115] Texture Files now included --- textures/SteamPipe.png | Bin 0 -> 3013 bytes textures/WaterPipe.png | Bin 0 -> 3192 bytes textures/airPipe.png | Bin 0 -> 3007 bytes textures/fuelPipe.png | Bin 0 -> 3021 bytes textures/lavaPipe.png | Bin 0 -> 3023 bytes textures/oilPipe.png | Bin 0 -> 3017 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 textures/SteamPipe.png create mode 100644 textures/WaterPipe.png create mode 100644 textures/airPipe.png create mode 100644 textures/fuelPipe.png create mode 100644 textures/lavaPipe.png create mode 100644 textures/oilPipe.png diff --git a/textures/SteamPipe.png b/textures/SteamPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..a3dc6a0d5ff727efa5de7de40d8e017924649a8c GIT binary patch literal 3013 zcmV;$3p(_PP)|D^_ww@lRz|vCuzLs)$;-`! zo*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!& zC1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2hoGcOF60t^# zFqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTXa!E_i;d2ub z1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqKG_|(0G&D0Z z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl z*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY_n(^h55xYX z#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^bXThc7C4-yr zInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qjZ=)yBuQ3=5 z4Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK%>{;v(b^`kb zN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<)0>40zCTJ7v z2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01)S~6}jY?%U? zgEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j*2tcg9i<^O zEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfK zTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761jmyXF)a;mc z^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQqHZJR2&bcD4 z9Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^TY0bZ?)4%0 z1p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK8LKk71XR(_ zRKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS<&CX#T35dw zS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@qL5!WvekBL z-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW%ue3U;av{9 z4wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#o zSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%oZ=0JGnu?n~ z9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8No_-(u{qS+0 z<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-UsyQuty7Ua; zOu?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimkUAw*F_TX^n z@STz9kDQ$NC=!KfXWC z8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgUAAWQEt$#LR zcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6?<+s(e(3(_ z^YOu_)K8!O1p}D#{JO;G(*OVf24YJ`L;(K){{a7>y{D4^000SaNLh0L01mpFr}$Y=`s}fR$ZlCn}Mhw4MJ1v0)cM{Rc=wgzF5rF zX3=Dqp-1iNTXSd|q-~H0AOeU0B7g{x)0buM6*LHu1ct{QLwSE7Q$csl00000NkvXX Hu0mjfxJIJr literal 0 HcmV?d00001 diff --git a/textures/WaterPipe.png b/textures/WaterPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..eab6d097647a27f9ef1692c48cb3b6c63a02d15f GIT binary patch literal 3192 zcmV-;42ScHP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 Br;Y#s literal 0 HcmV?d00001 diff --git a/textures/fuelPipe.png b/textures/fuelPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..38b79d5f26806249c955fbff60c71d277172f792 GIT binary patch literal 3021 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 P00000NkvXXu0mjfat^GO literal 0 HcmV?d00001 diff --git a/textures/lavaPipe.png b/textures/lavaPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..df10a3a963c548b920da2566d1f57f335a71cc93 GIT binary patch literal 3023 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 LNkvXXu0mjf#_*}m literal 0 HcmV?d00001 From ae6896e292c2a02b3700898c1773996a6fda02c3 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 03:48:42 -0300 Subject: [PATCH 015/115] removed unNeeded Code Sorry aTrain but canRecieveLiquid is used to determin connection --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java index f6714cb0..519c7d3e 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java @@ -27,6 +27,5 @@ public interface ILiquidConsumer * @return Return the maximum amount of stored liquid this consumer can get. */ public int getLiquidCapacity(int type); - public int canConnectFromTypeAndSide(int type, byte side); } From 4e37d9bba4ff1afdba8d3d85e0abda7e02747e44 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 03:50:54 -0300 Subject: [PATCH 016/115] removed unneeded code. canProduceLiquid is use to control connections. No need to double up code --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java index 008cb43e..e715828d 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java @@ -18,6 +18,4 @@ public interface ILiquidProducer public int onProduceLiquid(int type, int maxVol, int side); public boolean canProduceLiquid(int type, byte side); - - public boolean canConnectFromTypeAndSide(int type, byte side); } \ No newline at end of file From 4efc55493485d1bb395e26f74ec82e2071c2ca39 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 02:53:37 -0400 Subject: [PATCH 017/115] Code upload no real changes --- .../src/eui/boiler/TileEntityBoiler.java | 7 ++----- .../net/minecraft/src/eui/pipes/ItemPipe.java | 12 ++++++------ .../net/minecraft/src/eui/pipes/RenderPipe.java | 10 +++++----- .../minecraft/src/eui/pipes/TileEntityPipe.java | 2 +- minecraft/net/minecraft/src/mod_BasicPipes.java | 17 +++++++++-------- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java index 310bf120..7b85c57c 100644 --- a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -553,7 +553,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I public int onReceiveLiquid(int type, int vol, byte side) { if(type == 1) { - int rejectedElectricity = Math.max((this.waterStored + vol) - 14, 0); + int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); this.waterStored += vol - rejectedElectricity; return rejectedElectricity; } @@ -591,9 +591,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I return 0; } @Override - public int onProduceLiquid(int type, int maxVol, int side) { - if(count == 10 || count == 20) - { + public int onProduceLiquid(int type, int maxVol, int side) { if(type == 0) { if(steamStored > maxVol) @@ -602,7 +600,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I return maxVol; } } - } return 0; } diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java index a2ff3dda..87a1cbbc 100644 --- a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java @@ -110,14 +110,14 @@ public class ItemPipe extends Item implements ITextureProvider int var3 = par1ItemStack.getItemDamage(); switch(var3) { - case 1: return "waterPipe"; case 0: return "steamPipe"; - case 2: return "22"; - case 3: return "22"; - case 4: return "22"; - case 5: return "22"; + case 1: return "waterPipe"; + case 2: return "lavaPipe"; + case 3: return "oilPipe"; + case 4: return "fuelPipe"; + case 5: return "airPipe"; + default: return "Pipe"; } - return this.getItemName(); } @Override public String getTextureFile() { diff --git a/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java b/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java index 4799438f..f918bb9a 100644 --- a/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java @@ -22,11 +22,11 @@ public class RenderPipe extends TileEntitySpecialRenderer { case 0: bindTextureByName("/eui/SteamPipe.png");break; case 1: bindTextureByName("/eui/WaterPipe.png");break; - case 2: bindTextureByName("/eui/lavaPipe.png");break; - case 3: bindTextureByName("/eui/oilPipe.png");break; - case 4: bindTextureByName("/eui/fuelPipe.png");break; - case 5: bindTextureByName("/eui/airPipe.png");break; - default: break; + //case 2: bindTextureByName("/eui/lavaPipe.png");break; + //case 3: bindTextureByName("/eui/oilPipe.png");break; + //case 4: bindTextureByName("/eui/fuelPipe.png");break; + //case 5: bindTextureByName("/eui/airPipe.png");break; + default:bindTextureByName("/eui/DefaultPipe.png"); break; } GL11.glPushMatrix(); diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 26c25361..b0af97d2 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -113,7 +113,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } } - averageElectricity = averageElectricity/connectedConductors; + averageElectricity = Math.max(averageElectricity/connectedConductors,0); if(connectedUnits > 0) { for(byte i = 0; i < 6; i++) diff --git a/minecraft/net/minecraft/src/mod_BasicPipes.java b/minecraft/net/minecraft/src/mod_BasicPipes.java index 101e90d4..d21f830f 100644 --- a/minecraft/net/minecraft/src/mod_BasicPipes.java +++ b/minecraft/net/minecraft/src/mod_BasicPipes.java @@ -16,6 +16,7 @@ public class mod_BasicPipes extends NetworkMod { public static Block pipe = new net.minecraft.src.eui.pipes.BlockPipe(pipeID).setBlockName("pipe"); public static Item parts = new net.minecraft.src.eui.pipes.ItemParts(partID); public static Item itemPipes = new net.minecraft.src.eui.pipes.ItemPipe(ppipeID); + public static Item gauge = new net.minecraft.src.eui.pipes.ItemGuage(ppipeID+1); @Override public String getVersion() { // TODO change version on each update ;/ @@ -38,15 +39,15 @@ public class mod_BasicPipes extends NetworkMod { ModLoader.registerBlock(pipe); ModLoader.registerTileEntity(net.minecraft.src.eui.pipes.TileEntityPipe.class, "pipe", new RenderPipe()); //Names - - ModLoader.addName((new ItemStack(itemPipes, 1, 0)), "Steam"); - ModLoader.addName((new ItemStack(itemPipes, 1, 1)), "Water"); - ModLoader.addName((new ItemStack(itemPipes, 1, 2)), "Lava"); - ModLoader.addName((new ItemStack(itemPipes, 1, 3)), "Oil"); - ModLoader.addName((new ItemStack(itemPipes, 1, 4)), "Fuel"); - ModLoader.addName((new ItemStack(itemPipes, 1, 5)), "Air"); + ModLoader.addName((new ItemStack(gauge, 1, 0)), "guage"); + ModLoader.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); + ModLoader.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); + ModLoader.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); + ModLoader.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); + ModLoader.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); + ModLoader.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); ModLoader.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - ModLoader.addName((new ItemStack(parts, 1, 1)), "ObbyTube"); + ModLoader.addName((new ItemStack(parts, 1, 1)), "IronTube"); ModLoader.addName((new ItemStack(parts, 1, 2)), "LeatherSeal"); ModLoader.addName((new ItemStack(parts, 1, 3)), "ObsidianTube"); ModLoader.addName((new ItemStack(parts, 1, 4)), "SlimeSeal"); From 646befeaa2d9a5fc5acc82970a7c53ce8c9bf63e Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 03:09:37 -0400 Subject: [PATCH 018/115] Added Test Item Use this too get volume in pipes --- .../minecraft/src/eui/pipes/ItemGuage.java | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemGuage.java diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java b/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java new file mode 100644 index 00000000..591ae134 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java @@ -0,0 +1,85 @@ +package net.minecraft.src.eui.pipes; + +import java.util.ArrayList; + +import net.minecraft.src.forge.*; +import net.minecraft.src.*; + +public class ItemGuage extends Item implements ITextureProvider +{ + private int spawnID; + + public ItemGuage(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("guage"); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 11; + } + return this.iconIndex; + } + @Override + public String getItemName() + { + return "guage"; + } + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + { + + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int steam = pipeEntity.getStoredLiquid(0); + int type = pipeEntity.getType(); + String typeName = getType(type); + par2EntityPlayer.addChatMessage(typeName +" " + steam); + return true; + } + + + + + return false; + } + public String getType(int type) + { + switch(type) + { + case 0: return "Steam"; + case 1: return "Water"; + case 2: return "Lava"; + case 3: return "Oil"; + case 4: return "Fuel"; + case 5: return "Air"; + default: return "unknow"; + } + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "PipeGuage"; + } + return this.getItemName(); + } + @Override + public String getTextureFile() { + return "/eui/Items.png"; + } + @Override + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); +} + +} From 6624b8455d3d1130c1748ec0cfa1c55e7dbbc27d Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 03:09:55 -0400 Subject: [PATCH 019/115] Version Change --- minecraft/net/minecraft/src/mod_EUIndustry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index 0532f2fd..a0a78ae1 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -26,7 +26,7 @@ public class mod_EUIndustry extends NetworkMod { @Override public String getVersion() { // TODO change version on each update ;/ - return "0.0.5"; + return "0.0.6"; } public static int configurationProperties() { From d776f1842d6f4e08fcdb9d5ac1a66f41965e195a Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 03:11:12 -0400 Subject: [PATCH 020/115] Corrected and cleanup code Changed names from electric/watt to Volume/vol. Also cleaned up some code and remove un needed code that made its..... --- .../src/eui/pipes/TileEntityPipe.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index b0af97d2..2d34e14f 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -47,12 +47,9 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } else { - if(tileEntity instanceof ILiquidProducer) + if(tileEntity instanceof ILiquidConsumer || tileEntity instanceof ILiquidProducer) { - if(((ILiquidProducer) tileEntity).canConnectFromTypeAndSide(this.getType(), side)) this.connectedBlocks[side] = tileEntity; - }else if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer) tileEntity).canConnectFromTypeAndSide(this.getType(), side)) this.connectedBlocks[side] = tileEntity; + this.connectedBlocks[side] = tileEntity; } else { @@ -65,20 +62,20 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer /** * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param watts - The amount of watt this block recieved + * @param vols - The amount of vol this block recieved * @param side - The side of the block in which the electricity came from - * @return watt - The amount of rejected power to be sent back into the conductor + * @return vol - The amount of rejected power to be sent back into the conductor */ @Override - public int onReceiveLiquid(int type,int amt, byte side) + public int onReceiveLiquid(int type,int vol, byte side) { if(type == this.type) { - int rejectedLiquid = Math.max((this.getStoredLiquid(type) + amt) - this.capacity, 0); - this.liquidStored += watt - rejectedElectricity; - return rejectedLiquid; + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); + this.liquidStored = vol - rejectedVolume; + return rejectedVolume; } - return watt; + return vol; } @Override public void updateEntity() @@ -91,7 +88,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer //Spread the electricity to neighboring blocks byte connectedUnits = 0; byte connectedConductors = 1; - int averageElectricity = this.liquidStored; + int averageVolume = this.liquidStored; Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); @@ -105,7 +102,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer if(connectedBlocks[i] instanceof TileEntityPipe) { - averageElectricity += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; connectedConductors ++; } @@ -113,7 +110,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } } - averageElectricity = Math.max(averageElectricity/connectedConductors,0); + averageVolume = Math.max(averageVolume/connectedConductors,0); if(connectedUnits > 0) { for(byte i = 0; i < 6; i++) @@ -125,20 +122,20 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer { if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) { - int transferElectricityAmount = 0; + int transferVolumeAmount = 0; ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) { - transferElectricityAmount = Math.max(Math.min(averageElectricity - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); + transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); } else if(!(connectedConsumer instanceof TileEntityPipe)) { - transferElectricityAmount = this.liquidStored; + transferVolumeAmount = this.liquidStored; } - int rejectedElectricity = connectedConsumer.onReceiveLiquid(this.type,transferElectricityAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferElectricityAmount + rejectedElectricity, 5), 0); + int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); } } @@ -146,8 +143,8 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer { if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) { - int gainedElectricity = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.onReceiveLiquid(this.type, gainedElectricity, i); + int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); + this.onReceiveLiquid(this.type, gainedVolume, i); } } } @@ -157,7 +154,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } /** - * @return Return the stored liquid in this consumer. Called by conductors to spread electricity to this unit. + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. */ @Override public int getStoredLiquid(int type) From 0ffc8eab652654d929140337cbf0a854c5d1dc4b Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 03:13:50 -0400 Subject: [PATCH 021/115] upload textures This is the correct spot for the textures too work when compiled. For eclipse they go into eui/ in defualt package --- minecraft/net/minecraft/src/eui/BoilerGui.png | Bin 0 -> 1876 bytes minecraft/net/minecraft/src/eui/CopperWire.png | Bin 0 -> 3196 bytes minecraft/net/minecraft/src/eui/DefaultPipe.png | Bin 0 -> 770 bytes minecraft/net/minecraft/src/eui/GrinderGUI.png | Bin 0 -> 1284 bytes minecraft/net/minecraft/src/eui/Items.png | Bin 0 -> 31223 bytes minecraft/net/minecraft/src/eui/SteamGUI.png | Bin 0 -> 3762 bytes minecraft/net/minecraft/src/eui/SteamPipe.png | Bin 0 -> 3196 bytes minecraft/net/minecraft/src/eui/WaterPipe.png | Bin 0 -> 3192 bytes minecraft/net/minecraft/src/eui/blocks.png | Bin 0 -> 82859 bytes 9 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 minecraft/net/minecraft/src/eui/BoilerGui.png create mode 100644 minecraft/net/minecraft/src/eui/CopperWire.png create mode 100644 minecraft/net/minecraft/src/eui/DefaultPipe.png create mode 100644 minecraft/net/minecraft/src/eui/GrinderGUI.png create mode 100644 minecraft/net/minecraft/src/eui/Items.png create mode 100644 minecraft/net/minecraft/src/eui/SteamGUI.png create mode 100644 minecraft/net/minecraft/src/eui/SteamPipe.png create mode 100644 minecraft/net/minecraft/src/eui/WaterPipe.png create mode 100644 minecraft/net/minecraft/src/eui/blocks.png diff --git a/minecraft/net/minecraft/src/eui/BoilerGui.png b/minecraft/net/minecraft/src/eui/BoilerGui.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25 GIT binary patch literal 1876 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 literal 0 HcmV?d00001 diff --git a/minecraft/net/minecraft/src/eui/Items.png b/minecraft/net/minecraft/src/eui/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7d4205034a433d3625682579e96853f530dd78 GIT binary patch literal 31223 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

T~jzq3sNPr)UIh=mw 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 literal 0 HcmV?d00001 diff --git a/minecraft/net/minecraft/src/eui/SteamGUI.png b/minecraft/net/minecraft/src/eui/SteamGUI.png new file mode 100644 index 0000000000000000000000000000000000000000..ac81171315361eec20cf1f7eb53d5f6cdff48132 GIT binary patch literal 3762 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 WU59UubRrj*0?^SgRIgOC4f_YtG&Dv4 literal 0 HcmV?d00001 diff --git a/minecraft/net/minecraft/src/eui/SteamPipe.png b/minecraft/net/minecraft/src/eui/SteamPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4bb528d01814f47003ede29cf06b68de001a59 GIT binary patch literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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

09s00C=(%Er;)Vuxf@_sHG90H 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 literal 0 HcmV?d00001 From 357ad64fd747c4959206256698d8c7424d6e341f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 10 Jul 2012 05:24:41 -0400 Subject: [PATCH 022/115] Corrected add connections with old code readded code from old steam pipes to pipe code too use a clean and better pipe connection code. A lot easier to read and should check if it can connect on weither or not that side does anything. --- .../src/eui/pipes/TileEntityPipe.java | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 2d34e14f..6e93003f 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -34,27 +34,20 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer */ public void addConnection(TileEntity tileEntity, byte side) { - if(tileEntity instanceof TileEntityPipe) + this.connectedBlocks[side] = null; + if(tileEntity instanceof ILiquidConsumer) { - if(((TileEntityPipe)tileEntity).getType() == this.getType()) + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) { this.connectedBlocks[side] = tileEntity; } - else + } + if(tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) { - this.connectedBlocks[side] = null; - } - } - else - { - if(tileEntity instanceof ILiquidConsumer || tileEntity instanceof ILiquidProducer) - { this.connectedBlocks[side] = tileEntity; - } - else - { - this.connectedBlocks[side] = null; - } + } } } From 78937cbf2932dada33c0a7b3530aa4a0bfa0aee4 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 06:33:44 -0300 Subject: [PATCH 023/115] Add some documentation to code --- .../src/eui/pipes/TileEntityPipe.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 6e93003f..5e878377 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -11,6 +11,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer { //The amount stored in the conductor protected int liquidStored = 0; + //the current set type of the pipe 0-5 protected int type = 0; //The maximum amount of electricity this conductor can take protected int capacity = 5; @@ -28,7 +29,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer /** - * This function adds a connection between this conductor and the UE unit + * This function adds a connection between this pipe and other blocks * @param tileEntity - Must be either a producer, consumer or a conductor * @param side - side in which the connection is coming from */ @@ -54,10 +55,10 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer /** - * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param vols - The amount of vol this block recieved - * @param side - The side of the block in which the electricity came from - * @return vol - The amount of rejected power to be sent back into the conductor + * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). + * @param vols - The amount of vol source is trying to give to this pipe + * @param side - The side of the block in which the liquid came from + * @return vol - The amount of rejected liquid that can't enter the pipe */ @Override public int onReceiveLiquid(int type,int vol, byte side) @@ -73,12 +74,13 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer @Override public void updateEntity() { + //cause the block to update itself every tick needs to be change to .5 seconds to reduce load ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - //Find the connected unit with the least amount of electricity and give more to them + if(!this.worldObj.isRemote) { - //Spread the electricity to neighboring blocks + byte connectedUnits = 0; byte connectedConductors = 1; int averageVolume = this.liquidStored; @@ -102,7 +104,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } } } - + //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty averageVolume = Math.max(averageVolume/connectedConductors,0); if(connectedUnits > 0) { @@ -110,12 +112,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer { if(connectedBlocks[i] != null) { - //Spread the electricity among the different blocks + //Spread the liquid among the different blocks if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) { if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) { - int transferVolumeAmount = 0; + int transferVolumeAmount = 0; //amount to be moved ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) @@ -147,7 +149,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + * @return Return the stored volume in this pipe. */ @Override public int getStoredLiquid(int type) @@ -181,7 +183,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer par1NBTTagCompound.setInteger("liquid", this.liquidStored); par1NBTTagCompound.setInteger("type", this.type); } - +//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe @Override public boolean canRecieveLiquid(int type, byte side) { if(type == this.type) @@ -190,11 +192,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer } return false; } + //returns liquid type public int getType() { return this.type; } - + //used by the item to set the liquid type on spawn public void setType(int rType) { this.type = rType; From 6a704fbc8b8e7c4497987b7e33a51a464f2436a4 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 06:36:49 -0300 Subject: [PATCH 024/115] Add docs to code --- minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java index 519c7d3e..0f74db8d 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java @@ -7,6 +7,7 @@ public interface ILiquidConsumer * onRecieveLiquid * @param vol - The amount this block received. * @param side - The side of the block in which the liquid came from. + * @parm type - The type of liquid being received * @return vol - The amount liquid that can't be recieved */ public int onReceiveLiquid(int type, int vol, byte side); @@ -14,6 +15,7 @@ public interface ILiquidConsumer /** * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics * @param side - The side in which the electricity is coming from. + * @parm type - The type of liquid * @return Returns true or false if this consumer can receive electricity at this given tick or moment. */ public boolean canRecieveLiquid(int type, byte side); From 8dffee1d42d3735f509e1f5215a636fd44754516 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 06:38:59 -0300 Subject: [PATCH 025/115] Added doc to code --- .../src/eui/pipes/api/ILiquidProducer.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java index e715828d..64873561 100644 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java +++ b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java @@ -10,12 +10,19 @@ public interface ILiquidProducer /** * onProduceLiquid * block. - * @param type - the type of liquid or gas - * @param maxvol - The maximum vol + * @param type - the type of liquid + * @param maxvol - The maximum vol or requested volume * @param side - The side - * @return vol - Return a vol of liquid type + * @return vol - Return a vol of liquid type that is produced */ public int onProduceLiquid(int type, int maxVol, int side); - + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ public boolean canProduceLiquid(int type, byte side); } \ No newline at end of file From 2213013cfa282fb9248dae5dd723edb763ab3655 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Tue, 10 Jul 2012 06:39:51 -0300 Subject: [PATCH 026/115] Update master --- minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 5e878377..342e835d 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -21,13 +21,6 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer //Checks if this is the first the tile entity updates protected boolean firstUpdate = true; - - /** - * The tile entity of the closest electric consumer. Null if none. Use this to detect if electricity - * should transfer - */ - - /** * This function adds a connection between this pipe and other blocks * @param tileEntity - Must be either a producer, consumer or a conductor From 030d0725b40fd73c5d1293771e7ba63c5418a82e Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Tue, 10 Jul 2012 10:10:07 -0500 Subject: [PATCH 027/115] Fix texture Indices --- minecraft/net/minecraft/src/eui/pipes/ItemPipe.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java index 87a1cbbc..303cb04d 100644 --- a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java @@ -24,10 +24,10 @@ public class ItemPipe extends Item implements ITextureProvider { case 0: return 11; case 1: return 10; - case 2: return 11; - case 3: return 10; - case 4: return 11; - case 5: return 10; + case 2: return 14; + case 3: return 12; + case 4: return 13; + case 5: return 15; } return this.iconIndex; } From 44604ee2d51b1d75288b544a6e60b31c94183765 Mon Sep 17 00:00:00 2001 From: atrain99 Date: Tue, 10 Jul 2012 10:11:11 -0500 Subject: [PATCH 028/115] Texture Fixes --- minecraft/net/minecraft/src/eui/Items.png | Bin 31223 -> 31087 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/Items.png b/minecraft/net/minecraft/src/eui/Items.png index 7a7d4205034a433d3625682579e96853f530dd78..f9e349f6a637ad2ebb2cde63a39851bb391f4e8c 100644 GIT binary patch literal 31087 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 literal 31223 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

T~jzq3sNPr)UIh=mw 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 From be1391391da0d4dc26915c1753df5a028d77b3ab Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Wed, 11 Jul 2012 05:39:55 -0300 Subject: [PATCH 029/115] forgot '+' --- minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java index 342e835d..a841cc42 100644 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java @@ -59,7 +59,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer if(type == this.type) { int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); - this.liquidStored = vol - rejectedVolume; + this.liquidStored += vol - rejectedVolume; return rejectedVolume; } return vol; From 07f231fb724c031514b7a17596443fd486101664 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 13 Jul 2012 17:36:01 -0400 Subject: [PATCH 030/115] removed some classes/updated some stuff --- .../net/minecraft/src/Utility/BlockTotum.java | 264 ------------------ .../minecraft/src/Utility/ContainerBoost.java | 40 --- .../src/Utility/ContainerHealer.java | 40 --- .../net/minecraft/src/Utility/GUIBoost.java | 54 ---- .../net/minecraft/src/Utility/GUIHealer.java | 54 ---- .../net/minecraft/src/Utility/ItemTotum.java | 47 ---- .../src/Utility/TileEntityBoost.java | 228 --------------- .../src/Utility/TileEntityHealer.java | 228 --------------- .../src/Utility/TileEntityTotum.java | 56 ---- .../net/minecraft/src/eui/BlockMachine.java | 22 +- .../src/eui/TileEntityCondenser.java | 43 +-- .../minecraft/src/eui/TileEntityMachine.java | 18 +- .../minecraft/src/eui/TileEntityNuller.java | 55 ++-- .../src/eui/boiler/TileEntityBoiler.java | 4 +- .../src/eui/grinder/TileEntityGrinder.java | 61 +--- .../minecraft/src/eui/robotics/BlockComp.java | 5 + .../minecraft/src/eui/robotics/BlockRail.java | 5 + .../src/eui/robotics/EntityDigger.java | 12 + .../src/eui/robotics/EntityRobot.java | 28 ++ .../src/eui/robotics/Entitycollector.java | 12 + .../src/eui/robotics/TileEntityComp.java | 5 + .../src/eui/turbine/GUIGenerator.java | 4 +- .../src/eui/turbine/TileEntityGenerator.java | 129 ++++----- .../net/minecraft/src/mod_BasicPipes.java | 83 ------ .../net/minecraft/src/mod_EUIndustry.java | 24 +- .../net/minecraft/src/mod_UtilityBlocks.java | 23 -- 26 files changed, 201 insertions(+), 1343 deletions(-) delete mode 100644 minecraft/net/minecraft/src/Utility/BlockTotum.java delete mode 100644 minecraft/net/minecraft/src/Utility/ContainerBoost.java delete mode 100644 minecraft/net/minecraft/src/Utility/ContainerHealer.java delete mode 100644 minecraft/net/minecraft/src/Utility/GUIBoost.java delete mode 100644 minecraft/net/minecraft/src/Utility/GUIHealer.java delete mode 100644 minecraft/net/minecraft/src/Utility/ItemTotum.java delete mode 100644 minecraft/net/minecraft/src/Utility/TileEntityBoost.java delete mode 100644 minecraft/net/minecraft/src/Utility/TileEntityHealer.java delete mode 100644 minecraft/net/minecraft/src/Utility/TileEntityTotum.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/BlockComp.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/BlockRail.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/EntityDigger.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/EntityRobot.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/Entitycollector.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java delete mode 100644 minecraft/net/minecraft/src/mod_BasicPipes.java delete mode 100644 minecraft/net/minecraft/src/mod_UtilityBlocks.java diff --git a/minecraft/net/minecraft/src/Utility/BlockTotum.java b/minecraft/net/minecraft/src/Utility/BlockTotum.java deleted file mode 100644 index 975b1768..00000000 --- a/minecraft/net/minecraft/src/Utility/BlockTotum.java +++ /dev/null @@ -1,264 +0,0 @@ -package net.minecraft.src.Utility; - -import java.util.ArrayList; -import java.util.Random; -import net.minecraft.client.Minecraft; -import net.minecraft.src.*; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.universalelectricity.components.UniversalComponents; - -public class BlockTotum extends UEBlockMachine implements ITextureProvider -{ - - private Random furnaceRand = new Random(); - private static boolean keepFurnaceInventory = true; - - public BlockTotum(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - } - @Override - protected int damageDropped(int metadata) - { - return metadata; - } - - - @Override - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); - int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - - //If it is the front side - if(side == ((TileEntityTotum)tileEntity).getDirection()) - { - switch(metadata) - { - - case 1: return 3; - case 3: return 3; - } - } - //If it is the back side - else if(side == UniversalElectricity.getOrientationFromSide(((TileEntityTotum)tileEntity).getDirection(), (byte)2)) - { - switch(metadata) - { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; - } - } - - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - return 0; - - - } - @Override - public int getBlockTextureFromSideAndMetadata(int side, int metadata) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - else - { - //If it is the front side - if(side == 3) - { - switch(metadata) - { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; - } - } - //If it is the back side - else if(side == 2) - { - switch(metadata) - { - case 0: return this.blockIndexInTexture + 2; - case 1: return this.blockIndexInTexture + 3; - case 2: return this.blockIndexInTexture + 2; - } - } - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - } - return 0; - } - public boolean blockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - int metadata = par1World.getBlockMetadata(par2, par3, par4); - - /** - * Check if the player is holding a wrench or an electric item. If so, do not open the GUI. - */ - if(par5EntityPlayer.inventory.getCurrentItem() != null) - { - if(par5EntityPlayer.inventory.getCurrentItem().itemID == UniversalComponents.ItemWrench.shiftedIndex) - { - if(onUseWrench(par1World, par2, par3, par4, par5EntityPlayer)) - { - par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID); - return true; - } - } - else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof UEElectricItem) - { - if(onUseElectricItem(par1World, par2, par3, par4, par5EntityPlayer)) - { - return true; - } - } - } - - return machineActivated(par1World, par2, par3, par4, par5EntityPlayer); - } - public boolean onUseElectricItem(World par1World, int par2, int par3, - int par4, EntityPlayer par5EntityPlayer) { - // TODO Auto-generated method stub - return false; - } - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityTotum tileEntity = (TileEntityTotum)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 2: tileEntity.setDirection((byte)5); break; - case 5: tileEntity.setDirection((byte)3); break; - case 3: tileEntity.setDirection((byte)4); break; - case 4: tileEntity.setDirection((byte)2); break; - } - - return true; - } - /** - * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the - * block. - */ - public boolean machineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - if(blockEntity instanceof TileEntityHealer) - { - TileEntity var6 = (TileEntityHealer)par1World.getBlockTileEntity(x, y, z); - ModLoader.openGUI(par5EntityPlayer, new GUIHealer(par5EntityPlayer.inventory, (TileEntityHealer) var6 )); ; - } - } - - return true; - } - } - @Override - public TileEntity getBlockEntity(int meta) - { - switch(meta) - { - case 0: return new TileEntityHealer(); - } - return null; - } - - /** - * Called when the block is placed in the world. - */ - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityTotum tileEntity = (TileEntityTotum)par1World.getBlockTileEntity(x, y, z); - - if(metadata == 0) - { - switch (angle) - { - case 0: tileEntity.setDirection((byte)5); break; - case 1: tileEntity.setDirection((byte)3); break; - case 2: tileEntity.setDirection((byte)4); break; - case 3: tileEntity.setDirection((byte)2); break; - } - } - else - { - switch (angle) - { - case 0: tileEntity.setDirection((byte)3); break; - case 1: tileEntity.setDirection((byte)4); break; - case 2: tileEntity.setDirection((byte)2); break; - case 3: tileEntity.setDirection((byte)5); break; - } - } - } - /** - * Called whenever the block is removed. - */ - - - @Override - public TileEntity getBlockEntity() { - // TODO Auto-generated method stub - return null; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - public int getRenderType() - { - return UniversalComponents.MachineRenderType; - } -} diff --git a/minecraft/net/minecraft/src/Utility/ContainerBoost.java b/minecraft/net/minecraft/src/Utility/ContainerBoost.java deleted file mode 100644 index e64c3e21..00000000 --- a/minecraft/net/minecraft/src/Utility/ContainerBoost.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.src.Utility; - -import net.minecraft.src.*; - -public class ContainerBoost extends Container -{ - private TileEntityBoost tileEntity; - - public ContainerBoost(InventoryPlayer par1InventoryPlayer, TileEntityBoost tileEntity2) - { - this.tileEntity = tileEntity2; - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/minecraft/net/minecraft/src/Utility/ContainerHealer.java b/minecraft/net/minecraft/src/Utility/ContainerHealer.java deleted file mode 100644 index 64983995..00000000 --- a/minecraft/net/minecraft/src/Utility/ContainerHealer.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.minecraft.src.Utility; - -import net.minecraft.src.*; - -public class ContainerHealer extends Container -{ - private TileEntityHealer tileEntity; - - public ContainerHealer(InventoryPlayer par1InventoryPlayer, TileEntityHealer tileEntity) - { - this.tileEntity = tileEntity; - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/minecraft/net/minecraft/src/Utility/GUIBoost.java b/minecraft/net/minecraft/src/Utility/GUIBoost.java deleted file mode 100644 index bf70bca2..00000000 --- a/minecraft/net/minecraft/src/Utility/GUIBoost.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.minecraft.src.Utility; - -import org.lwjgl.opengl.GL11; -import java.math.*; -import java.lang.Integer; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; -import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; - - public class GUIBoost extends GuiContainer - { - private TileEntityBoost tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIBoost(InventoryPlayer par1InventoryPlayer, TileEntityBoost tileEntity) - { - super(new ContainerBoost(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Doc-o-Matic", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - displayText2 = "Energy" + "-" + tileEntity.eStored; - displayText3 = "Effects" + "-" + tileEntity.hStored; - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } diff --git a/minecraft/net/minecraft/src/Utility/GUIHealer.java b/minecraft/net/minecraft/src/Utility/GUIHealer.java deleted file mode 100644 index 98a81f9c..00000000 --- a/minecraft/net/minecraft/src/Utility/GUIHealer.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.minecraft.src.Utility; - -import org.lwjgl.opengl.GL11; -import java.math.*; -import java.lang.Integer; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; -import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; - - public class GUIHealer extends GuiContainer - { - private TileEntityHealer tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIHealer(InventoryPlayer par1InventoryPlayer, TileEntityHealer tileEntity) - { - super(new ContainerHealer(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Doc-o-Matic", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - displayText2 = "Energy" + "-" + tileEntity.eStored; - displayText3 = "heals" + "-" + tileEntity.hStored; - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } diff --git a/minecraft/net/minecraft/src/Utility/ItemTotum.java b/minecraft/net/minecraft/src/Utility/ItemTotum.java deleted file mode 100644 index c01f00a4..00000000 --- a/minecraft/net/minecraft/src/Utility/ItemTotum.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.minecraft.src.Utility; -import java.util.ArrayList; - -import net.minecraft.src.*; - -public class ItemTotum extends ItemBlock { - - public ItemTotum(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - } - public int getMetadata(int metadata) - { - return metadata; - } - - public String getItemName() - { - return "Totum"; - } - - public int getPlacedBlockMetadata(int damage) { - return damage; - } - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "Healer"; - case 1: return "Booster"; - case 2: return ""; - case 3: return ""; - case 15: return ""; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - - } - -} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/Utility/TileEntityBoost.java b/minecraft/net/minecraft/src/Utility/TileEntityBoost.java deleted file mode 100644 index 81342275..00000000 --- a/minecraft/net/minecraft/src/Utility/TileEntityBoost.java +++ /dev/null @@ -1,228 +0,0 @@ -package net.minecraft.src.Utility; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.eui.api.*; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.forge.ISidedInventory; - -public class TileEntityBoost extends TileEntityTotum implements UEIConsumer, IInventory, ISidedInventory -{ - //Maximum possible generation rate of watts in SECONDS - public UETileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int itemCookTime = 0; - public int eStored = 0; - public int hStored = 0; - public int tCount = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void updateEntity() - { - if(eStored >= 1000 && hStored < 100) - { - eStored -= 1000; - hStored += 1; - } - if(hStored > 0 && tCount > 40) - { - if(this.containingItems[0] != null && this.containingItems[0].itemID == 373) - { - - EntityPlayer player = this.worldObj.getClosestPlayer(xCoord, yCoord, zCoord, 4.0F); - if(player != null){ - //player.addPotionEffect(par1PotionEffect); - hStored -= 1; - tCount = 0; - } - } - - - } - tCount++; - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.eStored = par1NBTTagCompound.getInteger("EU"); - this.hStored = par1NBTTagCompound.getInteger("HP"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("EU", (int)this.eStored); - par1NBTTagCompound.setInteger("HP", (int)this.hStored); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(int side) - { - if (side == 0) - { - return 1; - } - if (side == 1) - { - return 0; - } - return 2; - } - @Override - public int getSizeInventorySide(int side) { return getSizeInventory(); } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - - - - @Override - public int getVolts() { - // TODO Auto-generated method stub - return 12000; - } - @Override - public int onReceiveElectricity(int watts, int voltage, byte side) { - if(this.eStored < this.getElectricityCapacity()) - { - int rejectedElectricity = Math.max((this.eStored + watts) - this.getElectricityCapacity(), 0); - this.eStored += watts - rejectedElectricity; - return rejectedElectricity; - } - return watts; - } - @Override - public boolean canReceiveElectricity(byte side) { - if(side == 0) - { - return true; - } - return false; - } - @Override - public int getStoredElectricity() { - return eStored; - } - @Override - public int getElectricityCapacity() { - return 1000; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - -} diff --git a/minecraft/net/minecraft/src/Utility/TileEntityHealer.java b/minecraft/net/minecraft/src/Utility/TileEntityHealer.java deleted file mode 100644 index ad7549c5..00000000 --- a/minecraft/net/minecraft/src/Utility/TileEntityHealer.java +++ /dev/null @@ -1,228 +0,0 @@ -package net.minecraft.src.Utility; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.eui.api.*; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.forge.ISidedInventory; - -public class TileEntityHealer extends TileEntityTotum implements UEIConsumer, IInventory, ISidedInventory -{ - //Maximum possible generation rate of watts in SECONDS - public UETileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int itemCookTime = 0; - public int eStored = 0; - public int hStored = 0; - public int tCount = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void updateEntity() - { - if(eStored >= 1000 && hStored < 100) - { - eStored -= 1000; - hStored += 1; - } - if(hStored > 0 && tCount > 40) - { - EntityPlayer player = this.worldObj.getClosestPlayer(xCoord, yCoord, zCoord, 4.0F); - if(player != null){ - - if(player.getHealth() < player.heartsHalvesLife) - { - System.out.println("hearts"+ player.getHealth()); - System.out.println("heartsMax"+ player.heartsHalvesLife); - player.heal(1); - hStored -= 1; - tCount = 0; - } - } - - } - tCount++; - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.eStored = par1NBTTagCompound.getInteger("EU"); - this.hStored = par1NBTTagCompound.getInteger("HP"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("EU", (int)this.eStored); - par1NBTTagCompound.setInteger("HP", (int)this.hStored); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(int side) - { - if (side == 0) - { - return 1; - } - if (side == 1) - { - return 0; - } - return 2; - } - @Override - public int getSizeInventorySide(int side) { return getSizeInventory(); } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - - - - @Override - public int getVolts() { - // TODO Auto-generated method stub - return 12000; - } - @Override - public int onReceiveElectricity(int watts, int voltage, byte side) { - if(this.eStored < this.getElectricityCapacity()) - { - int rejectedElectricity = Math.max((this.eStored + watts) - this.getElectricityCapacity(), 0); - this.eStored += watts - rejectedElectricity; - return rejectedElectricity; - } - return watts; - } - @Override - public boolean canReceiveElectricity(byte side) { - if(side == 0) - { - return true; - } - return false; - } - @Override - public int getStoredElectricity() { - return eStored; - } - @Override - public int getElectricityCapacity() { - return 1000; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } -} diff --git a/minecraft/net/minecraft/src/Utility/TileEntityTotum.java b/minecraft/net/minecraft/src/Utility/TileEntityTotum.java deleted file mode 100644 index abb9dcce..00000000 --- a/minecraft/net/minecraft/src/Utility/TileEntityTotum.java +++ /dev/null @@ -1,56 +0,0 @@ -package net.minecraft.src.Utility; - -import net.minecraft.src.*; -import net.minecraft.src.forge.ITextureProvider; -import net.minecraft.src.universalelectricity.UEIRotatable; -import net.minecraft.src.universalelectricity.components.UniversalComponents; - -public class TileEntityTotum extends TileEntity implements ITextureProvider,UEIRotatable { - private int facing; - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", (int)this.facing); - - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.facing = par1NBTTagCompound.getInteger("facing"); - } - public TileEntity getSteamMachine(int i) - { - - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - switch(i){ - case 0: y = y - 1;break; - case 1: y = y + 1;break; - case 2: z = z + 1;break; - case 3: z = z - 1;break; - case 4: x = x + 1;break; - case 5: x = x - 1;break; - } - TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntityTotum) - { - return aEntity; - } - - return null; - } - public byte getDirection() { - // TODO Auto-generated method stub - return (byte) this.facing; - } - public void setDirection(byte facingDirection) { - this.facing = facingDirection; - } - @Override - public String getTextureFile() - { - return "/eui/blocks.png"; - } - -} diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/minecraft/net/minecraft/src/eui/BlockMachine.java index 1f5a6d1c..da85de81 100644 --- a/minecraft/net/minecraft/src/eui/BlockMachine.java +++ b/minecraft/net/minecraft/src/eui/BlockMachine.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.src.*; +import net.minecraft.src.basiccomponents.*; import net.minecraft.src.eui.boiler.*; import net.minecraft.src.eui.burner.GUIFireBox; import net.minecraft.src.eui.burner.TileEntityFireBox; @@ -11,14 +12,9 @@ import net.minecraft.src.eui.grinder.*; import net.minecraft.src.eui.turbine.GUIGenerator; import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.UEBlockMachine; -import net.minecraft.src.universalelectricity.UEElectricItem; -import net.minecraft.src.universalelectricity.UERenderBlocks; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; -import net.minecraft.src.universalelectricity.components.UniversalComponents; +import net.minecraft.src.universalelectricity.*; -public class BlockMachine extends UEBlockMachine implements ITextureProvider +public class BlockMachine extends net.minecraft.src.universalelectricity.extend.BlockMachine implements ITextureProvider { private Random furnaceRand = new Random(); @@ -178,7 +174,7 @@ public class BlockMachine extends UEBlockMachine implements ITextureProvider */ if(par5EntityPlayer.inventory.getCurrentItem() != null) { - if(par5EntityPlayer.inventory.getCurrentItem().itemID == UniversalComponents.ItemWrench.shiftedIndex) + if(par5EntityPlayer.inventory.getCurrentItem().itemID == BasicComponents.ItemWrench.shiftedIndex) { if(onUseWrench(par1World, par2, par3, par4, par5EntityPlayer)) { @@ -186,7 +182,7 @@ public class BlockMachine extends UEBlockMachine implements ITextureProvider return true; } } - else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof UEElectricItem) + else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof net.minecraft.src.universalelectricity.extend.ItemElectric) { if(onUseElectricItem(par1World, par2, par3, par4, par5EntityPlayer)) { @@ -370,10 +366,10 @@ public class BlockMachine extends UEBlockMachine implements ITextureProvider { return false; } - public int getRenderType() - { - return UniversalComponents.MachineRenderType; - } + public int getRenderType() + { + return 0; + } public void addCreativeItems(ArrayList itemList) { itemList.add(new ItemStack(this, 1,0)); diff --git a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java index 06ab54fe..5d837c08 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java +++ b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java @@ -1,10 +1,9 @@ package net.minecraft.src.eui; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.eui.pipes.api.ILiquidProducer; -import net.minecraft.src.universalelectricity.UEIConsumer; +import net.minecraft.src.pipes.api.ILiquidProducer; -public class TileEntityCondenser extends TileEntityMachine implements ILiquidProducer,UEIConsumer { +public class TileEntityCondenser extends TileEntityMachine implements ILiquidProducer { int tickCount = 0; int waterStored = 0; int energyStored = 0; @@ -16,7 +15,7 @@ public class TileEntityCondenser extends TileEntityMachine implements ILiquidPro waterStored -= tradeW; return tradeW; }**/ - return 5; + return 1; } public void writeToNBT(NBTTagCompound par1NBTTagCompound) { @@ -42,42 +41,6 @@ public class TileEntityCondenser extends TileEntityMachine implements ILiquidPro tickCount++; } @Override - public int onReceiveElectricity(int watts, int voltage, byte side) { - int rejectedElectricity = Math.max((this.waterStored + watts) - this.getElectricityCapacity(), 0); - this.energyStored += watts - rejectedElectricity; - return rejectedElectricity; - } - @Override - public boolean canReceiveElectricity(byte side) { - // TODO Auto-generated method stub - return true; - } - @Override - public int getStoredElectricity() { - // TODO Auto-generated method stub - return this.energyStored; - } - @Override - public int getElectricityCapacity() { - // TODO Auto-generated method stub - return 1000; - } - @Override - public int getVolts() { - // TODO Auto-generated method stub - return 240; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - @Override public boolean canProduceLiquid(int type, byte side) { if(type == 1) { diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/minecraft/net/minecraft/src/eui/TileEntityMachine.java index fcea8539..9531b4da 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityMachine.java +++ b/minecraft/net/minecraft/src/eui/TileEntityMachine.java @@ -2,10 +2,10 @@ package net.minecraft.src.eui; import net.minecraft.src.*; import net.minecraft.src.forge.ITextureProvider; -import net.minecraft.src.universalelectricity.UEIRotatable; -import net.minecraft.src.universalelectricity.components.UniversalComponents; +import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; +import net.minecraft.src.universalelectricity.extend.IRotatable; -public class TileEntityMachine extends TileEntity implements ITextureProvider, UEIRotatable +public class TileEntityMachine extends TileEntityElectricUnit implements ITextureProvider, IRotatable { private byte facing; @@ -62,4 +62,16 @@ public class TileEntityMachine extends TileEntity implements ITextureProvider, U super.readFromNBT(par1NBTTagCompound); this.facing = par1NBTTagCompound.getByte("facing"); } + + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canReceiveFromSide(byte side) { + // TODO Auto-generated method stub + return false; + } } \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/TileEntityNuller.java b/minecraft/net/minecraft/src/eui/TileEntityNuller.java index 048b1cc8..547dfc08 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityNuller.java +++ b/minecraft/net/minecraft/src/eui/TileEntityNuller.java @@ -1,49 +1,28 @@ package net.minecraft.src.eui; -import net.minecraft.src.universalelectricity.UEIConsumer; +import net.minecraft.src.universalelectricity.electricity.IElectricUnit; -public class TileEntityNuller extends TileEntityMachine implements UEIConsumer { - @Override - public int onReceiveElectricity(int watts, int voltage, byte side) { - // TODO Auto-generated method stub - return 0; +public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { + + public float electricityRequest() + { + return 100; } - - @Override - public boolean canReceiveElectricity(byte side) { - // TODO Auto-generated method stub + public boolean canReceiveFromSide(byte side) + { return true; } - - @Override - public int getStoredElectricity() { - // TODO Auto-generated method stub - return 0; + public float getVoltage() + { + return 1000; } - - @Override - public int getElectricityCapacity() { - // TODO Auto-generated method stub - return 100000; + public int getTickInterval() + { + return 1; } - - @Override - public int getVolts() { - // TODO Auto-generated method stub - return 100000000; + public boolean canConnect(byte side) + { + return true; } - - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - } diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java index 7b85c57c..8ca4e781 100644 --- a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -4,10 +4,10 @@ import net.minecraft.src.eui.BlockMachine; import net.minecraft.src.eui.TileEntityMachine; import net.minecraft.src.eui.api.*; import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.pipes.api.ILiquidConsumer; -import net.minecraft.src.eui.pipes.api.ILiquidProducer; import net.minecraft.src.forge.ForgeHooks; import net.minecraft.src.forge.ISidedInventory; +import net.minecraft.src.pipes.api.ILiquidConsumer; +import net.minecraft.src.pipes.api.ILiquidProducer; import net.minecraft.src.universalelectricity.UniversalElectricity; public class TileEntityBoiler extends TileEntityMachine implements IInventory, ISidedInventory,ILiquidProducer, ILiquidConsumer diff --git a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java index 72c0ee24..932f3173 100644 --- a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java +++ b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java @@ -1,11 +1,11 @@ package net.minecraft.src.eui.grinder; import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.UEIConsumer; +import net.minecraft.src.universalelectricity.electricity.IElectricUnit; import net.minecraft.src.eui.TileEntityMachine; import net.minecraft.src.forge.ForgeHooks; import net.minecraft.src.forge.ISidedInventory; -public class TileEntityGrinder extends TileEntityMachine implements IInventory, ISidedInventory, UEIConsumer +public class TileEntityGrinder extends TileEntityMachine implements IElectricUnit, IInventory { /** @@ -324,60 +324,14 @@ public class TileEntityGrinder extends TileEntityMachine implements IInventory, public void openChest() {} public void closeChest() {} - - @Override - public int getStartInventorySide(int side) - { - if (side == 0) return 1; - if (side == 1) return 0; - return 2; - } - - @Override - public int getSizeInventorySide(int side) - { - return 1; - } - + @Override - public int onReceiveElectricity(int watts, int voltage, byte side) { - //can store 1 min of energy too do work - if(this.energyStore <= 1000) - { - if(!(this.energyStore + watts > 1000)) - { - this.energyStore = this.energyStore + watts; - return 0; - } - else - { - int varB = watts - this.energyStore; - int eGain = (varB * varB) / 2; - this.energyStore = this.energyStore + eGain; - return (watts - eGain); - } - } - return watts; - } - - @Override - public int getStoredElectricity() { - // TODO what is acutal returned - return this.energyStore; - } - @Override - public int getElectricityCapacity() { - // TODO Auto-generated method stub - return 1000; - } - - @Override - public boolean canReceiveElectricity(byte side) { + public boolean canReceiveFromSide(byte side) { // TODO Auto-generated method stub return true; } @Override - public int getVolts() { + public float getVoltage() { // TODO Auto-generated method stub return 120; } @@ -393,6 +347,11 @@ public class TileEntityGrinder extends TileEntityMachine implements IInventory, // TODO Auto-generated method stub return false; } + public float electricityRequest() + { + return Math.max(this.energyStore - 100,0); + + } } diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java new file mode 100644 index 00000000..13420eae --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java @@ -0,0 +1,5 @@ +package net.minecraft.src.eui.robotics; + +public class BlockComp { + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockRail.java b/minecraft/net/minecraft/src/eui/robotics/BlockRail.java new file mode 100644 index 00000000..9795e877 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/BlockRail.java @@ -0,0 +1,5 @@ +package net.minecraft.src.eui.robotics; + +public class BlockRail { + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityDigger.java b/minecraft/net/minecraft/src/eui/robotics/EntityDigger.java new file mode 100644 index 00000000..3065597a --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/EntityDigger.java @@ -0,0 +1,12 @@ +package net.minecraft.src.eui.robotics; + +import net.minecraft.src.World; + +public class EntityDigger extends EntityRobot { + + public EntityDigger(World par1World) { + super(par1World); + // TODO Auto-generated constructor stub + } + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java new file mode 100644 index 00000000..85501ad3 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java @@ -0,0 +1,28 @@ +package net.minecraft.src.eui.robotics; +import net.minecraft.src.*; + +public class EntityRobot extends Entity { + + public EntityRobot(World par1World) { + super(par1World); + } + public boolean isActive() + { + return false; + } + @Override + protected void entityInit() { + // TODO Auto-generated method stub + + } + @Override + protected void readEntityFromNBT(NBTTagCompound var1) { + // TODO Auto-generated method stub + + } + @Override + protected void writeEntityToNBT(NBTTagCompound var1) { + // TODO Auto-generated method stub + + } +} diff --git a/minecraft/net/minecraft/src/eui/robotics/Entitycollector.java b/minecraft/net/minecraft/src/eui/robotics/Entitycollector.java new file mode 100644 index 00000000..9c494260 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/Entitycollector.java @@ -0,0 +1,12 @@ +package net.minecraft.src.eui.robotics; + +import net.minecraft.src.World; + +public class Entitycollector extends EntityRobot { + + public Entitycollector(World par1World) { + super(par1World); + // TODO Auto-generated constructor stub + } + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java new file mode 100644 index 00000000..c933ba06 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java @@ -0,0 +1,5 @@ +package net.minecraft.src.eui.robotics; + +public class TileEntityComp { + +} diff --git a/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java b/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java index e8954ca3..c5bbdc67 100644 --- a/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java +++ b/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java @@ -5,8 +5,6 @@ import java.math.*; import java.lang.Integer; import net.minecraft.src.*; import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.components.ContainerCoalGenerator; -import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator; public class GUIGenerator extends GuiContainer { @@ -31,7 +29,7 @@ import net.minecraft.src.universalelectricity.components.TileEntityCoalGenerator String displayText = ""; String displayText2 = ""; String displayText3 = ""; - if(tileEntity.connectedWire == null) + if(tileEntity.connectedElectricUnit == null) { displayText = "Not Connected"; } diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java index 2784f86b..942f08d7 100644 --- a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java +++ b/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java @@ -1,14 +1,18 @@ package net.minecraft.src.eui.turbine; import net.minecraft.src.eui.TileEntityMachine; import net.minecraft.src.eui.api.*; -import net.minecraft.src.eui.pipes.api.ILiquidConsumer; -import net.minecraft.src.eui.pipes.api.ILiquidProducer; import net.minecraft.src.forge.ForgeHooks; import net.minecraft.src.*; +import net.minecraft.src.pipes.api.ILiquidConsumer; +import net.minecraft.src.pipes.api.ILiquidProducer; import net.minecraft.src.universalelectricity.*; +import net.minecraft.src.universalelectricity.electricity.ElectricityManager; +import net.minecraft.src.universalelectricity.electricity.IElectricUnit; +import net.minecraft.src.universalelectricity.extend.BlockConductor; +import net.minecraft.src.universalelectricity.extend.TileEntityConductor; import net.minecraft.src.forge.ISidedInventory; -public class TileEntityGenerator extends TileEntityMachine implements UEIProducer,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +public class TileEntityGenerator extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory { //Maximum possible generation rate of watts in SECONDS public int maxGenerateRate = 1000; @@ -17,7 +21,7 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce public int steamConsumed = 0; //Current generation rate based on hull heat. In TICKS. public float generateRate = 0; - public UETileEntityConductor connectedWire = null; + //public TileEntityConductor connectedWire = null; /** * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for */ @@ -26,20 +30,9 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce * The ItemStacks that hold the items currently being used in the battery box */ private ItemStack[] containingItems = new ItemStack[1]; - + public TileEntityConductor connectedElectricUnit = null; @Override - public int onProduceElectricity(int maxWatts, int voltage, byte side) - { - //Only produce electricity on the back side. - if(canProduceElectricity(side) && maxWatts > 0) - { - return Math.min(maxWatts, (int)generateRate); - } - return 0; - } - - @Override - public boolean canProduceElectricity(byte side) + public boolean canConnect(byte side) { return true; } @@ -48,30 +41,50 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. */ - public void updateEntity() + public void onUpdate(float watts, float voltage, byte side) + { if(!this.worldObj.isRemote) { - //Check nearby blocks and see if the conductor is full. If so, then it is connected - TileEntity tileEntity = UEBlockConductor.getUEUnit(this.worldObj, this.xCoord, this.yCoord, this.zCoord, UniversalElectricity.getOrientationFromSide(this.getDirection(), (byte)2)); + super.onUpdate(watts, voltage, side); - if(tileEntity instanceof UETileEntityConductor) + //Check nearby blocks and see if the conductor is full. If so, then it is connected + TileEntity tileEntity = UniversalElectricity.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), UniversalElectricity.getOrientationFromSide((byte)this.getBlockMetadata(), (byte)3)); + + if(tileEntity instanceof TileEntityConductor) { - if(((UETileEntityConductor)tileEntity).closestConsumer != null) + if(ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) { - this.connectedWire = (UETileEntityConductor)tileEntity; + this.connectedElectricUnit = (TileEntityConductor)tileEntity; } else - { - this.connectedWire = null; - } + { + this.connectedElectricUnit = null; + } } else { - this.connectedWire = null; + this.connectedElectricUnit = null; } - if (!this.worldObj.isRemote) - { - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + + if(!this.isDisabled()) + { + //Adds time to runTime by consuming steam + if(this.itemCookTime <= 0) + { + if(steamStored > 0) + { + --steamStored; + ++steamConsumed; + if(steamConsumed == mod_EUIndustry.steamOutBoiler) + { + ++waterStored; + steamConsumed = 0; + } + itemCookTime += 65; + } + } + + //Empties water from tank to buckets if (this.containingItems[0] != null) { if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) @@ -83,36 +96,29 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce } } } - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - - if(this.connectedWire != null && this.connectedWire.getStoredElectricity() < this.connectedWire.getElectricityCapacity()) - { - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); - } - } - else - { - if(steamStored > 0) - { - --steamStored; - ++steamConsumed; - if(steamConsumed == mod_EUIndustry.steamOutBoiler) - { - ++waterStored; - steamConsumed = 0; - } - itemCookTime = itemCookTime + 65; - } + + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + + if(this.connectedElectricUnit != null) + { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.001+0.0015, 0.05F), this.maxGenerateRate/20); + } + } + + if(this.connectedElectricUnit == null || this.itemCookTime <= 0) + { + this.generateRate = (float)Math.max(this.generateRate-0.05, 0); + } + + if(this.generateRate > 1) + { + ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + } } - - if(this.connectedWire == null || this.itemCookTime <= 0) - { - this.generateRate = (float)Math.max(this.generateRate-0.05, 0); - } + } } /** * Reads a tile entity from NBT. @@ -248,11 +254,6 @@ public class TileEntityGenerator extends TileEntityMachine implements UEIProduce public void openChest() { } @Override public void closeChest() { } - @Override - public int getVolts() { - // TODO Auto-generated method stub - return 120; - } @Override public void onDisable(int duration) { diff --git a/minecraft/net/minecraft/src/mod_BasicPipes.java b/minecraft/net/minecraft/src/mod_BasicPipes.java deleted file mode 100644 index d21f830f..00000000 --- a/minecraft/net/minecraft/src/mod_BasicPipes.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.minecraft.src; -import net.minecraft.client.Minecraft; -import net.minecraft.src.eui.pipes.RenderPipe; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.universalelectricity.components.UniversalComponents; - -import java.util.ArrayList; -import java.util.Map; -import java.io.*; -public class mod_BasicPipes extends NetworkMod { - static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/BasicPipes.cfg"))); - public static int pipeID = configurationProperties(); - private static int partID; - private static int ppipeID; - public static Block pipe = new net.minecraft.src.eui.pipes.BlockPipe(pipeID).setBlockName("pipe"); - public static Item parts = new net.minecraft.src.eui.pipes.ItemParts(partID); - public static Item itemPipes = new net.minecraft.src.eui.pipes.ItemPipe(ppipeID); - public static Item gauge = new net.minecraft.src.eui.pipes.ItemGuage(ppipeID+1); - @Override - public String getVersion() { - // TODO change version on each update ;/ - return "0.0.1"; - } - public static int configurationProperties() - { - config.load(); - pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); - partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); - ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); - config.save(); - return pipeID; - } - @Override - public void load() { - //register - UniversalElectricity.registerAddon(this, "0.3.1"); - MinecraftForgeClient.preloadTexture("/eui/Items.png"); - ModLoader.registerBlock(pipe); - ModLoader.registerTileEntity(net.minecraft.src.eui.pipes.TileEntityPipe.class, "pipe", new RenderPipe()); - //Names - ModLoader.addName((new ItemStack(gauge, 1, 0)), "guage"); - ModLoader.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); - ModLoader.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); - ModLoader.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); - ModLoader.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); - ModLoader.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); - ModLoader.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); - ModLoader.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - ModLoader.addName((new ItemStack(parts, 1, 1)), "IronTube"); - ModLoader.addName((new ItemStack(parts, 1, 2)), "LeatherSeal"); - ModLoader.addName((new ItemStack(parts, 1, 3)), "ObsidianTube"); - ModLoader.addName((new ItemStack(parts, 1, 4)), "SlimeSeal"); - //Blocks - - ModLoader.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@', - UniversalComponents.ItemBronzeIngot}); - ModLoader.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@', - Block.obsidian}); - ModLoader.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@","@@", '@', - Item.leather}); - ModLoader.addRecipe(new ItemStack(parts, 2,3), new Object[] { "@@@", '@', - Item.ingotIron}); - ModLoader.addShapelessRecipe(new ItemStack(parts, 1,4), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.slimeBall, 1)}); - //crafting parts - /** - * case 0: return "steam"; - case 1: return "water"; - case 2: return "lava"; - case 3: return "oil"; - case 4: return "fuel"; - case 5: return "air"; - */ - ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,2)}); - ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,4)}); - ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,1)}); - ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,3),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); - ModLoader.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,3),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - - } - - -} diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index a0a78ae1..ecb20589 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -1,9 +1,9 @@ package net.minecraft.src; import net.minecraft.client.Minecraft; +import net.minecraft.src.basiccomponents.BasicComponents; import net.minecraft.src.eui.*; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.universalelectricity.components.UniversalComponents; import java.util.ArrayList; import java.util.Map; @@ -47,7 +47,7 @@ public class mod_EUIndustry extends NetworkMod { @Override public void load() { //register - UniversalElectricity.registerAddon(this, "0.3.1"); + UniversalElectricity.registerAddon(this, "0.4.3"); MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); MinecraftForgeClient.preloadTexture("/eui/Items.png"); //Blocks @@ -60,12 +60,12 @@ public class mod_EUIndustry extends NetworkMod { ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); ModLoader.addName((new ItemStack(machine, 1, 14)), "WaterCondenser"); ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); - ModLoader.registerTileEntity(net.minecraft.src.eui.grinder.TileEntityGrinder.class, "grinder",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityCondenser.class, "waterPump",new UEBlockRenderer()); - ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller",new UEBlockRenderer()); + ModLoader.registerTileEntity(net.minecraft.src.eui.grinder.TileEntityGrinder.class, "grinder"); + ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler"); + ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox"); + ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator"); + ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityCondenser.class, "waterPump"); + ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller"); //Items ModLoader.addName((new ItemStack(coalNugget, 1, 0)), "CoalNuggets"); ModLoader.addName((new ItemStack(coalNugget, 1, 1)), "CoalPellets"); @@ -74,10 +74,10 @@ public class mod_EUIndustry extends NetworkMod { //Crafting ModLoader.addRecipe(new ItemStack(machine, 1, 0), new Object [] {"@S@", "SCW", "@S@", - 'S',UniversalComponents.ItemSteelIngot, - '@',new ItemStack(UniversalComponents.ItemSteelPlate), - 'C',new ItemStack(UniversalComponents.ItemCircuit,1,1), - 'W',UniversalComponents.ItemCopperWire}); + 'S',BasicComponents.ItemSteelIngot, + '@',new ItemStack(BasicComponents.ItemSteelPlate), + 'C',new ItemStack(BasicComponents.ItemCircuit,1,1), + 'W',BasicComponents.ItemCopperWire}); /**ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", 'T',new ItemStack(parts, 1,1), '@',new ItemStack(UniversalComponents.ItemSteelPlate), diff --git a/minecraft/net/minecraft/src/mod_UtilityBlocks.java b/minecraft/net/minecraft/src/mod_UtilityBlocks.java deleted file mode 100644 index de813a03..00000000 --- a/minecraft/net/minecraft/src/mod_UtilityBlocks.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.minecraft.src; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.UEBlockRenderer; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.components.UniversalComponents; -public class mod_UtilityBlocks extends NetworkMod { - - public static Block totum = new net.minecraft.src.Utility.BlockTotum(210).setBlockName("totum"); - @Override - public String getVersion() { - // TODO change each update - return "V0.0.1"; - } - - @Override - public void load() { - UniversalElectricity.registerAddon(this, "0.3.1"); - ModLoader.registerBlock(totum,net.minecraft.src.eui.ItemMachine.class); - ModLoader.registerTileEntity(net.minecraft.src.Utility.TileEntityHealer.class, "healer", new UEBlockRenderer()); - ModLoader.addShapelessRecipe(new ItemStack(totum, 1,0), new Object[] { new ItemStack(Block.dirt,1)}); - } - -} From 2043d4b09eabfc6f6858f9a57afc80b3ae9f8a0b Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 13 Jul 2012 18:34:40 -0400 Subject: [PATCH 031/115] seperated pipes to another repo cleaning up how i do stuff and moved pipes to its own repo --- .../minecraft/src/eui/pipes/BlockPipe.java | 136 ------------ .../minecraft/src/eui/pipes/ItemGuage.java | 85 -------- .../minecraft/src/eui/pipes/ItemParts.java | 68 ------ .../net/minecraft/src/eui/pipes/ItemPipe.java | 137 ------------ .../minecraft/src/eui/pipes/ModelPipe.java | 98 --------- .../minecraft/src/eui/pipes/RenderPipe.java | 53 ----- .../src/eui/pipes/TileEntityPipe.java | 200 ------------------ .../src/eui/pipes/api/ILiquidConsumer.java | 33 --- .../src/eui/pipes/api/ILiquidProducer.java | 28 --- 9 files changed, 838 deletions(-) delete mode 100644 minecraft/net/minecraft/src/eui/pipes/BlockPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemGuage.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemParts.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/ItemPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/ModelPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/RenderPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java delete mode 100644 minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java diff --git a/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java b/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java deleted file mode 100644 index 85cc7d41..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/BlockPipe.java +++ /dev/null @@ -1,136 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import java.util.ArrayList; - -import net.minecraft.src.eui.api.*; -import net.minecraft.src.eui.pipes.api.ILiquidConsumer; -import net.minecraft.src.eui.pipes.api.ILiquidProducer; -import net.minecraft.src.eui.*; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.*; - -import java.util.Random; - -public class BlockPipe extends BlockContainer -{ - - public BlockPipe(int id) - { - super(id, Material.iron); - this.setBlockName("Pipe"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return 0; - } - - public TileEntity getBlockEntity() - { - return new TileEntityPipe(); - } - - //Per tick - public int conductorCapacity() - { - return 5; - } - - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - - this.updateConductorTileEntity(world, x, y, z); - } - public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) - { - switch(side) - { - case 0: y -= 1; break; - case 1: y += 1; break; - case 2: z += 1; break; - case 3: z -= 1; break; - case 4: x += 1; break; - case 5: x -= 1; break; - } - - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - TileEntity returnValue = null; - - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - if (tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(type,UniversalElectricity.getOrientationFromSide(side, (byte)2))) - { - returnValue = tileEntity; - } - } - - return returnValue; - } - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - this.updateConductorTileEntity(world, x, y, z); - } - - public static void updateConductorTileEntity(World world, int x, int y, int z) - { - for(byte i = 0; i < 6; i++) - { - //Update the tile entity on neighboring blocks - TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); - int type = conductorTileEntity.getType(); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), i);; - } - } - } - - diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java b/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java deleted file mode 100644 index 591ae134..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/ItemGuage.java +++ /dev/null @@ -1,85 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import java.util.ArrayList; - -import net.minecraft.src.forge.*; -import net.minecraft.src.*; - -public class ItemGuage extends Item implements ITextureProvider -{ - private int spawnID; - - public ItemGuage(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("guage"); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 11; - } - return this.iconIndex; - } - @Override - public String getItemName() - { - return "guage"; - } - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) - { - - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int steam = pipeEntity.getStoredLiquid(0); - int type = pipeEntity.getType(); - String typeName = getType(type); - par2EntityPlayer.addChatMessage(typeName +" " + steam); - return true; - } - - - - - return false; - } - public String getType(int type) - { - switch(type) - { - case 0: return "Steam"; - case 1: return "Water"; - case 2: return "Lava"; - case 3: return "Oil"; - case 4: return "Fuel"; - case 5: return "Air"; - default: return "unknow"; - } - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "PipeGuage"; - } - return this.getItemName(); - } - @Override - public String getTextureFile() { - return "/eui/Items.png"; - } - @Override - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); -} - -} diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemParts.java b/minecraft/net/minecraft/src/eui/pipes/ItemParts.java deleted file mode 100644 index 5366f4ac..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/ItemParts.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import java.util.ArrayList; - -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.forge.ITextureProvider; - -public class ItemParts extends Item implements ITextureProvider{ - - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 7; - case 1: return 7; - case 2: return 8; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/Items.png"; - } - @Override - public String getItemName() - { - return "parts"; - } - - -@Override - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "BronzeTube"; - case 1: return "ObbyTube"; - case 2: return "Seal"; - case 3: return "IronTube"; - case 4: return "StickSeal"; - } - return this.getItemName(); - } -@Override - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,4)); - } -} - - - diff --git a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java b/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java deleted file mode 100644 index 303cb04d..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/ItemPipe.java +++ /dev/null @@ -1,137 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import java.util.ArrayList; - -import net.minecraft.src.forge.*; -import net.minecraft.src.*; - -public class ItemPipe extends Item implements ITextureProvider -{ - private int spawnID; - - public ItemPipe(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("pipe"); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 11; - case 1: return 10; - case 2: return 14; - case 3: return 12; - case 4: return 13; - case 5: return 15; - } - return this.iconIndex; - } - @Override - public String getItemName() - { - return "Pipes"; - } - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = mod_BasicPipes.pipeID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (par3World.canBlockBePlacedAt(this.spawnID, par4, par5, par6, false, par7)) - { - Block var9 = Block.blocksList[this.spawnID]; - - if (par3World.setBlockWithNotify(par4, par5, par6, this.spawnID)) - { - if (par3World.getBlockId(par4, par5, par6) == this.spawnID) - { - Block.blocksList[this.spawnID].onBlockPlaced(par3World, par4, par5, par6, par7); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int dm = par1ItemStack.getItemDamage(); - String rType = "air"; - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - - return true; - } - } - - return false; - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "steamPipe"; - case 1: return "waterPipe"; - case 2: return "lavaPipe"; - case 3: return "oilPipe"; - case 4: return "fuelPipe"; - case 5: return "airPipe"; - default: return "Pipe"; - } - } - @Override - public String getTextureFile() { - return "/eui/Items.png"; - } - @Override - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,4)); - itemList.add(new ItemStack(this, 1,5)); -} - -} diff --git a/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java b/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java deleted file mode 100644 index 1d960c51..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/ModelPipe.java +++ /dev/null @@ -1,98 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import net.minecraft.src.*; - -public class ModelPipe extends ModelBase -{ - //fields - ModelRenderer Middle; - ModelRenderer Right; - ModelRenderer Left; - ModelRenderer Back; - ModelRenderer Front; - ModelRenderer Top; - ModelRenderer Bottom; - - public ModelPipe() - { - textureWidth = 64; - textureHeight = 32; - - Middle = new ModelRenderer(this, 0, 0); - Middle.addBox(-1F, -1F, -1F, 4, 4, 4); - Middle.setRotationPoint(-1F, 15F, -1F); - Middle.setTextureSize(64, 32); - Middle.mirror = true; - setRotation(Middle, 0F, 0F, 0F); - Right = new ModelRenderer(this, 21, 0); - Right.addBox(0F, 0F, 0F, 6, 4, 4); - Right.setRotationPoint(2F, 14F, -2F); - Right.setTextureSize(64, 32); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - Left = new ModelRenderer(this, 21, 0); - Left.addBox(0F, 0F, 0F, 6, 4, 4); - Left.setRotationPoint(-8F, 14F, -2F); - Left.setTextureSize(64, 32); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - Back = new ModelRenderer(this, 0, 11); - Back.addBox(0F, 0F, 0F, 4, 4, 6); - Back.setRotationPoint(-2F, 14F, 2F); - Back.setTextureSize(64, 32); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - Front = new ModelRenderer(this, 0, 11); - Front.addBox(0F, 0F, 0F, 4, 4, 6); - Front.setRotationPoint(-2F, 14F, -8F); - Front.setTextureSize(64, 32); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - Top = new ModelRenderer(this, 21, 11); - Top.addBox(0F, 0F, 0F, 4, 6, 4); - Top.setRotationPoint(-2F, 8F, -2F); - Top.setTextureSize(64, 32); - Top.mirror = true; - setRotation(Top, 0F, 0F, 0F); - Bottom = new ModelRenderer(this, 21, 11); - Bottom.addBox(0F, 0F, 0F, 4, 6, 4); - Bottom.setRotationPoint(-2F, 18F, -2F); - Bottom.setTextureSize(64, 32); - Bottom.mirror = true; - setRotation(Bottom, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - this.renderMiddle(); - this.renderBottom(); - this.renderTop(); - this.renderLeft(); - this.renderRight(); - this.renderBack(); - this.renderFront(); - } - - public void renderMiddle() { Middle.render(0.0625F); } - public void renderBottom() { Bottom.render(0.0625F); } - public void renderTop() { Top.render(0.0625F); } - public void renderLeft() { Left.render(0.0625F); } - public void renderRight() { Right.render(0.0625F); } - public void renderBack() { Back.render(0.0625F); } - public void renderFront() { Front.render(0.0625F);} - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java b/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java deleted file mode 100644 index f918bb9a..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/RenderPipe.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.minecraft.src.eui.pipes; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderPipe extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelPipe model; - - public RenderPipe() - { - model = new ModelPipe(); - } - - public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) - { - //Texture file - - type = tileEntity.getType(); - switch(type) - { - case 0: bindTextureByName("/eui/SteamPipe.png");break; - case 1: bindTextureByName("/eui/WaterPipe.png");break; - //case 2: bindTextureByName("/eui/lavaPipe.png");break; - //case 3: bindTextureByName("/eui/oilPipe.png");break; - //case 4: bindTextureByName("/eui/fuelPipe.png");break; - //case 5: bindTextureByName("/eui/airPipe.png");break; - default:bindTextureByName("/eui/DefaultPipe.png"); break; - } - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - - if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) model.renderTop(); - if(tileEntity.connectedBlocks[2] != null) model.renderFront(); - if(tileEntity.connectedBlocks[3] != null) model.renderBack(); - if(tileEntity.connectedBlocks[4] != null) model.renderRight(); - if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); - - model.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java b/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java deleted file mode 100644 index a841cc42..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/TileEntityPipe.java +++ /dev/null @@ -1,200 +0,0 @@ -package net.minecraft.src.eui.pipes; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraft.src.eui.pipes.api.ILiquidConsumer; -import net.minecraft.src.eui.pipes.api.ILiquidProducer; -import net.minecraft.src.universalelectricity.UniversalElectricity; -import net.minecraft.src.universalelectricity.Vector3; - -public class TileEntityPipe extends TileEntity implements ILiquidConsumer -{ - //The amount stored in the conductor - protected int liquidStored = 0; - //the current set type of the pipe 0-5 - protected int type = 0; - //The maximum amount of electricity this conductor can take - protected int capacity = 5; - - //Stores information on all connected blocks around this tile entity - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - - //Checks if this is the first the tile entity updates - protected boolean firstUpdate = true; - /** - * This function adds a connection between this pipe and other blocks - * @param tileEntity - Must be either a producer, consumer or a conductor - * @param side - side in which the connection is coming from - */ - public void addConnection(TileEntity tileEntity, byte side) - { - this.connectedBlocks[side] = null; - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) - { - this.connectedBlocks[side] = tileEntity; - } - } - if(tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) - { - this.connectedBlocks[side] = tileEntity; - } - } - } - - - - /** - * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). - * @param vols - The amount of vol source is trying to give to this pipe - * @param side - The side of the block in which the liquid came from - * @return vol - The amount of rejected liquid that can't enter the pipe - */ - @Override - public int onReceiveLiquid(int type,int vol, byte side) - { - if(type == this.type) - { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); - this.liquidStored += vol - rejectedVolume; - return rejectedVolume; - } - return vol; - } - @Override - public void updateEntity() - { - //cause the block to update itself every tick needs to be change to .5 seconds to reduce load - ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - - - if(!this.worldObj.isRemote) - { - - byte connectedUnits = 0; - byte connectedConductors = 1; - int averageVolume = this.liquidStored; - - Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); - - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) - { - connectedUnits ++; - - if(connectedBlocks[i] instanceof TileEntityPipe) - { - averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - - connectedConductors ++; - } - } - } - } - //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty - averageVolume = Math.max(averageVolume/connectedConductors,0); - if(connectedUnits > 0) - { - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the liquid among the different blocks - if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) - { - if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - int transferVolumeAmount = 0; //amount to be moved - ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - - if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) - { - transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); - } - else if(!(connectedConsumer instanceof TileEntityPipe)) - { - transferVolumeAmount = this.liquidStored; - } - - int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); - } - } - - if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) - { - if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,UniversalElectricity.getOrientationFromSide(i, (byte)2))) - { - int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, UniversalElectricity.getOrientationFromSide(i, (byte)2)); - this.onReceiveLiquid(this.type, gainedVolume, i); - } - } - } - } - } - } - } - - /** - * @return Return the stored volume in this pipe. - */ - @Override - public int getStoredLiquid(int type) - { - return this.liquidStored; - } - - - @Override - public int getLiquidCapacity(int type) - { - return 5; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = par1NBTTagCompound.getInteger("type"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type); - } -//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe - @Override - public boolean canRecieveLiquid(int type, byte side) { - if(type == this.type) - { - return true; - } - return false; - } - //returns liquid type - public int getType() { - return this.type; - } - - //used by the item to set the liquid type on spawn - public void setType(int rType) { - this.type = rType; - - } - -} - diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java deleted file mode 100644 index 0f74db8d..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidConsumer.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.minecraft.src.eui.pipes.api; - - -public interface ILiquidConsumer -{ - /** - * onRecieveLiquid - * @param vol - The amount this block received. - * @param side - The side of the block in which the liquid came from. - * @parm type - The type of liquid being received - * @return vol - The amount liquid that can't be recieved - */ - public int onReceiveLiquid(int type, int vol, byte side); - - /** - * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param side - The side in which the electricity is coming from. - * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveLiquid(int type, byte side); - - /** - * @return Return the stored liquid of type in this consumer. - */ - public int getStoredLiquid(int type); - - /** - * @return Return the maximum amount of stored liquid this consumer can get. - */ - public int getLiquidCapacity(int type); - -} diff --git a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java deleted file mode 100644 index 64873561..00000000 --- a/minecraft/net/minecraft/src/eui/pipes/api/ILiquidProducer.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.minecraft.src.eui.pipes.api; - -/** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia - * - */ -public interface ILiquidProducer -{ - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param maxvol - The maximum vol or requested volume - * @param side - The side - * @return vol - Return a vol of liquid type that is produced - */ - public int onProduceLiquid(int type, int maxVol, int side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canProduceLiquid(int type, byte side); -} \ No newline at end of file From 82106411b70eddd19e182ae05a91f582b8df0efa Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 16 Jul 2012 14:12:51 -0400 Subject: [PATCH 032/115] Deleted code that slipped in --- .../net/minecraft/src/EntityCreeper.java | 192 ------------------ 1 file changed, 192 deletions(-) delete mode 100644 minecraft_server/net/minecraft/src/EntityCreeper.java diff --git a/minecraft_server/net/minecraft/src/EntityCreeper.java b/minecraft_server/net/minecraft/src/EntityCreeper.java deleted file mode 100644 index c466d52a..00000000 --- a/minecraft_server/net/minecraft/src/EntityCreeper.java +++ /dev/null @@ -1,192 +0,0 @@ -package net.minecraft.src; - -public class EntityCreeper extends EntityMob -{ - /** - * The amount of time since the creeper was close enough to the player to ignite - */ - int timeSinceIgnited; - - /** - * Time when this creeper was last in an active state (Messed up code here, probably causes creeper animation to go - * weird) - */ - int lastActiveTime; - - public EntityCreeper(World par1World) - { - super(par1World); - this.texture = "/mob/creeper.png"; - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAICreeperSwell(this)); - this.tasks.addTask(3, new EntityAIAvoidEntity(this, EntityOcelot.class, 6.0F, 0.25F, 0.3F)); - this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 0.25F, false)); - this.tasks.addTask(5, new EntityAIWander(this, 0.2F)); - this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 16.0F, 0, true)); - this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false)); - } - - /** - * Returns true if the newer Entity AI code should be run - */ - public boolean isAIEnabled() - { - return true; - } - - public int getMaxHealth() - { - return 20; - } - - protected void entityInit() - { - super.entityInit(); - this.dataWatcher.addObject(16, Byte.valueOf((byte) - 1)); - this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); - } - - /** - * (abstract) Protected helper method to write subclass entity data to NBT. - */ - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - - if (this.dataWatcher.getWatchableObjectByte(17) == 1) - { - par1NBTTagCompound.setBoolean("powered", true); - } - } - - /** - * (abstract) Protected helper method to read subclass entity data from NBT. - */ - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - this.dataWatcher.updateObject(17, Byte.valueOf((byte)(par1NBTTagCompound.getBoolean("powered") ? 1 : 0))); - } - - /** - * Called to update the entity's position/logic. - */ - public void onUpdate() - { - if (this.isEntityAlive()) - { - this.lastActiveTime = this.timeSinceIgnited; - int var1 = this.getCreeperState(); - - if (var1 > 0 && this.timeSinceIgnited == 0) - { - this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); - } - - this.timeSinceIgnited += var1; - - if (this.timeSinceIgnited < 0) - { - this.timeSinceIgnited = 0; - } - - if (this.timeSinceIgnited >= 30) - { - this.timeSinceIgnited = 30; - - if (!this.worldObj.isRemote) - { - if (this.getPowered()) - { - //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 6.0F); - } - else - { - //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 3.0F); - } - - this.setDead(); - } - } - } - - super.onUpdate(); - } - - /** - * Returns the sound this mob makes when it is hurt. - */ - protected String getHurtSound() - { - return "mob.creeper"; - } - - /** - * Returns the sound this mob makes on death. - */ - protected String getDeathSound() - { - return "mob.creeperdeath"; - } - - /** - * Called when the mob's health reaches 0. - */ - public void onDeath(DamageSource par1DamageSource) - { - super.onDeath(par1DamageSource); - - if (par1DamageSource.getEntity() instanceof EntitySkeleton) - { - this.dropItem(Item.record13.shiftedIndex + this.rand.nextInt(10), 1); - } - } - - public boolean attackEntityAsMob(Entity par1Entity) - { - return true; - } - - /** - * Returns true if the creeper is powered by a lightning bolt. - */ - public boolean getPowered() - { - return this.dataWatcher.getWatchableObjectByte(17) == 1; - } - - /** - * Returns the item ID for the item the mob drops on death. - */ - protected int getDropItemId() - { - return Item.gunpowder.shiftedIndex; - } - - /** - * Returns the current state of creeper, -1 is idle, 1 is 'in fuse' - */ - public int getCreeperState() - { - return this.dataWatcher.getWatchableObjectByte(16); - } - - /** - * Sets the state of creeper, -1 to idle and 1 to be 'in fuse' - */ - public void setCreeperState(int par1) - { - this.dataWatcher.updateObject(16, Byte.valueOf((byte)par1)); - } - - /** - * Called when a lightning bolt hits the entity. - */ - public void onStruckByLightning(EntityLightningBolt par1EntityLightningBolt) - { - super.onStruckByLightning(par1EntityLightningBolt); - this.dataWatcher.updateObject(17, Byte.valueOf((byte)1)); - } -} From 4809099e8a71f3b72c267353550166b3893a00ef Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 16 Jul 2012 14:14:08 -0400 Subject: [PATCH 033/115] Code for automation will seperate into its own repo later. --- .../src/eui/robotics/EntityShoeBot.java | 84 +++++++++++++++ .../minecraft/src/eui/robotics/ItemSpawn.java | 58 ++++++++++ .../src/eui/robotics/ModelModelShoeBot.java | 45 ++++++++ .../src/eui/robotics/RenderShoeBot.java | 101 ++++++++++++++++++ .../net/minecraft/src/mod_automation.java | 47 ++++++++ 5 files changed, 335 insertions(+) create mode 100644 minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java create mode 100644 minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java create mode 100644 minecraft/net/minecraft/src/mod_automation.java diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java new file mode 100644 index 00000000..0f23cfc8 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java @@ -0,0 +1,84 @@ +package net.minecraft.src.eui.robotics; +import java.util.List; + +import net.minecraft.src.*; +public class EntityShoeBot extends EntityRobot { + + EntityItem targetItem = null; + public EntityShoeBot(World par1World) { + super(par1World); + this.moveSpeed = 0.23F; + // this.tasks.addTask(1, new EntityAIWander(this, this.moveSpeed)); + this.texture = "/mobs/char.png"; + } + public float getBlockPathWeight(int par1, int par2, int par3) + { + return 0.5F + this.worldObj.getLightBrightness(par1, par2, par3); + } + @Override + public void onEntityUpdate() + { + super.onEntityUpdate(); + + if(targetItem == null) + { + targetItem = findClosestItem(this.posX, this.posY, this.posZ,30); + } + else + { + if(!targetItem.isEntityAlive()) + { + targetItem = null; + } + } + if(targetItem != null) + { + + PathEntity PathToItem = this.worldObj.getPathEntityToEntity(this, targetItem, 30, true, false, false, true); + if(hasPath()){ + this.setPathToEntity(PathToItem); + this.moveSpeed = 1.0F; + if(targetItem.getDistanceSq(this.posX,this.posY,this.posZ) < 1.5) + { + targetItem.setDead(); + targetItem = null; + } + } + else + { + this.moveSpeed = 0.23F; + } + } + + } + public EntityItem findClosestItem(double par1, double par3, double par5, double par7) + { + double var9 = -1.0D; + EntityItem var11 = null; + List itemList = worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(par7, 4.0D, par7)); + for (int var12 = 0; var12 < itemList.size(); ++var12) + { + EntityItem var13 = (EntityItem)itemList.get(var12); + double var14 = var13.getDistanceSq(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + @Override + public int getMaxHealth() { + // TODO Auto-generated method stub + return 5; + } + + public String getRenderedName() { + // TODO Auto-generated method stub + return "BlockEater"; + } + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java b/minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java new file mode 100644 index 00000000..d1fc39cc --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java @@ -0,0 +1,58 @@ +package net.minecraft.src.eui.robotics; + + +import java.util.ArrayList; + +import net.minecraft.src.*; + + +public class ItemSpawn extends Item +{ + + + public ItemSpawn (int id) + { + super(id); + maxStackSize = 1; + setMaxDamage(0); + setHasSubtypes(true); + } +public void addCreativeItems(ArrayList itemList) +{ + + itemList.add(new ItemStack(this, 1,1)); + + } + + public String getItemNameIS(ItemStack itemstack) { + switch(itemstack.getItemDamage()) + { + case 1: return "Bot"; + } + + return "Blank"; + } + public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) + { + + if(!world.isRemote) + { + + i += Facing.offsetsXForSide[l]; + j += Facing.offsetsYForSide[l]; + k += Facing.offsetsZForSide[l]; + + EntityShoeBot Guard = new EntityShoeBot(world); + Guard.setLocationAndAngles((double)i + 0.5D, (double)j + 1.0D, (double)k + 0.5D, 0.0F, 0.0F); + world.spawnEntityInWorld(Guard); + + entityplayer.swingItem(); + --itemstack.stackSize; + } + + + + + return true; + } +} diff --git a/minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java b/minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java new file mode 100644 index 00000000..18eebace --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java @@ -0,0 +1,45 @@ +package net.minecraft.src.eui.robotics; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +//Model code generated by MCModeller. All animation, AI, +//and special features are yours to program. Also keep in +//mind that some of these class names may have changed since +//wrote this. Make sure to check for compatibility with the +//latest version of the Minecraft Coder Pack before attempting +//to use this code. +import net.minecraft.src.ModelRenderer; + +public class ModelModelShoeBot extends ModelBase +{ + public ModelRenderer body; + public ModelRenderer Head; + + public ModelModelShoeBot() + { + body = new ModelRenderer(this,0, 0); + body.addBox(-4.0F, -2.0F, -4.0F, 8, 4, 8, 0); + + Head = new ModelRenderer(this,0, 0); + Head.addBox(-2.0F, -2.0F, -2.0F, 4, 4, 4, 0); + + } + @Override + public void render(Entity par1Entity, float f, float f1, float f2, float f3, float f4, float f5) + { + this.setRotationAngles(f, f1, f2, f3, f4, f5); + body.render(f5); + Head.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java b/minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java new file mode 100644 index 00000000..7e79df8c --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java @@ -0,0 +1,101 @@ +package net.minecraft.src.eui.robotics; + +import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.EQUIPPED; +import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.BLOCK_3D; +import net.minecraft.client.Minecraft; +import net.minecraft.src.Block; +import net.minecraft.src.Entity; +import net.minecraft.src.EntityBlaze; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EntityPlayerSP; +import net.minecraft.src.EnumAction; +import net.minecraft.src.FontRenderer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.ModelBiped; +import net.minecraft.src.ModelBlaze; +import net.minecraft.src.ModelGhast; +import net.minecraft.src.RenderBlocks; +import net.minecraft.src.RenderLiving; +import net.minecraft.src.Tessellator; +import net.minecraft.src.forge.IItemRenderer; +import net.minecraft.src.forge.MinecraftForgeClient; + +import org.lwjgl.opengl.GL11; + +public class RenderShoeBot extends RenderLiving +{ + public RenderShoeBot() + { + super(new ModelModelShoeBot(), 0.5F); + } + + protected void renderName(EntityShoeBot par1EntityGuard, double par2, double par4, double par6) + { + if (Minecraft.isGuiEnabled()) + { + float var8 = 1.6F; + float var9 = 0.016666668F * var8; + float var10 = par1EntityGuard.getDistanceToEntity(this.renderManager.livingPlayer); + float var11 = par1EntityGuard.isSneaking() ? 4.0F : 32.0F; + + if (var10 < var11) + { + String var12 = par1EntityGuard.getRenderedName(); + + + FontRenderer var13 = this.getFontRendererFromRenderManager(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)par2 + 0.0F, (float)par4 + 2.3F, (float)par6); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glScalef(-var9, -var9, var9); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glTranslatef(0.0F, 0.25F / var9, 0.0F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Tessellator var14 = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var14.startDrawingQuads(); + int var15 = var13.getStringWidth(var12) / 2; + var14.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); + var14.addVertex((double)(-var15 - 1), -1.0D, 0.0D); + var14.addVertex((double)(-var15 - 1), 8.0D, 0.0D); + var14.addVertex((double)(var15 + 1), 8.0D, 0.0D); + var14.addVertex((double)(var15 + 1), -1.0D, 0.0D); + var14.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + var13.drawString(var12, -var13.getStringWidth(var12) / 2, 0, 553648127); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + } + } + + public void renderBot(EntityShoeBot par1Entity, double par2, double par4, double par6, float par8, float par9) + { + double var13 = par4 - (double)par1Entity.yOffset - 1.2; + super.doRenderLiving(par1Entity, par2, var13, par6, par8, par9); + } + @Override + public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) + { + this.renderBot((EntityShoeBot)par1Entity, par2, par4, par6, par8, par9); + } + public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) + { + this.renderBot((EntityShoeBot)par1EntityLiving, par2, par4, par6, par8, par9); + } + @Override + protected void passSpecialRender(EntityLiving par1EntityLiving, double par2, double par4, double par6) + { + this.renderName((EntityShoeBot)par1EntityLiving, par2, par4, par6); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/mod_automation.java b/minecraft/net/minecraft/src/mod_automation.java new file mode 100644 index 00000000..93a2f3d5 --- /dev/null +++ b/minecraft/net/minecraft/src/mod_automation.java @@ -0,0 +1,47 @@ +package net.minecraft.src; +import net.minecraft.client.Minecraft; +import net.minecraft.src.basiccomponents.BasicComponents; +import net.minecraft.src.eui.*; +import net.minecraft.src.eui.robotics.ModelModelShoeBot; +import net.minecraft.src.eui.robotics.RenderShoeBot; +import net.minecraft.src.forge.*; +import net.minecraft.src.universalelectricity.*; + +import java.util.ArrayList; +import java.util.Map; +import java.io.*; +public class mod_automation extends NetworkMod { + static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); + public static int spawnItemId = configurationProperties(); + public static Item spawnItem = (new net.minecraft.src.eui.robotics.ItemSpawn(spawnItemId)).setItemName("Bot"); + @Override + public String getVersion() { + // TODO change version on each update ;/ + return "0.0.1"; + } + public static int configurationProperties() + { + config.load(); + spawnItemId = Integer.parseInt(config.getOrCreateIntProperty("BotItem", Configuration.CATEGORY_ITEM, 31356).value); + config.save(); + return spawnItemId; + } + @Override + public void load() { + //register + UniversalElectricity.registerAddon(this, "0.4.5"); + MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); + MinecraftForgeClient.preloadTexture("/eui/Items.png"); + ModLoader.addName((new ItemStack(spawnItem, 1, 0)), "Bot"); + //........... + ModLoader.registerEntityID(net.minecraft.src.eui.robotics.EntityShoeBot.class, "Bot", 101); + + } + @Override + public void addRenderer(Map map) + { + map.put(net.minecraft.src.eui.robotics.EntityShoeBot.class, new RenderShoeBot()); + } + + +} From 9e67cbf2e3c7a4938e85c8c36151bcd2f5edf4a4 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 16 Jul 2012 14:14:17 -0400 Subject: [PATCH 034/115] . --- .../src/eui/robotics/EntityRobot.java | 38 ++++++++++--------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java index 85501ad3..e772d681 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java +++ b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java @@ -1,28 +1,32 @@ package net.minecraft.src.eui.robotics; import net.minecraft.src.*; -public class EntityRobot extends Entity { - +public class EntityRobot extends EntityCreature { + protected int attackStrength = 0; public EntityRobot(World par1World) { super(par1World); } - public boolean isActive() - { - return false; - } + public boolean isAIEnabled() + { + return false; + } + protected boolean canDespawn() + { + return false; + } @Override - protected void entityInit() { - // TODO Auto-generated method stub - - } + public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeEntityToNBT(par1NBTTagCompound); + } + + public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readEntityFromNBT(par1NBTTagCompound); + } @Override - protected void readEntityFromNBT(NBTTagCompound var1) { + public int getMaxHealth() { // TODO Auto-generated method stub - - } - @Override - protected void writeEntityToNBT(NBTTagCompound var1) { - // TODO Auto-generated method stub - + return 0; } } From 916ddca95de86a93a9eddeaa3d18a28e060f48a5 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 16 Jul 2012 14:15:07 -0400 Subject: [PATCH 035/115] code Clean up cleaned up code, remove condernser, re added recipes, fixed recipes for basic pipes use,etc --- .../net/minecraft/src/eui/BlockMachine.java | 1 - .../net/minecraft/src/mod_EUIndustry.java | 65 ++++++++++--------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/minecraft/net/minecraft/src/eui/BlockMachine.java index da85de81..b16ed65c 100644 --- a/minecraft/net/minecraft/src/eui/BlockMachine.java +++ b/minecraft/net/minecraft/src/eui/BlockMachine.java @@ -263,7 +263,6 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. case 1: return new TileEntityBoiler(); case 2: return new TileEntityFireBox(); case 3: return new TileEntityGenerator(); - case 14: return new TileEntityCondenser(); case 15: return new TileEntityNuller(); } return null; diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index ecb20589..c8279a4c 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -2,6 +2,10 @@ package net.minecraft.src; import net.minecraft.client.Minecraft; import net.minecraft.src.basiccomponents.BasicComponents; import net.minecraft.src.eui.*; +import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.eui.burner.TileEntityFireBox; +import net.minecraft.src.eui.grinder.TileEntityGrinder; +import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.*; @@ -26,7 +30,7 @@ public class mod_EUIndustry extends NetworkMod { @Override public String getVersion() { // TODO change version on each update ;/ - return "0.0.6"; + return "0.0.7"; } public static int configurationProperties() { @@ -44,55 +48,52 @@ public class mod_EUIndustry extends NetworkMod { config.save(); return coalID; } + @Override + public void modsLoaded() + { + UniversalElectricity.registerAddon(this, "0.4.5"); + } @Override public void load() { //register - UniversalElectricity.registerAddon(this, "0.4.3"); + ModLoader.registerBlock(machine, net.minecraft.src.eui.ItemMachine.class); MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); MinecraftForgeClient.preloadTexture("/eui/Items.png"); - //Blocks - //gen - //machine - ModLoader.registerBlock(machine, net.minecraft.src.eui.ItemMachine.class); - ModLoader.addName((new ItemStack(machine, 1, 0)), "CoalRefiner"); - ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); - ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); - ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); - ModLoader.addName((new ItemStack(machine, 1, 14)), "WaterCondenser"); - ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); - ModLoader.registerTileEntity(net.minecraft.src.eui.grinder.TileEntityGrinder.class, "grinder"); + //TileEntities.................................. ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler"); ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox"); ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator"); - ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityCondenser.class, "waterPump"); ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller"); - //Items + //Names............... + ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); + ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); + ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); + ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); ModLoader.addName((new ItemStack(coalNugget, 1, 0)), "CoalNuggets"); ModLoader.addName((new ItemStack(coalNugget, 1, 1)), "CoalPellets"); ModLoader.addName((new ItemStack(coalNugget, 1, 2)), "CoalDust"); - //fuels //Crafting - - ModLoader.addRecipe(new ItemStack(machine, 1, 0), new Object [] {"@S@", "SCW", "@S@", - 'S',BasicComponents.ItemSteelIngot, +/** + * case 0: return new TileEntityGrinder(); <-Removed + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityGenerator(); + case 14: return new TileEntityCondenser();<-Removed + case 15: return new TileEntityNuller();<-Just for testing Not craftable + */ + ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(mod_BasicPipes.parts, 1,5), '@',new ItemStack(BasicComponents.ItemSteelPlate), - 'C',new ItemStack(BasicComponents.ItemCircuit,1,1), - 'W',BasicComponents.ItemCopperWire}); - /**ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(parts, 1,1), - '@',new ItemStack(UniversalComponents.ItemSteelPlate), - 'O',new ItemStack(parts, 1,4), - 'V',new ItemStack(parts, 1,3)}); + 'O',new ItemStack(mod_BasicPipes.parts, 1,1), + 'V',new ItemStack(mod_BasicPipes.parts, 1,6)}); ModLoader.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", 'F',Block.stoneOvenIdle, - '@',new ItemStack(UniversalComponents.ItemSteelPlate)}); + '@',new ItemStack(BasicComponents.ItemSteelPlate)}); ModLoader.addRecipe(new ItemStack(machine, 1, 3), new Object [] {"@T@", "PMP", "@T@", - 'T',new ItemStack(parts, 1,4), - '@',new ItemStack(UniversalComponents.ItemSteelPlate), + 'T',new ItemStack(mod_BasicPipes.parts, 1,0), + '@',new ItemStack(BasicComponents.ItemSteelPlate), 'P',Block.pistonBase, - 'M',new ItemStack(UniversalComponents.ItemMotor)});**/ - - //smelting + 'M',new ItemStack(BasicComponents.ItemMotor)}); } From 35b1f753298003eb06bd1e7c9a544a04e605be68 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 06:56:05 -0400 Subject: [PATCH 036/115] Code cleanup and bug fixes mainly just a code upload but cleanup and bug fixes were made but not finished. --- .../net/minecraft/src/eui/BlockMachine.java | 96 +++-- .../net/minecraft/src/eui/ItemMachine.java | 10 - .../minecraft/src/eui/TileEntityMachine.java | 19 +- .../src/eui/boiler/ShareResources.java | 15 + .../src/eui/boiler/TileEntityBoiler.java | 331 ++++++------------ .../net/minecraft/src/mod_EUIndustry.java | 23 +- 6 files changed, 193 insertions(+), 301 deletions(-) create mode 100644 minecraft/net/minecraft/src/eui/boiler/ShareResources.java diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/minecraft/net/minecraft/src/eui/BlockMachine.java index b16ed65c..26216049 100644 --- a/minecraft/net/minecraft/src/eui/BlockMachine.java +++ b/minecraft/net/minecraft/src/eui/BlockMachine.java @@ -8,7 +8,6 @@ import net.minecraft.src.basiccomponents.*; import net.minecraft.src.eui.boiler.*; import net.minecraft.src.eui.burner.GUIFireBox; import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.grinder.*; import net.minecraft.src.eui.turbine.GUIGenerator; import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.forge.*; @@ -74,48 +73,37 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. { TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - + if(metadata > -1 && tileEntity != null) + { if (side == 1) { switch(metadata) { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; + case 0: return 6; + case 1: return 4; + case 2: return 7; + case 3: return 4; } } - - //If it is the front side - if(side == ((TileEntityMachine)tileEntity).getDirection()) - { - switch(metadata) - { - - case 1: return 3; - case 3: return 3; - } - } //If it is the back side else if(side == UniversalElectricity.getOrientationFromSide(((TileEntityMachine)tileEntity).getDirection(), (byte)2)) { switch(metadata) { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; + case 0: return 5; + case 2: return 8; + case 3: return 4; } } switch(metadata) { - case 1: return 4; - case 2: return 16; - case 3: return 2; + case 1: return 0; + case 2: return 2; } - return 0; + } + return 1; } @@ -126,10 +114,10 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. { switch(metadata) { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; + case 0: return 6; + case 1: return 4; + case 2: return 7; + case 3: return 0; } } else @@ -139,10 +127,10 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. { switch(metadata) { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; + case 0: return 5; + case 1: return 0; + case 2: return 8; + case 3: return 4; } } //If it is the back side @@ -158,12 +146,12 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. switch(metadata) { - case 1: return 4; - case 2: return 16; - case 3: return 2; + case 1: return 0; + case 2: return 2; + case 3: return 0; } } - return 0; + return 1; } public boolean blockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) { @@ -229,11 +217,7 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. if (blockEntity != null) { - if(blockEntity instanceof TileEntityGrinder) - { - TileEntity var6 = (TileEntityGrinder)par1World.getBlockTileEntity(x, y, z); - ModLoader.openGUI(par5EntityPlayer, new GuiGrinder(par5EntityPlayer.inventory, (TileEntityGrinder) var6 )); ; - } + if(blockEntity instanceof TileEntityBoiler) { TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); @@ -258,8 +242,7 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. public TileEntity getBlockEntity(int meta) { switch(meta) - { - case 0: return new TileEntityGrinder(); + { case 1: return new TileEntityBoiler(); case 2: return new TileEntityFireBox(); case 3: return new TileEntityGenerator(); @@ -306,8 +289,16 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. { if (!keepFurnaceInventory) { - TileEntityGrinder var5 = (TileEntityGrinder)par1World.getBlockTileEntity(par2, par3, par4); - + TileEntityMachine var5 = null; + TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); +if(entityBox instanceof TileEntityFireBox) +{ + var5 = (TileEntityFireBox)entityBox; +} +else if(entityBox instanceof TileEntityBoiler) +{ + var5 = (TileEntityBoiler)entityBox; +} if (var5 != null) { for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) @@ -369,13 +360,10 @@ public class BlockMachine extends net.minecraft.src.universalelectricity.extend. { return 0; } -public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,14)); - itemList.add(new ItemStack(this, 1,15)); +public void addCreativeItems(ArrayList itemList) { + itemList.add(new ItemStack(this, 1,1));//boiler + itemList.add(new ItemStack(this, 1,2));//firebox + itemList.add(new ItemStack(this, 1,3));//generator + itemList.add(new ItemStack(this, 1,15));//eu vamp } } diff --git a/minecraft/net/minecraft/src/eui/ItemMachine.java b/minecraft/net/minecraft/src/eui/ItemMachine.java index 8a7104f0..7686ef20 100644 --- a/minecraft/net/minecraft/src/eui/ItemMachine.java +++ b/minecraft/net/minecraft/src/eui/ItemMachine.java @@ -34,15 +34,5 @@ public class ItemMachine extends ItemBlock { } return this.getItemName(); } - @Override - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,15)); - } -} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/minecraft/net/minecraft/src/eui/TileEntityMachine.java index 9531b4da..7554a54d 100644 --- a/minecraft/net/minecraft/src/eui/TileEntityMachine.java +++ b/minecraft/net/minecraft/src/eui/TileEntityMachine.java @@ -1,13 +1,14 @@ package net.minecraft.src.eui; import net.minecraft.src.*; +import net.minecraft.src.eui.boiler.TileEntityBoiler; import net.minecraft.src.forge.ITextureProvider; import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; import net.minecraft.src.universalelectricity.extend.IRotatable; public class TileEntityMachine extends TileEntityElectricUnit implements ITextureProvider, IRotatable { - private byte facing; + private byte facing = 0; public TileEntity getSteamMachine(int i) { @@ -74,4 +75,20 @@ public class TileEntityMachine extends TileEntityElectricUnit implements ITextur // TODO Auto-generated method stub return false; } + + + public int getSizeInventory() { + // TODO Auto-generated method stub + return 0; + } + + public ItemStack getStackInSlot(int var6) { + // TODO Auto-generated method stub + return null; + } + @Override + public boolean canUpdate() + { + return true; + } } \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/boiler/ShareResources.java b/minecraft/net/minecraft/src/eui/boiler/ShareResources.java new file mode 100644 index 00000000..7da50380 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/boiler/ShareResources.java @@ -0,0 +1,15 @@ +package net.minecraft.src.eui.boiler; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ShareResources { + + + + + + + + +} diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java index 8ca4e781..b094d897 100644 --- a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java +++ b/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java @@ -16,7 +16,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I /** * The ItemStacks that hold the items currently being used in the furnace */ - private ItemStack[] furnaceItemStacks = new ItemStack[3]; + private ItemStack[] furnaceItemStacks = new ItemStack[1]; /** The number of ticks that the boiler will keep burning */ public int RunTime = 0; @@ -33,8 +33,9 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I public int hullHeat = 0; public int hullHeatMax = 10000; private int heatTick = 0; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - public TileEntity[] connectedFaces = {null, null, null, null, null, null, null, null}; + int count = 0; + boolean hullHeated = false; + TileEntity[] connectedBlocks = {null, null, null, null, null, null}; int steamMax = 140; public boolean isBeingHeated = false; /** @@ -52,11 +53,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I { return this.furnaceItemStacks[par1]; } - - /** - * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new - * stack. - */ + public ItemStack decrStackSize(int par1, int par2) { if (this.furnaceItemStacks[par1] != null) @@ -205,48 +202,19 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I { return false; } - } - private int getTextureFront() { - - return 0; - } - public TileEntity getFacingBoilers(int i) - { - - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - switch(i){ - case 0: y = y - 1;break; - case 1: y = y + 1;break; - case 2: z = z + 1;break; - case 3: z = z - 1;break; - case 4: x = x + 1;break; - case 5: x = x - 1;break; - } - TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntityBoiler) - { - return aEntity; - } - - return null; - } - int count = 0; + } + @Override public void updateEntity(){ - if(count == 20){ - isBeingHeated = getIsHeated(); - addConnection(); - shareResources(); + count++; + if(count >= 20){ + isBeingHeated = getIsHeated(); + addWater();//adds water from container slot + shareWater(); count = 0; } - else - { - count++; - } - boolean hullHeated = false; + //changed hullHeat max depending on contents of boiler - if(waterStored>0) + if(waterStored > 0) { hullHeatMax = 4700; if(hullHeat > hullHeatMax) @@ -280,8 +248,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I heatTick += 1; } } - //adds water from container slot - addWater(); + int heatNeeded = mod_EUIndustry.boilerHeat; // kilo joules //if hull heated do work @@ -312,190 +279,118 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I } } - } - int transferW = 0; - int transferS = 0; - int transferH = 0; - public void shareResources() - { - - for(int i = 0; i<6; i++) + } + public void shareWater() + { + int wSum = getStoredLiquid(1); //pre-sets the sum to the first tanks current volume + int tankCount = 1; //amount of tanks around this tank, used to get avarage liquid ammount + boolean bottom = false; // whether or not this tanks need to worry about what is bellow it + TileEntity entityBellow = worldObj.getBlockTileEntity(this.xCoord,this.yCoord-1, this.zCoord); + TileEntity entityAbove = worldObj.getBlockTileEntity(this.xCoord,this.yCoord+1, this.zCoord); + //checks wether or not the block bellow it is a tank to move liquid too + if(entityBellow instanceof TileEntityBoiler) { - if(connectedBlocks[i] instanceof TileEntityBoiler) - { - TileEntityBoiler connectedConsumer = (TileEntityBoiler)connectedBlocks[i]; - //add steam to other boiler if less - boolean canTradeSteam; - if( i ==0) - { - if(this.steamStored == this.steamMax) + int bWater = ((TileEntityBoiler) entityBellow).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) entityBellow).getLiquidCapacity(1); + //checks if that tank has room to get liquid. + + if(bWater < bMax) + { + int emptyVol = Math.max( bMax - bWater,0); + int tradeVol = Math.min(emptyVol, waterStored); + int rejected = ((TileEntityBoiler) entityBellow).onReceiveLiquid(1, tradeVol, (byte) 1); + waterStored = Math.max(waterStored - rejected,0); + wSum -= rejected; + } + else { - canTradeSteam = true; - } - else - { - canTradeSteam = false; + bottom = true; } } else { - canTradeSteam = true; - } - if(canTradeSteam) + //there was no tank bellow this tank + bottom = true; + } + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + if(bottom) { - if( this.steamStored > 0) + //get average water around center tank + for(int i = 0; i<4;i++) + { + int x = this.xCoord; + int z = this.zCoord; + //switch to check each side TODO rewrite for side values + switch(i) { - int SSum = (this.steamStored + connectedConsumer.steamStored)/2; - if(i == 1 && connectedConsumer.steamStored < connectedConsumer.steamMax && this.steamStored > 0){ - if(this.steamStored >= 10 ) - { - - int rejectedW = connectedConsumer.addSteam(10); - this.steamStored = Math.max(Math.min(this.steamStored - 10 + rejectedW, this.steamMax), 0); - } - else - { - int rejectedW = connectedConsumer.addSteam(this.steamStored); - this.steamStored = Math.max(Math.min(this.steamStored - this.steamStored + rejectedW, this.steamMax), 0); - } - } - if(this.steamStored > connectedConsumer.steamStored) - { - transferS = SSum - connectedConsumer.steamStored; - int rejectedS = connectedConsumer.addSteam(transferS); - this.steamStored = Math.max(Math.min(this.steamStored - transferS + rejectedS, 140), 0); - } + case 0: --x; + case 1: ++x; + case 2: --z; + case 3: ++z; } - } - //add water to other boiler if less - if( this.waterStored > 0) - { - boolean canTradeWater; - if( i ==1) - { - if(this.waterStored == this.getLiquidCapacity(1)) - { - canTradeWater = true; - } - else - { - canTradeWater = false; - } - } - else - { - canTradeWater = true; - } - if(canTradeWater) - { - int WSum = (this.waterStored + connectedConsumer.waterStored)/2; - if(i == 0 && this.waterStored > 0 && connectedConsumer.waterStored < connectedConsumer.getLiquidCapacity(1)) - { - - int rejectedW = connectedConsumer.addwater(1); - this.waterStored = Math.max(Math.min(this.waterStored - 1 + rejectedW, this.getLiquidCapacity(1)), 0); - } - if(this.waterStored > connectedConsumer.waterStored) - { - transferW =Math.round(WSum - connectedConsumer.waterStored); - if(transferW > 0) - { - int rejectedW = connectedConsumer.addwater(transferW); - this.waterStored = Math.max(Math.min(this.waterStored - transferW + rejectedW, this.getLiquidCapacity(1)), 0); - } - } - - - } - - } - - - //add heat to other boiler if less - boolean canTradeHeat; - - if(this.heatStored == heatMax || !isBeingHeated) - { - canTradeHeat = true; - } - else - { - canTradeHeat = false; - } - - if(canTradeHeat) + TileEntity entity = worldObj.getBlockTileEntity(x,this.yCoord, z); + if(entity instanceof TileEntityBoiler) { - if( this.heatStored > 0) - { - - if(this.heatStored > connectedConsumer.heatStored ) - { - int HSum = (this.heatStored + connectedConsumer.heatStored)/2; - transferH = HSum - connectedConsumer.heatStored; - int rejectedH = connectedConsumer.onReceiveHeat(transferH); - this.heatStored = Math.max(Math.min(this.waterStored - transferW + rejectedH, heatMax), 0); - } - - - } + //if is a tank add to the sum + wSum += ((TileEntityBoiler) entity).getStoredLiquid(1); + tankCount += 1; } } } - - - } - - - private int onProduceWater(int t, int i) { - if(waterStored - t > 0) + //transfers water + for(int i = 0; i<4;i++) { - waterStored = waterStored - t; - return t; + int average = wSum / tankCount;// takes the sum and makes it an average + int x2 = this.xCoord; + int z2 = this.zCoord; + int tradeSum = 0; + //switch to check each side TODO rewrite for side values + switch(i) + { + case 0: --x2; + case 1: ++x2; + case 2: --z2; + case 3: ++z2; + } + TileEntity entity = worldObj.getBlockTileEntity(x2,this.yCoord, z2); + if(entity instanceof TileEntityBoiler) + { + int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); + if(targetW < average) + { + tradeSum = Math.min(average, waterStored); //gets the ammount to give to the target tank + int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, (byte) i); //send that ammount with safty incase some comes back + waterStored =rejectedAm + waterStored - tradeSum; //counts up current water sum after trade + } + } + } + if(entityAbove instanceof TileEntityBoiler) + { + int bWater = ((TileEntityBoiler) entityAbove).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) entityAbove).getLiquidCapacity(1); + if(bottom && waterStored > 0) + { + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, steamStored); + int rejectedS = ((TileEntityBoiler) entityAbove).addSteam(tradeVolS); + waterStored = Math.max(waterStored - rejectedS,0); + wSum -= rejectedS; + } + } } - return 0; - - } - public void addConnection() - { - for(int i = 0; i<6; i++) - { - - TileEntity aEntity = getSteamMachine(i); - if(aEntity instanceof TileEntityBoiler) - { - this.connectedBlocks[i] = aEntity; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - - + + + + + } public int addSteam(int watt) { int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); this.steamStored += watt - rejectedElectricity; return rejectedElectricity; } - public int addwater(int watt) { - int rejectedElectricity = Math.max((this.waterStored + watt) - this.getLiquidCapacity(1), 0); - this.waterStored += watt - rejectedElectricity; - return rejectedElectricity; - } - public int onReceiveHeat(int watt) { - if(heatStored < heatMax) - { - int rejectedElectricity = Math.max((this.heatStored + watt) - heatMax, 0); - this.heatStored += watt - rejectedElectricity; - return rejectedElectricity; - } - return watt; - } - /** - * adds water too the system - */ private void addWater() { if (this.furnaceItemStacks[0] != null) { @@ -527,9 +422,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I @Override public int getStartInventorySide(int side) { - if (side == 0) return 1; - if (side == 1) return 0; - return 2; + return 0; } @Override @@ -588,16 +481,20 @@ public class TileEntityBoiler extends TileEntityMachine implements IInventory, I { return 14; } + if(type == 0) + { + return steamMax; + } return 0; } @Override public int onProduceLiquid(int type, int maxVol, int side) { if(type == 0) { - if(steamStored > maxVol) + if(steamStored > 1) { - this.steamStored -= maxVol; - return maxVol; + this.steamStored -= 1; + return 1; } } return 0; diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/minecraft/net/minecraft/src/mod_EUIndustry.java index c8279a4c..f9776799 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/minecraft/net/minecraft/src/mod_EUIndustry.java @@ -4,7 +4,6 @@ import net.minecraft.src.basiccomponents.BasicComponents; import net.minecraft.src.eui.*; import net.minecraft.src.eui.boiler.TileEntityBoiler; import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.grinder.TileEntityGrinder; import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.*; @@ -14,19 +13,13 @@ import java.util.Map; import java.io.*; public class mod_EUIndustry extends NetworkMod { static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); - private static int coalID = configurationProperties(); - private static int BlockID; - public static int pipeID; - public static int partID; - public static int pipeBlockID; - public static int pipeBlockID2; + private static int BlockID= configurationProperties(); public static int genOutput; public static int steamOutBoiler; public static int pipeLoss; public static int boilerHeat; public static int fireOutput; public static Block machine = new net.minecraft.src.eui.BlockMachine(BlockID).setBlockName("machine"); - public static Item coalNugget = new net.minecraft.src.eui.ItemCoalFuel(coalID); @Override public String getVersion() { // TODO change version on each update ;/ @@ -34,19 +27,14 @@ public class mod_EUIndustry extends NetworkMod { } public static int configurationProperties() { - config.load(); - coalID = Integer.parseInt(config.getOrCreateIntProperty("coalItems", Configuration.CATEGORY_ITEM, 30439).value); - pipeBlockID = Integer.parseInt(config.getOrCreateIntProperty("PipeS", Configuration.CATEGORY_BLOCK, 128).value); - pipeBlockID2 = Integer.parseInt(config.getOrCreateIntProperty("PipeW", Configuration.CATEGORY_BLOCK, 130).value); - BlockID = Integer.parseInt(config.getOrCreateIntProperty("Machines", Configuration.CATEGORY_BLOCK, 129).value); - pipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 30433).value); - partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 30434).value); + config.load(); + BlockID = Integer.parseInt(config.getOrCreateIntProperty("Machines", Configuration.CATEGORY_BLOCK, 129).value); genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWatts", Configuration.CATEGORY_GENERAL, 1000).value); steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutBoiler", Configuration.CATEGORY_GENERAL, 10).value); boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJ", Configuration.CATEGORY_GENERAL, 4500).value); fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJ", Configuration.CATEGORY_GENERAL,50).value); config.save(); - return coalID; + return BlockID; } @Override public void modsLoaded() @@ -69,9 +57,6 @@ public class mod_EUIndustry extends NetworkMod { ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); - ModLoader.addName((new ItemStack(coalNugget, 1, 0)), "CoalNuggets"); - ModLoader.addName((new ItemStack(coalNugget, 1, 1)), "CoalPellets"); - ModLoader.addName((new ItemStack(coalNugget, 1, 2)), "CoalDust"); //Crafting /** * case 0: return new TileEntityGrinder(); <-Removed From 249c6cfef6939a03bc7f650d57e22cd3bcd440c6 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 06:56:53 -0400 Subject: [PATCH 037/115] Made a basic harvester block basic harvester proto type too test search function for bots. --- .../minecraft/src/eui/robotics/BlockComp.java | 58 +++++- .../src/eui/robotics/ItemMachine.java | 24 +++ .../src/eui/robotics/TileEntityComp.java | 175 +++++++++++++++++- 3 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 minecraft/net/minecraft/src/eui/robotics/ItemMachine.java diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java index 13420eae..0ae7a86b 100644 --- a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java +++ b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java @@ -1,5 +1,61 @@ package net.minecraft.src.eui.robotics; -public class BlockComp { +import java.util.List; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.eui.TileEntityNuller; +import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.eui.burner.TileEntityFireBox; +import net.minecraft.src.eui.turbine.TileEntityGenerator; +import net.minecraft.src.universalelectricity.Vector3; + +public class BlockComp extends net.minecraft.src.universalelectricity.extend.BlockMachine { + + public BlockComp(int par1) { + super("RobotMachine", par1, Material.iron); + // TODO Auto-generated constructor stub + } + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + return 0; + } + public int getBlockTextureFromSideAndMetadata(int side, int metadata) + { + return 0; + } + @Override + public TileEntity getBlockEntity() { + // TODO Auto-generated method stub + return null; + } + @Override + public TileEntity getBlockEntity(int meta) + { + switch(meta) + { + case 0: return new TileEntityComp(); + case 1: return new TileEntityComp(); + case 2: return new TileEntityComp(); + case 3: return new TileEntityComp(); + } + return null; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + public int getRenderType() + { + return 0; + } } diff --git a/minecraft/net/minecraft/src/eui/robotics/ItemMachine.java b/minecraft/net/minecraft/src/eui/robotics/ItemMachine.java new file mode 100644 index 00000000..0731d868 --- /dev/null +++ b/minecraft/net/minecraft/src/eui/robotics/ItemMachine.java @@ -0,0 +1,24 @@ +package net.minecraft.src.eui.robotics; +import java.util.ArrayList; + +import net.minecraft.src.*; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + } + @Override + public int getMetadata(int metadata) + { + return metadata; + } + @Override + public String getItemName() + { + return "Machine"; + } + } + diff --git a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java index c933ba06..0d3a18e6 100644 --- a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java +++ b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java @@ -1,5 +1,178 @@ package net.minecraft.src.eui.robotics; -public class TileEntityComp { +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.Block; +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Material; +import net.minecraft.src.ModLoader; +import net.minecraft.src.TileEntity; +import net.minecraft.src.universalelectricity.Vector3; +import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; + +public class TileEntityComp extends TileEntityElectricUnit { + public EntityRobot[] BotList = {null,null,null,null}; + + int updateCount = 0; + int scanCount = 0; + boolean hasScanned = false; + int lastScanXDif=0; + int lastScanYDif=0; + int lastScanZDif=0; + public void onUpdate(float watts, float voltage, byte side) + { + ++updateCount; + + + if(updateCount >= 100 && worldObj.checkChunksExist(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1)) + { + ++scanCount; + if(scanCount < 10){hasScanned = true;}else{scanCount = 0;} + Vector3 thisBlock = new Vector3(this.xCoord,this.yCoord,this.zCoord); + updateCount = 0; + Vector3 targetVec = findBlock(thisBlock,Block.leaves,2,hasScanned); + if(targetVec == null) + { + targetVec = findBlock(thisBlock,Block.wood,2,hasScanned); + } + if(targetVec != null) + { + int Targetx = targetVec.intX(); + int Targety = targetVec.intY(); + int Targetz = targetVec.intZ(); + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("rb:"+Targetx+"X:"+Targety+"Y:"+Targetz+"Z"); + int blockTargetc = worldObj.getBlockId(Targetx, Targety, Targetz); + worldObj.setBlock(Targetx, Targety, Targetz, 0); + + if(blockTargetc > 0) + { + EntityItem dropedItem = new EntityItem(worldObj, Targetx, Targety - 0.3D, Targetz, new ItemStack(blockTargetc,1,1)); + worldObj.spawnEntityInWorld(dropedItem); + } + } + else + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("N/A");//nothing found froms scan + scanCount = 0; + } + + //resets scan to zero location every 10 scans + + } + } +/** + * + * @param startSpot - center of the scan radius + * @param block - block being looked for + * @param range - block count from center to scan + * @param resume - whether or not to resume scan from returned block + * @return location vector3 of the block equaling scan args + */ + public Vector3 findBlock(Vector3 startSpot,Block block,int range,boolean resume) + { + + + int Startx = startSpot.intX(); + int Starty = startSpot.intY(); + int Startz = startSpot.intZ(); + int distanceX = (range * 2) + 1; + int distanceZ = (range * 2) + 1; + int distanceY = (range * 2) + 1; + Boolean negX = Startx < 0; + Boolean negZ = Startz < 0; + int xChange = -1; + int zChange = -1; + int yChange = -1; + Startx += range; + Startz += range; + Starty += range; + int pauseCount = 0; + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("starting Scan For " + block.getBlockName()); + int y = Starty; + for(int iY=0;iY < (distanceY*2);iY++) + { + + pauseCount++; + if(pauseCount >= 2) + { + int x = Startx; + int z = Startz; + + for(int iX=0;iX < distanceY;iX++) + { + for(int iZ=0;iZ < distanceZ;iZ++) + { + + int blockTargetID = worldObj.getBlockId(x, y, z); + System.out.println("BlockAt:"+x+"x:"+y+"y:"+z+"z:"+blockTargetID+"ID"); + if(blockTargetID == block.blockID) + { + Vector3 targetBlock = new Vector3(x,y,z); + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Target Block Found"); + return targetBlock; + } + + z += zChange; + } + x += xChange; + z = Startz; + } + pauseCount =0; + y += yChange; + } + + + } + return null; + + } + public EntityRobot[] getControlList() + { + return BotList; + + } + public void addBot(EntityRobot bot) + { + + } + /**will be used to update the bot list on restart or reload of the world. + This way entity ids that are not bots are not stored in the list. + Generally the bots themselves will send the controller there ids when they load + into the world. The controller will then tell the bot its linked to the controller. + **/ + public void cleanList() + { + for(int i = 0;i<4;i++) + { + if(BotList[i] instanceof EntityRobot) + { + + } + else + { + BotList[i] = null; + } + } + + } + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + @Override + public boolean canReceiveFromSide(byte side) { + // TODO Auto-generated method stub + return true; + } + public boolean canUpdate() + { + return true; + } } From 0f051e6de9c796534ce7572ffe11c809569f1e37 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 06:57:14 -0400 Subject: [PATCH 038/115] added controler block --- minecraft/net/minecraft/src/mod_automation.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/minecraft/net/minecraft/src/mod_automation.java b/minecraft/net/minecraft/src/mod_automation.java index 93a2f3d5..7ad4d852 100644 --- a/minecraft/net/minecraft/src/mod_automation.java +++ b/minecraft/net/minecraft/src/mod_automation.java @@ -14,6 +14,8 @@ public class mod_automation extends NetworkMod { static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); public static int spawnItemId = configurationProperties(); public static Item spawnItem = (new net.minecraft.src.eui.robotics.ItemSpawn(spawnItemId)).setItemName("Bot"); + private static int BlockID = 3454; + public static Block machine = new net.minecraft.src.eui.robotics.BlockComp(BlockID).setBlockName("machine"); @Override public String getVersion() { // TODO change version on each update ;/ @@ -27,14 +29,19 @@ public class mod_automation extends NetworkMod { return spawnItemId; } @Override - public void load() { - //register - UniversalElectricity.registerAddon(this, "0.4.5"); + public void load() { MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); MinecraftForgeClient.preloadTexture("/eui/Items.png"); + //register + UniversalElectricity.registerAddon(this, "0.4.5"); + ModLoader.registerBlock(machine, net.minecraft.src.eui.robotics.ItemMachine.class); + //names................................................ ModLoader.addName((new ItemStack(spawnItem, 1, 0)), "Bot"); - //........... - ModLoader.registerEntityID(net.minecraft.src.eui.robotics.EntityShoeBot.class, "Bot", 101); + ModLoader.addName((new ItemStack(machine, 1, 0)), "Controler"); + //TileEntities.................................. + ModLoader.registerTileEntity(net.minecraft.src.eui.robotics.TileEntityComp.class, "controler"); + //Entities................... + ModLoader.registerEntityID(net.minecraft.src.eui.robotics.EntityShoeBot.class, "Bot", 101);//collector } @Override From 3c1a1730705b670777d4b5394dc89dc049fe1f09 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 07:00:49 -0400 Subject: [PATCH 039/115] . --- .../src/eui/robotics/EntityRobot.java | 3 +- .../src/pipes/api/ILiquidConsumer.java | 33 +++++++++++++++++++ .../src/pipes/api/ILiquidProducer.java | 28 ++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java create mode 100644 minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java index e772d681..ba7c1df1 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java +++ b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java @@ -27,6 +27,7 @@ public class EntityRobot extends EntityCreature { @Override public int getMaxHealth() { // TODO Auto-generated method stub - return 0; + return 1; } + } diff --git a/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java new file mode 100644 index 00000000..0f74db8d --- /dev/null +++ b/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java @@ -0,0 +1,33 @@ +package net.minecraft.src.eui.pipes.api; + + +public interface ILiquidConsumer +{ + /** + * onRecieveLiquid + * @param vol - The amount this block received. + * @param side - The side of the block in which the liquid came from. + * @parm type - The type of liquid being received + * @return vol - The amount liquid that can't be recieved + */ + public int onReceiveLiquid(int type, int vol, byte side); + + /** + * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics + * @param side - The side in which the electricity is coming from. + * @parm type - The type of liquid + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveLiquid(int type, byte side); + + /** + * @return Return the stored liquid of type in this consumer. + */ + public int getStoredLiquid(int type); + + /** + * @return Return the maximum amount of stored liquid this consumer can get. + */ + public int getLiquidCapacity(int type); + +} diff --git a/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java new file mode 100644 index 00000000..64873561 --- /dev/null +++ b/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java @@ -0,0 +1,28 @@ +package net.minecraft.src.eui.pipes.api; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface ILiquidProducer +{ + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param maxvol - The maximum vol or requested volume + * @param side - The side + * @return vol - Return a vol of liquid type that is produced + */ + public int onProduceLiquid(int type, int maxVol, int side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canProduceLiquid(int type, byte side); +} \ No newline at end of file From fbb7a56c6f4fddb1a8c73724087a4a012df47dd9 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 21:21:39 -0400 Subject: [PATCH 040/115] Code cleanup removed grinder code from git repo in favor of using hawks grinder. --- .../src/eui/TileEntityCondenser.java | 55 --- .../src/eui/grinder/ContainerGrinder.java | 87 ----- .../src/eui/grinder/GrinderRecipes.java | 74 ---- .../minecraft/src/eui/grinder/GuiGrinder.java | 46 --- .../src/eui/grinder/SlotGrinder.java | 60 --- .../src/eui/grinder/TileEntityGrinder.java | 357 ------------------ 6 files changed, 679 deletions(-) delete mode 100644 minecraft/net/minecraft/src/eui/TileEntityCondenser.java delete mode 100644 minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java delete mode 100644 minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java delete mode 100644 minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java delete mode 100644 minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java delete mode 100644 minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java diff --git a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java b/minecraft/net/minecraft/src/eui/TileEntityCondenser.java deleted file mode 100644 index 5d837c08..00000000 --- a/minecraft/net/minecraft/src/eui/TileEntityCondenser.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.minecraft.src.eui; - -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.pipes.api.ILiquidProducer; - -public class TileEntityCondenser extends TileEntityMachine implements ILiquidProducer { - int tickCount = 0; - int waterStored = 0; - int energyStored = 0; - @Override - public int onProduceLiquid(int type,int maxVol, int side) { - /**if(type == 1) - { - int tradeW = Math.min(maxVol, waterStored); - waterStored -= tradeW; - return tradeW; - }**/ - return 1; - } - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - } - - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.energyStored = par1NBTTagCompound.getInteger("energyStored"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - } - public void updateEntity() - { - if(energyStored > 100 && tickCount > 200 && waterStored < 10) - { - energyStored -= 100; - waterStored += 1; - tickCount = 0; - } - tickCount++; - } - @Override - public boolean canProduceLiquid(int type, byte side) { - if(type == 1) - { - return true; - } - return false; - } - - - - -} diff --git a/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java b/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java deleted file mode 100644 index f9827d4c..00000000 --- a/minecraft/net/minecraft/src/eui/grinder/ContainerGrinder.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.minecraft.src.eui.grinder; -import net.minecraft.src.*; - -public class ContainerGrinder extends Container -{ - private TileEntityGrinder grinder; - private int lastCookTime = 0; - private int lastBurnTime = 0; - private int lastItemBurnTime = 0; - - public ContainerGrinder(InventoryPlayer par1InventoryPlayer, TileEntityGrinder par2TileEntityGrinder) - { - this.grinder = par2TileEntityGrinder; - this.addSlot(new Slot(par2TileEntityGrinder, 0, 56, 17)); - //this.addSlot(new Slot(par2TileEntityGrinder, 1, 116, 35)); - this.addSlot(new SlotGrinder(par1InventoryPlayer.player, par2TileEntityGrinder, 1, 116, 35)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - /** - * Updates crafting matrix; called from onCraftMatrixChanged. Args: none - */ - public void updateCraftingResults() - { - super.updateCraftingResults(); - - for (int var1 = 0; var1 < this.crafters.size(); ++var1) - { - ICrafting var2 = (ICrafting)this.crafters.get(var1); - - if (this.lastCookTime != this.grinder.furnaceCookTime) - { - var2.updateCraftingInventoryInfo(this, 0, this.grinder.furnaceCookTime); - } - - if (this.lastBurnTime != this.grinder.GrinderRunTime) - { - var2.updateCraftingInventoryInfo(this, 1, this.grinder.GrinderRunTime); - } - } - - this.lastCookTime = this.grinder.furnaceCookTime; - this.lastBurnTime = this.grinder.GrinderRunTime; - } - - public void updateProgressBar(int par1, int par2) - { - if (par1 == 0) - { - this.grinder.furnaceCookTime = par2; - } - - if (par1 == 1) - { - this.grinder.GrinderRunTime = par2; - } - - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.grinder.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - - return null; - } -} diff --git a/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java b/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java deleted file mode 100644 index 90a8cd59..00000000 --- a/minecraft/net/minecraft/src/eui/grinder/GrinderRecipes.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.minecraft.src.eui.grinder; -import net.minecraft.src.*; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -public class GrinderRecipes -{ - private static final GrinderRecipes smeltingBase = new GrinderRecipes(); - - /** The list of smelting results. */ - private Map smeltingList = new HashMap(); - private Map metaSmeltingList = new HashMap(); - - /** - * Used to call methods addSmelting and getSmeltingResult. - */ - public static final GrinderRecipes smelting() - { - return smeltingBase; - } - - private GrinderRecipes() - { - - this.addSmelting(Item.coal.shiftedIndex, new ItemStack(mod_EUIndustry.coalNugget, 2,0)); - this.addSmelting(mod_EUIndustry.coalNugget.shiftedIndex,0, new ItemStack(mod_EUIndustry.coalNugget,2,1)); - this.addSmelting(mod_EUIndustry.coalNugget.shiftedIndex,1, new ItemStack(mod_EUIndustry.coalNugget,2,2)); - } - - /** - * Adds a smelting recipe. - */ - public void addSmelting(int par1, ItemStack par2ItemStack) - { - this.smeltingList.put(Integer.valueOf(par1), par2ItemStack); - } - - public Map getSmeltingList() - { - return this.smeltingList; - } - - /** - * Add a metadata-sensitive furnace recipe - * @param itemID The Item ID - * @param metadata The Item Metadata - * @param itemstack The ItemStack for the result - */ - public void addSmelting(int itemID, int metadata, ItemStack itemstack) - { - metaSmeltingList.put(Arrays.asList(itemID, metadata), itemstack); - } - - /** - * Used to get the resulting ItemStack form a source ItemStack - * @param item The Source ItemStack - * @return The result ItemStack - */ - public ItemStack getSmeltingResult(ItemStack item) - { - if (item == null) - { - return null; - } - ItemStack ret = (ItemStack)metaSmeltingList.get(Arrays.asList(item.itemID, item.getItemDamage())); - if (ret != null) - { - return ret; - } - return (ItemStack)smeltingList.get(Integer.valueOf(item.itemID)); - } -} diff --git a/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java b/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java deleted file mode 100644 index 8be9ef57..00000000 --- a/minecraft/net/minecraft/src/eui/grinder/GuiGrinder.java +++ /dev/null @@ -1,46 +0,0 @@ -package net.minecraft.src.eui.grinder; -import net.minecraft.src.*; -import org.lwjgl.opengl.GL11; - -public class GuiGrinder extends GuiContainer -{ - private TileEntityGrinder grinderInventory; - - public GuiGrinder(InventoryPlayer par1InventoryPlayer, TileEntityGrinder par2TileEntityGrinder) - { - super(new ContainerGrinder(par1InventoryPlayer, par2TileEntityGrinder)); - this.grinderInventory = par2TileEntityGrinder; - } - - /** - * Draw the foreground layer for the GuiContainer (everythin in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Coal Processor", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/GrinderGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - int var5 = (this.width - this.xSize) / 2; - int var6 = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); - int var7; - - if (this.grinderInventory.isBurning()) - { - var7 = this.grinderInventory.getBurnTimeRemainingScaled(12); - this.drawTexturedModalRect(var5 + 56, var6 + 36 + 12 - var7, 176, 12 - var7, 14, var7 + 2); - } - - var7 = this.grinderInventory.getCookProgressScaled(24); - this.drawTexturedModalRect(var5 + 79, var6 + 34, 176, 14, var7 + 1, 16); - } -} diff --git a/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java b/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java deleted file mode 100644 index feb08e7a..00000000 --- a/minecraft/net/minecraft/src/eui/grinder/SlotGrinder.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.minecraft.src.eui.grinder; -import net.minecraft.src.*; - -public class SlotGrinder extends Slot -{ - /** The player that is using the GUI where this slot resides. */ - private EntityPlayer thePlayer; - private int field_48437_f; - - public SlotGrinder(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5) - { - super(par2IInventory, par3, par4, par5); - this.thePlayer = par1EntityPlayer; - } - - /** - * Check if the stack is a valid item for this slot. Always true beside for the armor slots. - */ - public boolean isItemValid(ItemStack par1ItemStack) - { - return false; - } - - /** - * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new - * stack. - */ - public ItemStack decrStackSize(int par1) - { - if (this.getHasStack()) - { - this.field_48437_f += Math.min(par1, this.getStack().stackSize); - } - - return super.decrStackSize(par1); - } - - /** - * Called when the player picks up an item from an inventory slot - */ - public void onPickupFromSlot(ItemStack par1ItemStack) - { - this.func_48434_c(par1ItemStack); - super.onPickupFromSlot(par1ItemStack); - } - - protected void func_48435_a(ItemStack par1ItemStack, int par2) - { - this.field_48437_f += par2; - this.func_48434_c(par1ItemStack); - } - - protected void func_48434_c(ItemStack par1ItemStack) - { - par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_48437_f); - this.field_48437_f = 0; - ModLoader.takenFromFurnace(this.thePlayer, par1ItemStack); - - } -} diff --git a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java b/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java deleted file mode 100644 index 932f3173..00000000 --- a/minecraft/net/minecraft/src/eui/grinder/TileEntityGrinder.java +++ /dev/null @@ -1,357 +0,0 @@ -package net.minecraft.src.eui.grinder; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.electricity.IElectricUnit; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.forge.ISidedInventory; - -public class TileEntityGrinder extends TileEntityMachine implements IElectricUnit, IInventory -{ - - /** - * The ItemStacks that hold the items currently being used in the furnace - */ - private ItemStack[] furnaceItemStacks = new ItemStack[3]; - - /** The number of ticks that the furnace will keep burning */ - public int GrinderRunTime = 0; - /** The ammount of energy stored before turning into runtimer */ - public int energyStore = 0; - - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int currentItemBurnTime = 0; - - /** The number of ticks that the current item has been cooking for */ - public int furnaceCookTime = 0; - - /** - * Returns the number of slots in the inventory. - */ - public int getSizeInventory() - { - return this.furnaceItemStacks.length; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.furnaceItemStacks[par1]; - } - - /** - * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new - * stack. - */ - public ItemStack decrStackSize(int par1, int par2) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var3; - - if (this.furnaceItemStacks[par1].stackSize <= par2) - { - var3 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var3; - } - else - { - var3 = this.furnaceItemStacks[par1].splitStack(par2); - - if (this.furnaceItemStacks[par1].stackSize == 0) - { - this.furnaceItemStacks[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var2 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.furnaceItemStacks[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - - /** - * Returns the name of the inventory. - */ - public String getInvName() - { - return "container.furnace"; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.furnaceItemStacks.length) - { - this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - - this.GrinderRunTime = par1NBTTagCompound.getShort("BurnTime"); - this.furnaceCookTime = par1NBTTagCompound.getShort("CookTime"); - this.energyStore = par1NBTTagCompound.getInteger("energyStore"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("BurnTime", (short)this.GrinderRunTime); - par1NBTTagCompound.setShort("CookTime", (short)this.furnaceCookTime); - par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) - { - if (this.furnaceItemStacks[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.furnaceItemStacks[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - /** - * Returns an integer between 0 and the passed value representing how close the current item is to being completely - * cooked - */ - public int getCookProgressScaled(int par1) - { - return this.furnaceCookTime * par1 / 600; - } - - /** - * Returns an integer between 0 and the passed value representing how much burn time is left on the current fuel - * item, where 0 means that the item is exhausted and the passed value means that the item is fresh - */ - public int getBurnTimeRemainingScaled(int par1) - { - - return this.GrinderRunTime * par1 / 120; - } - - /** - * Returns true if the furnace is currently burning - */ - public boolean isBurning() - { - return this.GrinderRunTime > 0; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void updateEntity() - { - boolean var1 = this.GrinderRunTime > 0; - boolean var2 = false; - - - if (!this.worldObj.isRemote) - { - if(this.GrinderRunTime < 120) - { - int varE = (int) (this.energyStore / 50); - if(GrinderRunTime + varE >= 120) - { - this.GrinderRunTime = this.GrinderRunTime + varE; - this.energyStore = this.energyStore - (varE * 150); - } - } - if (this.GrinderRunTime > 0) - { - --this.GrinderRunTime; - } - if (this.isBurning() && this.canSmelt()) - { - ++this.furnaceCookTime; - - if (this.furnaceCookTime == 600) - { - this.furnaceCookTime = 0; - this.smeltItem(); - var2 = true; - } - } - else - { - this.furnaceCookTime = 0; - } - - } - - if (var2) - { - this.onInventoryChanged(); - } - } - - /** - * Returns true if the furnace can smelt an item, i.e. has a source item, destination stack isn't full, etc. - */ - private boolean canSmelt() - { - if (this.furnaceItemStacks[0] == null) - { - return false; - } - else - { - ItemStack var1 = GrinderRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); - if(var1 == null) - { - return false; - } - if(this.furnaceItemStacks[1] == null) - { - return true; - } - if (!this.furnaceItemStacks[1].isItemEqual(var1)) - { - return false; - } - int result = furnaceItemStacks[1].stackSize + var1.stackSize; - return (result <= getInventoryStackLimit() && result <= var1.getMaxStackSize()); - } - } - - /** - * Turn one item from the furnace source stack into the appropriate smelted item in the furnace result stack - */ - public void smeltItem() - { - if (this.canSmelt()) - { - ItemStack var1 = GrinderRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]); - if (this.furnaceItemStacks[1] == null) - { - this.furnaceItemStacks[1] = var1.copy(); - } - if (this.furnaceItemStacks[1].isItemEqual(var1)) - { - this.furnaceItemStacks[1].stackSize += var1.stackSize; - } - - if (this.furnaceItemStacks[0].getItem().func_46056_k()) - { - this.furnaceItemStacks[0] = new ItemStack(this.furnaceItemStacks[0].getItem().setFull3D()); - } - else - { - --this.furnaceItemStacks[0].stackSize; - } - - if (this.furnaceItemStacks[0].stackSize <= 0) - { - this.furnaceItemStacks[0] = null; - } - } - } - - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - public void openChest() {} - - public void closeChest() {} - - @Override - public boolean canReceiveFromSide(byte side) { - // TODO Auto-generated method stub - return true; - } - @Override - public float getVoltage() { - // TODO Auto-generated method stub - return 120; - } - - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - public float electricityRequest() - { - return Math.max(this.energyStore - 100,0); - - } - - - } From 728095f8ba0afa0da03e91bad28681819be1a870 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 21:23:41 -0400 Subject: [PATCH 041/115] Coded robot bas class code a ton of stuff into the base class for the robots. add basic functions for seting up task, collecting blocks,harvesting block, finding controler --- .../src/eui/robotics/EntityRobot.java | 266 +++++++++++++++++- 1 file changed, 263 insertions(+), 3 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java index ba7c1df1..f4b3dd76 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java +++ b/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java @@ -1,11 +1,151 @@ package net.minecraft.src.eui.robotics; +import java.util.List; + import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.Vector3; public class EntityRobot extends EntityCreature { - protected int attackStrength = 0; + public int attackStrength = 0; + public int battery = 0; //how long this but will run in, 2 = 20ticks + public int disabled = 0; //disabled timer + public int updateCount = 0; //used to control how fast the bot calls its updates + public boolean isDisabled = false;//is not updating + public boolean hasTask = false; //has a working task + public Vector3 taskLocation = null; //task location usual a block or item + int[] taskLoc = {0,0,0}; + public String currentTask = "none"; //type of task this bot can perform + public boolean isLinked = false; // is linked to a controller + public int[] linkFrq = {0,0,0}; //not so much a link number but controller location public EntityRobot(World par1World) { super(par1World); } + @Override + public void onEntityUpdate() + { + updateCount++; + //used for emping of bot or empty battery + isDisabled = true; + if(disabled <=0) + { + super.onEntityUpdate(); + isDisabled = false; + } + if(!isDisabled && updateCount >= 10) + { + updateCount =0; + battery += 2; //TODO remove after testing + --battery; + botUpdate(); + } + + } + //update function to control how fast the bot updates to reduce load + public void botUpdate() + { + if(taskLocation != null) + { + taskLoc[0] = taskLocation.intX(); + taskLoc[1] = taskLocation.intY(); + taskLoc[2] = taskLocation.intZ(); + } + //links the bot to a controler if it is not already linked + if(!isLinked) + { + this.setDead(); + /** + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("linking To Controler"); + TileEntityComp targetComp = this.getEmptyControler(this.posX,this.posY,this.posZ, 50); + if(targetComp != null){ + boolean added = targetComp.addBot(this); + if(added) + { + isLinked = true; + linkFrq[0] = targetComp.xCoord; + linkFrq[1] = targetComp.yCoord; + linkFrq[2] = targetComp.zCoord; + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("linked To Controler"); + } + } + **/ + } + else + { + //TODO add logic too tell controler this bot is alive, current task, hp, location,etc.... + TileEntity comp = worldObj.getBlockTileEntity(this.linkFrq[0], this.linkFrq[1], this.linkFrq[2]); + if(comp instanceof TileEntityComp) + { + Boolean linked = ((TileEntityComp) comp).addBot(this); + if(!linked) + { + this.isLinked = false; + } + } + else + { + this.isLinked = false; + } + } + } + /** + * used to find the closest controller + * @param par1 - x + * @param par3 - y + * @param par5 - z + * @param par7 - range in blocks + * @return the nearest controller + */ + public TileEntityComp getClosestControler(double par1, double par3, double par5, double par7) + { + double var9 = -1.0D; + TileEntityComp var11 = null; + List itemList = worldObj.getEntitiesWithinAABB(TileEntityComp.class, this.boundingBox.expand(par7, 4.0D, par7)); + for (int var12 = 0; var12 < itemList.size(); ++var12) + { + TileEntityComp var13 = (TileEntityComp)itemList.get(var12); + double var14 = var13.getDistanceFrom(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + /** + * used to find the closest controller with an empty slot mainly used to find and add a robot to the controller + * @param par1 - x + * @param par3 - y + * @param par5 - z + * @param par7 - range in blocks + * @return the nearest controller block with an empty control slot + */ + public TileEntityComp getEmptyControler(double par1, double par3, double par5, double par7) + { + double var9 = -1.0D; + TileEntityComp var11 = null; + List itemList = worldObj.getEntitiesWithinAABB(TileEntityComp.class, this.boundingBox.expand(par7, 4.0D, par7)); + for (int var12 = 0; var12 < itemList.size(); ++var12) + { + TileEntityComp var13 = (TileEntityComp)itemList.get(var12); + double var14 = var13.getDistanceFrom(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + for(int c = 0; c < 4; c++) + { + if(var13.BotList[c]==null) + { + var11 = var13; + } + } + var9 = var14; + } + } + + return var11; + } public boolean isAIEnabled() { return false; @@ -18,16 +158,136 @@ public class EntityRobot extends EntityCreature { public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) { super.writeEntityToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("batt", this.battery); + par1NBTTagCompound.setIntArray("linkFrq", this.linkFrq); + par1NBTTagCompound.setBoolean("linked", isLinked); + par1NBTTagCompound.setBoolean("hasTask", hasTask); + par1NBTTagCompound.setIntArray("taskLoc", taskLoc); } public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) { super.readEntityFromNBT(par1NBTTagCompound); + this.battery = par1NBTTagCompound.getInteger("batt"); + this.linkFrq = par1NBTTagCompound.getIntArray("linkFrq"); + this.isLinked = par1NBTTagCompound.getBoolean("linked"); + this.hasTask = par1NBTTagCompound.getBoolean("hasTask"); + taskLoc = par1NBTTagCompound.getIntArray("taskLoc"); + this.taskLocation = new Vector3(taskLoc[0],taskLoc[1],taskLoc[2]); } @Override public int getMaxHealth() { - // TODO Auto-generated method stub return 1; } - + public String getTaskType() { + return "n/a"; + + } + public boolean isIdle() { + // TODO Auto-generated method stub + return !hasTask; + } + public boolean setWorkTask(Vector3 taskLoc, String task) { + int x = taskLoc.intX(); + int y = taskLoc.intY(); + int z = taskLoc.intZ(); + Vector3 thisBot = new Vector3(this.posX,this.posY,this.posZ); + PathEntity PathToItem = this.worldObj.getEntityPathToXYZ(this, x, y, z, 30, true, false, false, true); + if(PathToItem != null){ + if(task.toLowerCase() == this.getTaskType().toLowerCase()) + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("TaskSet"); + this.taskLocation = taskLoc; + this.currentTask = task; + hasTask = true; + return true; + } + } + + return false; + } +public boolean harvest(Vector3 BlockLoc) +{ + int x = BlockLoc.intX(); + int y = BlockLoc.intY(); + int z = BlockLoc.intZ(); + Vector3 thisBot = new Vector3(this.posX,this.posY,this.posZ); + PathEntity PathToItem = this.worldObj.getEntityPathToXYZ(this, x, y, z, 30, true, false, false, true); + if(PathToItem != null){ + this.setPathToEntity(PathToItem); + this.moveSpeed = 1.0F; + if(thisBot.distanceTo(BlockLoc) < 2) + { + int blockTargetc = worldObj.getBlockId(x, y, z); + boolean harvested = worldObj.setBlock(x, y, z, 0); + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Harvesting Block "+blockTargetc); + if(blockTargetc > 0) + { + EntityItem dropedItem = new EntityItem(worldObj, x, y - 0.3D, z, new ItemStack(blockTargetc,1,1)); + worldObj.spawnEntityInWorld(dropedItem); + } + return harvested; + } + } + return false; +} +public EntityItem findClosestItem(double par1, double par3, double par5, double par7) +{ + double var9 = -1.0D; + EntityItem var11 = null; + List itemList = worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(par7, 4.0D, par7)); + for (int var12 = 0; var12 < itemList.size(); ++var12) + { + EntityItem var13 = (EntityItem)itemList.get(var12); + double var14 = var13.getDistanceSq(par1, par3, par5); + + if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) + { + var9 = var14; + var11 = var13; + } + } + + return var11; +} +public boolean collectItem(EntityItem targetItem) +{ + if(targetItem == null) + { + targetItem = findClosestItem(this.posX, this.posY, this.posZ,30); + } + else + { + if(!targetItem.isEntityAlive()) + { + targetItem = null; + } + } + if(targetItem != null) + { + + PathEntity PathToItem = this.worldObj.getPathEntityToEntity(this, targetItem, 30, true, false, false, true); + if(hasPath()){ + this.setPathToEntity(PathToItem); + this.moveSpeed = 1.0F; + if(targetItem.getDistanceSq(this.posX,this.posY,this.posZ) < 2) + { + targetItem.setDead(); + //TODO add item to inventory + targetItem = null; + } + } + else + { + this.moveSpeed = 0.23F; + } + } + return false; +} +public void clearTask() { + this.taskLocation = null; + this.currentTask = "none"; + this.hasTask = false; + +} } From 965e482e1302c4dd991d5bc7be5ce62da3f1eb13 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 21:24:06 -0400 Subject: [PATCH 042/115] setup shoeBot to do basic harvesting --- .../src/eui/robotics/EntityShoeBot.java | 91 +++++++------------ 1 file changed, 33 insertions(+), 58 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java index 0f23cfc8..944c1878 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java +++ b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java @@ -2,74 +2,46 @@ package net.minecraft.src.eui.robotics; import java.util.List; import net.minecraft.src.*; +import net.minecraft.src.universalelectricity.Vector3; public class EntityShoeBot extends EntityRobot { EntityItem targetItem = null; public EntityShoeBot(World par1World) { super(par1World); + this.setSize(0.6F, 0.5F); this.moveSpeed = 0.23F; - // this.tasks.addTask(1, new EntityAIWander(this, this.moveSpeed)); this.texture = "/mobs/char.png"; } - public float getBlockPathWeight(int par1, int par2, int par3) - { - return 0.5F + this.worldObj.getLightBrightness(par1, par2, par3); - } @Override - public void onEntityUpdate() + public void botUpdate() { - super.onEntityUpdate(); - - if(targetItem == null) - { - targetItem = findClosestItem(this.posX, this.posY, this.posZ,30); - } - else - { - if(!targetItem.isEntityAlive()) - { - targetItem = null; - } - } - if(targetItem != null) - { - - PathEntity PathToItem = this.worldObj.getPathEntityToEntity(this, targetItem, 30, true, false, false, true); - if(hasPath()){ - this.setPathToEntity(PathToItem); - this.moveSpeed = 1.0F; - if(targetItem.getDistanceSq(this.posX,this.posY,this.posZ) < 1.5) - { - targetItem.setDead(); - targetItem = null; - } - } - else - { - this.moveSpeed = 0.23F; - } - } - - } - public EntityItem findClosestItem(double par1, double par3, double par5, double par7) - { - double var9 = -1.0D; - EntityItem var11 = null; - List itemList = worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(par7, 4.0D, par7)); - for (int var12 = 0; var12 < itemList.size(); ++var12) - { - EntityItem var13 = (EntityItem)itemList.get(var12); - double var14 = var13.getDistanceSq(par1, par3, par5); - - if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) - { - var9 = var14; - var11 = var13; - } - } - - return var11; + super.botUpdate(); + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("CC"); + if(hasTask) + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("resuming task"); + if(this.currentTask == this.getTaskType() && this.taskLocation != null) + { + boolean harDone = harvest(this.taskLocation); + if(harDone) + { + clearTask(); + } + } + else + { + clearTask(); + } + + } + else + { + //requestTask + } + } + + @Override public int getMaxHealth() { // TODO Auto-generated method stub @@ -80,5 +52,8 @@ public class EntityShoeBot extends EntityRobot { // TODO Auto-generated method stub return "BlockEater"; } - + public String getTaskType() { + return "harvest"; + + } } From bd4fb9ccd2c8661ec2ed43de6693ce7346132f7f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 21:24:46 -0400 Subject: [PATCH 043/115] recoded control to use bots setup controler to use bots for task rather than mine itself. --- .../src/eui/robotics/TileEntityComp.java | 115 +++++++++++++++--- 1 file changed, 95 insertions(+), 20 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java index 0d3a18e6..170388ae 100644 --- a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java +++ b/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java @@ -12,6 +12,8 @@ import net.minecraft.src.EntityPlayer; import net.minecraft.src.ItemStack; import net.minecraft.src.Material; import net.minecraft.src.ModLoader; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; import net.minecraft.src.TileEntity; import net.minecraft.src.universalelectricity.Vector3; import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; @@ -28,12 +30,26 @@ public class TileEntityComp extends TileEntityElectricUnit { public void onUpdate(float watts, float voltage, byte side) { ++updateCount; - - + cleanList(); + for(int b =0;b<4;b++) + { + if(BotList[b] ==null) + { + //spawn bot for testing + EntityShoeBot bot = new EntityShoeBot(worldObj); + bot.setLocationAndAngles(this.xCoord, this.yCoord+1, this.zCoord, 10, 10); + bot.linkFrq[0]=this.xCoord; + bot.linkFrq[1]=this.yCoord; + bot.linkFrq[2]=this.zCoord; + bot.isLinked = true; + worldObj.spawnEntityInWorld(bot); + BotList[b]=bot; + } + } if(updateCount >= 100 && worldObj.checkChunksExist(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1)) { ++scanCount; - if(scanCount < 10){hasScanned = true;}else{scanCount = 0;} + if(scanCount < 10){hasScanned = true;}else{scanCount = 0;hasScanned=false;} Vector3 thisBlock = new Vector3(this.xCoord,this.yCoord,this.zCoord); updateCount = 0; Vector3 targetVec = findBlock(thisBlock,Block.leaves,2,hasScanned); @@ -48,24 +64,49 @@ public class TileEntityComp extends TileEntityElectricUnit { int Targetz = targetVec.intZ(); ModLoader.getMinecraftInstance().thePlayer.addChatMessage("rb:"+Targetx+"X:"+Targety+"Y:"+Targetz+"Z"); int blockTargetc = worldObj.getBlockId(Targetx, Targety, Targetz); - worldObj.setBlock(Targetx, Targety, Targetz, 0); - - if(blockTargetc > 0) - { - EntityItem dropedItem = new EntityItem(worldObj, Targetx, Targety - 0.3D, Targetz, new ItemStack(blockTargetc,1,1)); - worldObj.spawnEntityInWorld(dropedItem); - } + boolean taskreceived = sendTask(targetVec,"harvest"); + if(taskreceived) + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Harvest Task sent to robot"); + } + else + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Task not sent"); + } } else { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("N/A");//nothing found froms scan + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("N/A");//nothing found from scan scanCount = 0; - } - - //resets scan to zero location every 10 scans + } } } + /** + * + * @param taskLoc - location of the task + * @param task - what is the task harvest, replace, mine, build + * @param bot - bot being given the task + * @return whether or not the task was received + */ + public boolean sendTask(Vector3 taskLoc,String task) + { + for(int i = 0;i < BotList.length;i++) + { + if(BotList[i] instanceof EntityRobot) + { + String botTaskMain = BotList[i].getTaskType(); + if(botTaskMain.toLowerCase() == task.toLowerCase()) + { + if(BotList[i].isIdle()) + { + return BotList[i].setWorkTask(taskLoc,task); + } + } + } + } + return false; + } /** * * @param startSpot - center of the scan radius @@ -93,7 +134,7 @@ public class TileEntityComp extends TileEntityElectricUnit { Startz += range; Starty += range; int pauseCount = 0; - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("starting Scan For " + block.getBlockName()); + //ModLoader.getMinecraftInstance().thePlayer.addChatMessage("starting Scan For " + block.getBlockName()); int y = Starty; for(int iY=0;iY < (distanceY*2);iY++) { @@ -110,11 +151,11 @@ public class TileEntityComp extends TileEntityElectricUnit { { int blockTargetID = worldObj.getBlockId(x, y, z); - System.out.println("BlockAt:"+x+"x:"+y+"y:"+z+"z:"+blockTargetID+"ID"); + //System.out.println("BlockAt:"+x+"x:"+y+"y:"+z+"z:"+blockTargetID+"ID"); if(blockTargetID == block.blockID) { Vector3 targetBlock = new Vector3(x,y,z); - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Target Block Found"); + //ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Target Block Found"); return targetBlock; } @@ -137,9 +178,25 @@ public class TileEntityComp extends TileEntityElectricUnit { return BotList; } - public void addBot(EntityRobot bot) + public boolean addBot(EntityRobot bot) { - + for(int i = 0; i < 4; i++) + { + if(BotList[i] == bot) + { + return true; + } + } + for(int i = 0; i < 4; i++) + { + if(BotList[i] == null) + { + ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Bot Added"); + BotList[i] = bot; + return true; + } + } + return false; } /**will be used to update the bot list on restart or reload of the world. This way entity ids that are not bots are not stored in the list. @@ -152,7 +209,13 @@ public class TileEntityComp extends TileEntityElectricUnit { { if(BotList[i] instanceof EntityRobot) { - + EntityRobot Bot = BotList[i]; + Vector3 thisLoc = new Vector3(this.xCoord,this.yCoord,this.zCoord); + Vector3 botFrq = new Vector3(Bot.linkFrq[0],Bot.linkFrq[1],Bot.linkFrq[2]); + if(!botFrq.isEqual(thisLoc)) + { + BotList[i] = null; + } } else { @@ -175,4 +238,16 @@ public class TileEntityComp extends TileEntityElectricUnit { { return true; } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + } } From b511034970781bc7a66246e74542e9af849d2d5b Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 22 Jul 2012 21:27:00 -0400 Subject: [PATCH 044/115] update pics --- minecraft/net/minecraft/src/eui/Items.png | Bin 31087 -> 32135 bytes minecraft/net/minecraft/src/eui/blocks.png | Bin 82859 -> 22475 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/Items.png b/minecraft/net/minecraft/src/eui/Items.png index f9e349f6a637ad2ebb2cde63a39851bb391f4e8c..e8af1a861dc83ec5304963af9196a04091edfe9f 100644 GIT binary patch literal 32135 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 |4`h(z^zl`9Geu59lXLB5t|wqdy>1i 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 literal 31087 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 diff --git a/minecraft/net/minecraft/src/eui/blocks.png b/minecraft/net/minecraft/src/eui/blocks.png index 68e8b35bc101be339825948e7262858f554a78ca..a2286ff26383c240c22524ae12cc3f7f4243f14e 100644 GIT binary patch delta 19942 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 z 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%0Ak2Tow`!sF85ayM7cskMM<_^{? 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 From e55434364316b08c3e2ead69ee674c1ff1c5f757 Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 23 Jul 2012 12:32:20 -0500 Subject: [PATCH 045/115] Spelling fixes. --- minecraft/net/minecraft/src/mod_automation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/minecraft/net/minecraft/src/mod_automation.java b/minecraft/net/minecraft/src/mod_automation.java index 7ad4d852..26708ecb 100644 --- a/minecraft/net/minecraft/src/mod_automation.java +++ b/minecraft/net/minecraft/src/mod_automation.java @@ -37,9 +37,9 @@ public class mod_automation extends NetworkMod { ModLoader.registerBlock(machine, net.minecraft.src.eui.robotics.ItemMachine.class); //names................................................ ModLoader.addName((new ItemStack(spawnItem, 1, 0)), "Bot"); - ModLoader.addName((new ItemStack(machine, 1, 0)), "Controler"); + ModLoader.addName((new ItemStack(machine, 1, 0)), "Controller"); //TileEntities.................................. - ModLoader.registerTileEntity(net.minecraft.src.eui.robotics.TileEntityComp.class, "controler"); + ModLoader.registerTileEntity(net.minecraft.src.eui.robotics.TileEntityComp.class, "controller"); //Entities................... ModLoader.registerEntityID(net.minecraft.src.eui.robotics.EntityShoeBot.class, "Bot", 101);//collector From a87c6510a780c8d89f26e1fd32fcd02752359715 Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 23 Jul 2012 12:34:33 -0500 Subject: [PATCH 046/115] Imported class. "Roses are red, violets are blue, remember to import, or you'll just have to type!"-Headfirst Java --- minecraft/net/minecraft/src/eui/robotics/BlockComp.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java index 0ae7a86b..2caa052f 100644 --- a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java +++ b/minecraft/net/minecraft/src/eui/robotics/BlockComp.java @@ -11,8 +11,9 @@ import net.minecraft.src.eui.boiler.TileEntityBoiler; import net.minecraft.src.eui.burner.TileEntityFireBox; import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.universalelectricity.Vector3; +import net.minecraft.src.universalelectricity.extend.*; -public class BlockComp extends net.minecraft.src.universalelectricity.extend.BlockMachine { +public class BlockComp extends BlockMachine { public BlockComp(int par1) { super("RobotMachine", par1, Material.iron); From eb540c69f58f416363d5b5f6933b519c4eac4b7a Mon Sep 17 00:00:00 2001 From: AJ Fleming Date: Mon, 23 Jul 2012 12:36:41 -0500 Subject: [PATCH 047/115] Simplified exactly 3 things. --- .../net/minecraft/src/eui/robotics/EntityShoeBot.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java index 944c1878..43de303c 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java +++ b/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java @@ -16,10 +16,11 @@ public class EntityShoeBot extends EntityRobot { public void botUpdate() { super.botUpdate(); - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("CC"); + EntityPlayer person = Modloader.getMinecraftInstance().thePlayer; + person.addChatMessage("CC"); if(hasTask) { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("resuming task"); + person.addChatMessage("resuming task"); if(this.currentTask == this.getTaskType() && this.taskLocation != null) { boolean harDone = harvest(this.taskLocation); @@ -50,7 +51,7 @@ public class EntityShoeBot extends EntityRobot { public String getRenderedName() { // TODO Auto-generated method stub - return "BlockEater"; + return "Harvester Bot"; } public String getTaskType() { return "harvest"; From 5a4c49b0ccd2f4a8013c86ffb0979af976df5813 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 21 Aug 2012 16:05:07 -0400 Subject: [PATCH 048/115] Pre for update.Archived 1.2.5 Code --- .../src => 1.2.5}/eui/BlockMachine.java | 10 +- .../src => 1.2.5}/eui/ItemCoalFuel.java | 0 .../src => 1.2.5}/eui/ItemMachine.java | 0 .../src => 1.2.5}/eui/ItemParts.java | 0 .../src => 1.2.5}/eui/TileEntityMachine.java | 0 .../src => 1.2.5}/eui/TileEntityNuller.java | 0 .../src => 1.2.5}/eui/api/IHeatConsumer.java | 0 .../src => 1.2.5}/eui/api/IHeatProducer.java | 0 .../src => 1.2.5}/eui/api/ISteamConsumer.java | 0 .../src => 1.2.5}/eui/api/ISteamProducer.java | 0 .../src => 1.2.5}/eui/api/IWaterConsumer.java | 0 .../src => 1.2.5}/eui/api/IWaterProducer.java | 0 .../eui/boiler/ContainerBoiler.java | 0 .../src => 1.2.5}/eui/boiler/GuiBoiler.java | 0 1.2.5/eui/boiler/ModelTank.java | 155 +++++++++++ 1.2.5/eui/boiler/RenderBoiler.java | 27 ++ .../eui/boiler/ShareResources.java | 0 .../src => 1.2.5}/eui/boiler/SlotBoiler.java | 0 .../eui/boiler/TileEntityBoiler.java | 0 .../eui/burner/ContainerFireBox.java | 0 1.2.5/eui/burner/FurnaceModel.java | 82 ++++++ .../src => 1.2.5}/eui/burner/GUIFireBox.java | 0 1.2.5/eui/burner/RenderFurnace.java | 27 ++ .../eui/burner/TileEntityFireBox.java | 0 .../src => 1.2.5}/eui/robotics/BlockComp.java | 0 .../src => 1.2.5}/eui/robotics/BlockRail.java | 0 .../eui/robotics/EntityDigger.java | 0 .../eui/robotics/EntityRobot.java | 29 ++- .../eui/robotics/EntityShoeBot.java | 0 .../eui/robotics/Entitycollector.java | 0 .../eui/robotics/ItemMachine.java | 0 .../src => 1.2.5}/eui/robotics/ItemSpawn.java | 0 .../eui/robotics/ModelModelShoeBot.java | 0 .../eui/robotics/RenderShoeBot.java | 0 .../eui/robotics/TileEntityComp.java | 59 ++++- .../eui/turbine/ContainerGenerator.java | 0 1.2.5/eui/turbine/EngineSmallModel.java | 242 ++++++++++++++++++ .../eui/turbine/GUIGenerator.java | 0 1.2.5/eui/turbine/RenderSteamEngine.java | 27 ++ .../eui/turbine/TileEntityGenerator.java | 0 .../src => 1.2.5}/mod_EUIndustry.java | 10 +- .../src => 1.2.5}/mod_automation.java | 0 minecraft/net/minecraft/src/eui/BoilerGui.png | Bin 1876 -> 0 bytes .../net/minecraft/src/eui/CopperWire.png | Bin 3196 -> 0 bytes .../net/minecraft/src/eui/DefaultPipe.png | Bin 770 -> 0 bytes .../net/minecraft/src/eui/GrinderGUI.png | Bin 1284 -> 0 bytes minecraft/net/minecraft/src/eui/Items.png | Bin 32135 -> 0 bytes minecraft/net/minecraft/src/eui/SteamGUI.png | Bin 3762 -> 0 bytes minecraft/net/minecraft/src/eui/SteamPipe.png | Bin 3196 -> 0 bytes minecraft/net/minecraft/src/eui/WaterPipe.png | Bin 3192 -> 0 bytes minecraft/net/minecraft/src/eui/blocks.png | Bin 22475 -> 0 bytes .../src/pipes/api/ILiquidConsumer.java | 33 --- .../src/pipes/api/ILiquidProducer.java | 28 -- 53 files changed, 654 insertions(+), 75 deletions(-) rename {minecraft/net/minecraft/src => 1.2.5}/eui/BlockMachine.java (99%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/ItemCoalFuel.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/ItemMachine.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/ItemParts.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/TileEntityMachine.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/TileEntityNuller.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/IHeatConsumer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/IHeatProducer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/ISteamConsumer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/ISteamProducer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/IWaterConsumer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/api/IWaterProducer.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/boiler/ContainerBoiler.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/boiler/GuiBoiler.java (100%) create mode 100644 1.2.5/eui/boiler/ModelTank.java create mode 100644 1.2.5/eui/boiler/RenderBoiler.java rename {minecraft/net/minecraft/src => 1.2.5}/eui/boiler/ShareResources.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/boiler/SlotBoiler.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/boiler/TileEntityBoiler.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/burner/ContainerFireBox.java (100%) create mode 100644 1.2.5/eui/burner/FurnaceModel.java rename {minecraft/net/minecraft/src => 1.2.5}/eui/burner/GUIFireBox.java (100%) create mode 100644 1.2.5/eui/burner/RenderFurnace.java rename {minecraft/net/minecraft/src => 1.2.5}/eui/burner/TileEntityFireBox.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/BlockComp.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/BlockRail.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/EntityDigger.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/EntityRobot.java (93%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/EntityShoeBot.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/Entitycollector.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/ItemMachine.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/ItemSpawn.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/ModelModelShoeBot.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/RenderShoeBot.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/robotics/TileEntityComp.java (84%) rename {minecraft/net/minecraft/src => 1.2.5}/eui/turbine/ContainerGenerator.java (100%) create mode 100644 1.2.5/eui/turbine/EngineSmallModel.java rename {minecraft/net/minecraft/src => 1.2.5}/eui/turbine/GUIGenerator.java (100%) create mode 100644 1.2.5/eui/turbine/RenderSteamEngine.java rename {minecraft/net/minecraft/src => 1.2.5}/eui/turbine/TileEntityGenerator.java (100%) rename {minecraft/net/minecraft/src => 1.2.5}/mod_EUIndustry.java (91%) rename {minecraft/net/minecraft/src => 1.2.5}/mod_automation.java (100%) delete mode 100644 minecraft/net/minecraft/src/eui/BoilerGui.png delete mode 100644 minecraft/net/minecraft/src/eui/CopperWire.png delete mode 100644 minecraft/net/minecraft/src/eui/DefaultPipe.png delete mode 100644 minecraft/net/minecraft/src/eui/GrinderGUI.png delete mode 100644 minecraft/net/minecraft/src/eui/Items.png delete mode 100644 minecraft/net/minecraft/src/eui/SteamGUI.png delete mode 100644 minecraft/net/minecraft/src/eui/SteamPipe.png delete mode 100644 minecraft/net/minecraft/src/eui/WaterPipe.png delete mode 100644 minecraft/net/minecraft/src/eui/blocks.png delete mode 100644 minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java delete mode 100644 minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java diff --git a/minecraft/net/minecraft/src/eui/BlockMachine.java b/1.2.5/eui/BlockMachine.java similarity index 99% rename from minecraft/net/minecraft/src/eui/BlockMachine.java rename to 1.2.5/eui/BlockMachine.java index 26216049..6824fa44 100644 --- a/minecraft/net/minecraft/src/eui/BlockMachine.java +++ b/1.2.5/eui/BlockMachine.java @@ -351,14 +351,20 @@ else if(entityBox instanceof TileEntityBoiler) // TODO Auto-generated method stub return "/eui/blocks.png"; } - @Override + @Override public boolean isOpaqueCube() { return false; } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override public int getRenderType() { - return 0; + return -1; } public void addCreativeItems(ArrayList itemList) { itemList.add(new ItemStack(this, 1,1));//boiler diff --git a/minecraft/net/minecraft/src/eui/ItemCoalFuel.java b/1.2.5/eui/ItemCoalFuel.java similarity index 100% rename from minecraft/net/minecraft/src/eui/ItemCoalFuel.java rename to 1.2.5/eui/ItemCoalFuel.java diff --git a/minecraft/net/minecraft/src/eui/ItemMachine.java b/1.2.5/eui/ItemMachine.java similarity index 100% rename from minecraft/net/minecraft/src/eui/ItemMachine.java rename to 1.2.5/eui/ItemMachine.java diff --git a/minecraft/net/minecraft/src/eui/ItemParts.java b/1.2.5/eui/ItemParts.java similarity index 100% rename from minecraft/net/minecraft/src/eui/ItemParts.java rename to 1.2.5/eui/ItemParts.java diff --git a/minecraft/net/minecraft/src/eui/TileEntityMachine.java b/1.2.5/eui/TileEntityMachine.java similarity index 100% rename from minecraft/net/minecraft/src/eui/TileEntityMachine.java rename to 1.2.5/eui/TileEntityMachine.java diff --git a/minecraft/net/minecraft/src/eui/TileEntityNuller.java b/1.2.5/eui/TileEntityNuller.java similarity index 100% rename from minecraft/net/minecraft/src/eui/TileEntityNuller.java rename to 1.2.5/eui/TileEntityNuller.java diff --git a/minecraft/net/minecraft/src/eui/api/IHeatConsumer.java b/1.2.5/eui/api/IHeatConsumer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/IHeatConsumer.java rename to 1.2.5/eui/api/IHeatConsumer.java diff --git a/minecraft/net/minecraft/src/eui/api/IHeatProducer.java b/1.2.5/eui/api/IHeatProducer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/IHeatProducer.java rename to 1.2.5/eui/api/IHeatProducer.java diff --git a/minecraft/net/minecraft/src/eui/api/ISteamConsumer.java b/1.2.5/eui/api/ISteamConsumer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/ISteamConsumer.java rename to 1.2.5/eui/api/ISteamConsumer.java diff --git a/minecraft/net/minecraft/src/eui/api/ISteamProducer.java b/1.2.5/eui/api/ISteamProducer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/ISteamProducer.java rename to 1.2.5/eui/api/ISteamProducer.java diff --git a/minecraft/net/minecraft/src/eui/api/IWaterConsumer.java b/1.2.5/eui/api/IWaterConsumer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/IWaterConsumer.java rename to 1.2.5/eui/api/IWaterConsumer.java diff --git a/minecraft/net/minecraft/src/eui/api/IWaterProducer.java b/1.2.5/eui/api/IWaterProducer.java similarity index 100% rename from minecraft/net/minecraft/src/eui/api/IWaterProducer.java rename to 1.2.5/eui/api/IWaterProducer.java diff --git a/minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java b/1.2.5/eui/boiler/ContainerBoiler.java similarity index 100% rename from minecraft/net/minecraft/src/eui/boiler/ContainerBoiler.java rename to 1.2.5/eui/boiler/ContainerBoiler.java diff --git a/minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java b/1.2.5/eui/boiler/GuiBoiler.java similarity index 100% rename from minecraft/net/minecraft/src/eui/boiler/GuiBoiler.java rename to 1.2.5/eui/boiler/GuiBoiler.java diff --git a/1.2.5/eui/boiler/ModelTank.java b/1.2.5/eui/boiler/ModelTank.java new file mode 100644 index 00000000..5ecc3dcf --- /dev/null +++ b/1.2.5/eui/boiler/ModelTank.java @@ -0,0 +1,155 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package net.minecraft.src.eui.boiler; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //fields + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank() + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + generalRender(f5); + } + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.2.5/eui/boiler/RenderBoiler.java b/1.2.5/eui/boiler/RenderBoiler.java new file mode 100644 index 00000000..8a2e523a --- /dev/null +++ b/1.2.5/eui/boiler/RenderBoiler.java @@ -0,0 +1,27 @@ +package net.minecraft.src.eui.boiler; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + + public RenderBoiler() + { + model = new ModelTank(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName("/eui/tankTexture.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.generalRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/boiler/ShareResources.java b/1.2.5/eui/boiler/ShareResources.java similarity index 100% rename from minecraft/net/minecraft/src/eui/boiler/ShareResources.java rename to 1.2.5/eui/boiler/ShareResources.java diff --git a/minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java b/1.2.5/eui/boiler/SlotBoiler.java similarity index 100% rename from minecraft/net/minecraft/src/eui/boiler/SlotBoiler.java rename to 1.2.5/eui/boiler/SlotBoiler.java diff --git a/minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java b/1.2.5/eui/boiler/TileEntityBoiler.java similarity index 100% rename from minecraft/net/minecraft/src/eui/boiler/TileEntityBoiler.java rename to 1.2.5/eui/boiler/TileEntityBoiler.java diff --git a/minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java b/1.2.5/eui/burner/ContainerFireBox.java similarity index 100% rename from minecraft/net/minecraft/src/eui/burner/ContainerFireBox.java rename to 1.2.5/eui/burner/ContainerFireBox.java diff --git a/1.2.5/eui/burner/FurnaceModel.java b/1.2.5/eui/burner/FurnaceModel.java new file mode 100644 index 00000000..517baee6 --- /dev/null +++ b/1.2.5/eui/burner/FurnaceModel.java @@ -0,0 +1,82 @@ +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package net.minecraft.src.eui.burner; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class FurnaceModel extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public FurnaceModel() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(256, 256); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(256, 256); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(256, 256); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 0); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(256, 256); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/minecraft/net/minecraft/src/eui/burner/GUIFireBox.java b/1.2.5/eui/burner/GUIFireBox.java similarity index 100% rename from minecraft/net/minecraft/src/eui/burner/GUIFireBox.java rename to 1.2.5/eui/burner/GUIFireBox.java diff --git a/1.2.5/eui/burner/RenderFurnace.java b/1.2.5/eui/burner/RenderFurnace.java new file mode 100644 index 00000000..a5d83e84 --- /dev/null +++ b/1.2.5/eui/burner/RenderFurnace.java @@ -0,0 +1,27 @@ +package net.minecraft.src.eui.burner; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private FurnaceModel model; + + public RenderFurnace() + { + model = new FurnaceModel(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName("/eui/Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java b/1.2.5/eui/burner/TileEntityFireBox.java similarity index 100% rename from minecraft/net/minecraft/src/eui/burner/TileEntityFireBox.java rename to 1.2.5/eui/burner/TileEntityFireBox.java diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockComp.java b/1.2.5/eui/robotics/BlockComp.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/BlockComp.java rename to 1.2.5/eui/robotics/BlockComp.java diff --git a/minecraft/net/minecraft/src/eui/robotics/BlockRail.java b/1.2.5/eui/robotics/BlockRail.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/BlockRail.java rename to 1.2.5/eui/robotics/BlockRail.java diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityDigger.java b/1.2.5/eui/robotics/EntityDigger.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/EntityDigger.java rename to 1.2.5/eui/robotics/EntityDigger.java diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java b/1.2.5/eui/robotics/EntityRobot.java similarity index 93% rename from minecraft/net/minecraft/src/eui/robotics/EntityRobot.java rename to 1.2.5/eui/robotics/EntityRobot.java index f4b3dd76..729a2a44 100644 --- a/minecraft/net/minecraft/src/eui/robotics/EntityRobot.java +++ b/1.2.5/eui/robotics/EntityRobot.java @@ -22,12 +22,15 @@ public class EntityRobot extends EntityCreature { @Override public void onEntityUpdate() { + super.onEntityUpdate(); + if(!worldObj.isRemote) + { updateCount++; //used for emping of bot or empty battery isDisabled = true; if(disabled <=0) { - super.onEntityUpdate(); + isDisabled = false; } if(!isDisabled && updateCount >= 10) @@ -37,6 +40,7 @@ public class EntityRobot extends EntityCreature { --battery; botUpdate(); } + } } //update function to control how fast the bot updates to reduce load @@ -82,7 +86,7 @@ public class EntityRobot extends EntityCreature { } else { - this.isLinked = false; + this.isLinked = true; } } } @@ -216,21 +220,38 @@ public boolean harvest(Vector3 BlockLoc) if(PathToItem != null){ this.setPathToEntity(PathToItem); this.moveSpeed = 1.0F; - if(thisBot.distanceTo(BlockLoc) < 2) + if(thisBot.distanceTo(BlockLoc) < 4) { int blockTargetc = worldObj.getBlockId(x, y, z); boolean harvested = worldObj.setBlock(x, y, z, 0); + if(blockTargetc ==0) + { + harvested = true; + } ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Harvesting Block "+blockTargetc); - if(blockTargetc > 0) + if(blockTargetc > 0 && harvested) { EntityItem dropedItem = new EntityItem(worldObj, x, y - 0.3D, z, new ItemStack(blockTargetc,1,1)); worldObj.spawnEntityInWorld(dropedItem); + if(getController() != null) + { + getController().ClearFromList(BlockLoc); + } } return harvested; } } return false; } +public TileEntityComp getController() +{ + TileEntity comp = worldObj.getBlockTileEntity(this.linkFrq[0], this.linkFrq[1], this.linkFrq[2]); + if(comp instanceof TileEntityComp) + { + return (TileEntityComp) comp; + } + return null; +} public EntityItem findClosestItem(double par1, double par3, double par5, double par7) { double var9 = -1.0D; diff --git a/minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java b/1.2.5/eui/robotics/EntityShoeBot.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/EntityShoeBot.java rename to 1.2.5/eui/robotics/EntityShoeBot.java diff --git a/minecraft/net/minecraft/src/eui/robotics/Entitycollector.java b/1.2.5/eui/robotics/Entitycollector.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/Entitycollector.java rename to 1.2.5/eui/robotics/Entitycollector.java diff --git a/minecraft/net/minecraft/src/eui/robotics/ItemMachine.java b/1.2.5/eui/robotics/ItemMachine.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/ItemMachine.java rename to 1.2.5/eui/robotics/ItemMachine.java diff --git a/minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java b/1.2.5/eui/robotics/ItemSpawn.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/ItemSpawn.java rename to 1.2.5/eui/robotics/ItemSpawn.java diff --git a/minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java b/1.2.5/eui/robotics/ModelModelShoeBot.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/ModelModelShoeBot.java rename to 1.2.5/eui/robotics/ModelModelShoeBot.java diff --git a/minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java b/1.2.5/eui/robotics/RenderShoeBot.java similarity index 100% rename from minecraft/net/minecraft/src/eui/robotics/RenderShoeBot.java rename to 1.2.5/eui/robotics/RenderShoeBot.java diff --git a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java b/1.2.5/eui/robotics/TileEntityComp.java similarity index 84% rename from minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java rename to 1.2.5/eui/robotics/TileEntityComp.java index 170388ae..5fb822d3 100644 --- a/minecraft/net/minecraft/src/eui/robotics/TileEntityComp.java +++ b/1.2.5/eui/robotics/TileEntityComp.java @@ -2,6 +2,7 @@ package net.minecraft.src.eui.robotics; import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import net.minecraft.client.Minecraft; @@ -27,8 +28,11 @@ public class TileEntityComp extends TileEntityElectricUnit { int lastScanXDif=0; int lastScanYDif=0; int lastScanZDif=0; + Vector3[] harvestList={null,null,null,null,null,null,null,null,null,null}; public void onUpdate(float watts, float voltage, byte side) { + if(!worldObj.isRemote) + { ++updateCount; cleanList(); for(int b =0;b<4;b++) @@ -46,16 +50,16 @@ public class TileEntityComp extends TileEntityElectricUnit { BotList[b]=bot; } } - if(updateCount >= 100 && worldObj.checkChunksExist(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1)) + if(updateCount >= 50 && worldObj.checkChunksExist(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1)) { ++scanCount; if(scanCount < 10){hasScanned = true;}else{scanCount = 0;hasScanned=false;} Vector3 thisBlock = new Vector3(this.xCoord,this.yCoord,this.zCoord); updateCount = 0; - Vector3 targetVec = findBlock(thisBlock,Block.leaves,2,hasScanned); + Vector3 targetVec = findBlock(thisBlock,Block.leaves,20,hasScanned); if(targetVec == null) { - targetVec = findBlock(thisBlock,Block.wood,2,hasScanned); + targetVec = findBlock(thisBlock,Block.wood,20,hasScanned); } if(targetVec != null) { @@ -79,7 +83,7 @@ public class TileEntityComp extends TileEntityElectricUnit { ModLoader.getMinecraftInstance().thePlayer.addChatMessage("N/A");//nothing found from scan scanCount = 0; } - + } } } /** @@ -155,8 +159,16 @@ public class TileEntityComp extends TileEntityElectricUnit { if(blockTargetID == block.blockID) { Vector3 targetBlock = new Vector3(x,y,z); + if(!onHarvestList(targetBlock)) + { //ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Target Block Found"); - return targetBlock; + boolean taskAdded = addHarvest(targetBlock); + if(taskAdded) + { + return targetBlock; + } + } + } z += zChange; @@ -173,6 +185,43 @@ public class TileEntityComp extends TileEntityElectricUnit { return null; } + private boolean addHarvest(Vector3 targetBlock) { + for(int i = 0;i < 10;i++) + { + if(harvestList[i] != targetBlock) + { + harvestList[i]=targetBlock; + return true; + } + } + return false; + +} + private boolean onHarvestList(Vector3 targetBlock) { + for(int i = 0;i < 10;i++) + { + if(harvestList[i] == targetBlock) + { + return true; + } + } + return false; + } + public boolean ClearFromList(Vector3 targetBlock) { + for(int i = 0;i < 10;i++) + { + if(harvestList[i] == targetBlock) + { + harvestList[i] = null; + return true; + } + + } + return false; + } + + + public EntityRobot[] getControlList() { return BotList; diff --git a/minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java b/1.2.5/eui/turbine/ContainerGenerator.java similarity index 100% rename from minecraft/net/minecraft/src/eui/turbine/ContainerGenerator.java rename to 1.2.5/eui/turbine/ContainerGenerator.java diff --git a/1.2.5/eui/turbine/EngineSmallModel.java b/1.2.5/eui/turbine/EngineSmallModel.java new file mode 100644 index 00000000..93274802 --- /dev/null +++ b/1.2.5/eui/turbine/EngineSmallModel.java @@ -0,0 +1,242 @@ +// Date: 8/14/2012 3:20:15 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package net.minecraft.src.eui.turbine; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class EngineSmallModel extends ModelBase +{ + //fields + ModelRenderer BASE; + ModelRenderer PISTON_WALL_1; + ModelRenderer PISTON_HEAD_MOVES; + ModelRenderer PISTON_TURNER_MOVES; + ModelRenderer PISTON_ARM_MOVES; + ModelRenderer GEAR_A_NECK; + ModelRenderer PISTON_WALL_2; + ModelRenderer PISTON_WALL_3; + ModelRenderer PISTON_WALL_4; + ModelRenderer PISTON_SUPPORT_1; + ModelRenderer PISTON_SUPPORT_2; + ModelRenderer FORCE_CONDUCTOR_BOX; + ModelRenderer GEAR_A_TEETH_1_ROTATES; + ModelRenderer GEAR_A_TEETH_2_ROTATES; + ModelRenderer GEAR_A_TEETH_3_ROTATES; + ModelRenderer FORCE_TRANSMITTER_ROTATES; + ModelRenderer GEAR_B_TEETH_1_ROTATES; + ModelRenderer GEAR_B_TEETH_2_ROTATES; + ModelRenderer GEAR_B_TEETH_3_ROTATES; + ModelRenderer SUPPORT_PLATE; + ModelRenderer ORNAMENT_1; + ModelRenderer ORNAMENT_2; + ModelRenderer LEVER_1_CAN_BE_TURNED; + ModelRenderer LEVER_2_CAN_BE_TURNED; + + public EngineSmallModel() + { + textureWidth = 128; + textureHeight = 128; + + BASE = new ModelRenderer(this, 0, 0); + BASE.addBox(0F, 0F, 0F, 16, 1, 16); + BASE.setRotationPoint(-8F, 23F, -8F); + BASE.setTextureSize(128, 128); + BASE.mirror = true; + setRotation(BASE, 0F, 0F, 0F); + PISTON_WALL_1 = new ModelRenderer(this, 0, 18); + PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); + PISTON_WALL_1.setTextureSize(128, 128); + PISTON_WALL_1.mirror = true; + setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); + PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); + PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); + PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); + PISTON_HEAD_MOVES.setTextureSize(128, 128); + PISTON_HEAD_MOVES.mirror = true; + setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); + PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); + PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); + PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); + PISTON_TURNER_MOVES.setTextureSize(128, 128); + PISTON_TURNER_MOVES.mirror = true; + setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); + PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); + PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); + PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); + PISTON_ARM_MOVES.setTextureSize(128, 128); + PISTON_ARM_MOVES.mirror = true; + setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); + GEAR_A_NECK = new ModelRenderer(this, 65, 25); + GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); + GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); + GEAR_A_NECK.setTextureSize(128, 128); + GEAR_A_NECK.mirror = true; + setRotation(GEAR_A_NECK, 0F, 0F, 0F); + PISTON_WALL_2 = new ModelRenderer(this, 0, 18); + PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); + PISTON_WALL_2.setTextureSize(128, 128); + PISTON_WALL_2.mirror = true; + setRotation(PISTON_WALL_2, 0F, 0F, 0F); + PISTON_WALL_3 = new ModelRenderer(this, 0, 18); + PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); + PISTON_WALL_3.setTextureSize(128, 128); + PISTON_WALL_3.mirror = true; + setRotation(PISTON_WALL_3, 0F, 0F, 0F); + PISTON_WALL_4 = new ModelRenderer(this, 0, 18); + PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); + PISTON_WALL_4.setTextureSize(128, 128); + PISTON_WALL_4.mirror = true; + setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); + PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); + PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); + PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); + PISTON_SUPPORT_1.setTextureSize(128, 128); + PISTON_SUPPORT_1.mirror = true; + setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); + PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); + PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); + PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); + PISTON_SUPPORT_2.setTextureSize(128, 128); + PISTON_SUPPORT_2.mirror = true; + setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); + FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); + FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); + FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); + FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); + FORCE_CONDUCTOR_BOX.mirror = true; + setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); + GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); + FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); + FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); + FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); + FORCE_TRANSMITTER_ROTATES.mirror = true; + setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + SUPPORT_PLATE = new ModelRenderer(this, 65, 12); + SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); + SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); + SUPPORT_PLATE.setTextureSize(128, 128); + SUPPORT_PLATE.mirror = true; + setRotation(SUPPORT_PLATE, 0F, 0F, 0F); + ORNAMENT_1 = new ModelRenderer(this, 86, 0); + ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_1.setRotationPoint(6F, 19F, -5F); + ORNAMENT_1.setTextureSize(128, 128); + ORNAMENT_1.mirror = true; + setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); + ORNAMENT_2 = new ModelRenderer(this, 86, 0); + ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_2.setRotationPoint(4F, 19F, -5F); + ORNAMENT_2.setTextureSize(128, 128); + ORNAMENT_2.mirror = true; + setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); + LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); + LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_1_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); + LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); + LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_2_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + BASE.render(f5); + PISTON_WALL_1.render(f5); + PISTON_HEAD_MOVES.render(f5); + PISTON_TURNER_MOVES.render(f5); + PISTON_ARM_MOVES.render(f5); + GEAR_A_NECK.render(f5); + PISTON_WALL_2.render(f5); + PISTON_WALL_3.render(f5); + PISTON_WALL_4.render(f5); + PISTON_SUPPORT_1.render(f5); + PISTON_SUPPORT_2.render(f5); + FORCE_CONDUCTOR_BOX.render(f5); + GEAR_A_TEETH_1_ROTATES.render(f5); + GEAR_A_TEETH_2_ROTATES.render(f5); + GEAR_A_TEETH_3_ROTATES.render(f5); + FORCE_TRANSMITTER_ROTATES.render(f5); + GEAR_B_TEETH_1_ROTATES.render(f5); + GEAR_B_TEETH_2_ROTATES.render(f5); + GEAR_B_TEETH_3_ROTATES.render(f5); + SUPPORT_PLATE.render(f5); + ORNAMENT_1.render(f5); + ORNAMENT_2.render(f5); + LEVER_1_CAN_BE_TURNED.render(f5); + LEVER_2_CAN_BE_TURNED.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java b/1.2.5/eui/turbine/GUIGenerator.java similarity index 100% rename from minecraft/net/minecraft/src/eui/turbine/GUIGenerator.java rename to 1.2.5/eui/turbine/GUIGenerator.java diff --git a/1.2.5/eui/turbine/RenderSteamEngine.java b/1.2.5/eui/turbine/RenderSteamEngine.java new file mode 100644 index 00000000..e827e520 --- /dev/null +++ b/1.2.5/eui/turbine/RenderSteamEngine.java @@ -0,0 +1,27 @@ +package net.minecraft.src.eui.turbine; + +import org.lwjgl.opengl.GL11; +import net.minecraft.src.*; + +public class RenderSteamEngine extends TileEntitySpecialRenderer +{ + int type = 0; + private EngineSmallModel model; + + public RenderSteamEngine() + { + model = new EngineSmallModel(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName("/eui/tankTexture.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java b/1.2.5/eui/turbine/TileEntityGenerator.java similarity index 100% rename from minecraft/net/minecraft/src/eui/turbine/TileEntityGenerator.java rename to 1.2.5/eui/turbine/TileEntityGenerator.java diff --git a/minecraft/net/minecraft/src/mod_EUIndustry.java b/1.2.5/mod_EUIndustry.java similarity index 91% rename from minecraft/net/minecraft/src/mod_EUIndustry.java rename to 1.2.5/mod_EUIndustry.java index f9776799..d9613c49 100644 --- a/minecraft/net/minecraft/src/mod_EUIndustry.java +++ b/1.2.5/mod_EUIndustry.java @@ -2,8 +2,12 @@ package net.minecraft.src; import net.minecraft.client.Minecraft; import net.minecraft.src.basiccomponents.BasicComponents; import net.minecraft.src.eui.*; +import net.minecraft.src.eui.boiler.RenderBoiler; import net.minecraft.src.eui.boiler.TileEntityBoiler; +import net.minecraft.src.eui.burner.RenderFurnace; import net.minecraft.src.eui.burner.TileEntityFireBox; +import net.minecraft.src.eui.turbine.EngineSmallModel; +import net.minecraft.src.eui.turbine.RenderSteamEngine; import net.minecraft.src.eui.turbine.TileEntityGenerator; import net.minecraft.src.forge.*; import net.minecraft.src.universalelectricity.*; @@ -48,9 +52,9 @@ public class mod_EUIndustry extends NetworkMod { MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); MinecraftForgeClient.preloadTexture("/eui/Items.png"); //TileEntities.................................. - ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler"); - ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox"); - ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator"); + ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler", new RenderBoiler()); + ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator", new RenderSteamEngine()); ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller"); //Names............... ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); diff --git a/minecraft/net/minecraft/src/mod_automation.java b/1.2.5/mod_automation.java similarity index 100% rename from minecraft/net/minecraft/src/mod_automation.java rename to 1.2.5/mod_automation.java diff --git a/minecraft/net/minecraft/src/eui/BoilerGui.png b/minecraft/net/minecraft/src/eui/BoilerGui.png deleted file mode 100644 index 2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 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 diff --git a/minecraft/net/minecraft/src/eui/Items.png b/minecraft/net/minecraft/src/eui/Items.png deleted file mode 100644 index e8af1a861dc83ec5304963af9196a04091edfe9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32135 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 |4`h(z^zl`9Geu59lXLB5t|wqdy>1i z{o>nQ55k`W3H|P(2~~{YIQ(A*fllR%D>lp;orMS#YS?WDC#nE7K_S3~Jq%a2fO{D2 z?`8Q@_-KJYR+^XhhdaZ4zWfS_41@tca*+JE6+x zK#u9`>`eOdC4R~t&P6zi|Aa}Dw5Eks1WdNmqq**`mS7pr;4XU^tnSTtvIK3GBx6 zpo#oPIbh^;K+KHCVsX_<%o03{I6T~{yY0er*W) zi6F~k^$CxNaP+KPcsNX;H3Gx;?m@3-&+RBpP5r|CeQJ8t({XXxyClAHzPSb4QLjY7KiGql`=mtqlr=jTbUqAX}*&<<<(}$1*&zCU|O~)KRe!R1? z2;dS`SF#yx1?ZWW)XjL(z7trMlt8YTn2x?aHUCM&iR;t-f8!(_C3#sH-gX6|P3KR# z_QjVW!B$#4T$^m{Vef}t6W^E)Q@Oz2zOQ%$#0lw>+|%X8$4Rw8ug>-aC$^sEgbD@W zns&=Ao+f2yg}%J96I;M~rR|fLXvG_s^Jb|8Pu65c{0KvyqK0yKH~-eVez9e{{)IAX z=(zw#%Q8woHwj>56;@qSY|Jd(q+cppdtmjEoA4 zi^sGR`}%Zgm;r!5hWv11@zqPqbA#Ivocr@9g{J1Vz=sb95pQ=)1+D}3^?DX!_Z;pW z$ei_D@Kg1taG~!11=+c|_1>@JrqX3f#t~@xcdP7L#V%T3?@ZDVky1;?82id4gMb|) zbrZq%XGFO1QqxCfT?-6lEiGS6xz+fV$aA%{JitJ}s5tvW6vU;M9t;rJiSfKk=f}s+ zJtHZ}Y!6Z13q|}O#LUOn-SlWW_U)l;xC`I02tU5yi!d~7XMLE~PICKPrnkR(!!8Xh z8yb2%TI3++4rOAQ^U&9zS(t81-Q)vvT&%8|PZ>-5tVG^toc{Kdj=)fiJvn(zOhy(5 zhHnn%&E1BG!hvT;rbs$slD4~e=brb==})skw8cwH=e8e$_)#6X9-}LKzvf1q5>{6w6)Td(jnUf70+$hQxSiFZ0oGKlwEhmcI9Z=l-y-MQ#W9 z3@=_xTmRS~AXOqF+6lypU}Fu~Xn6`4I3b0bnK8)`HkOf%jU0FrVb6T=J6|KN zh5!n-wpYKycK!SJymzt9$QxbG2T51yNl7r%3cmiAw5Zg{PO?A}Llk_h8~s(J9-Fg2 zHvam_IHb9e;qNa(PWP8O{o>SJj7JW6tM+{R`z`qBOm*$+%WrHedxK%w)x`O-uh9Rb z$o%?Xh*VsAI}{3(1NZ#Es#p5ijGL2{oCKzB!6eUPo7?#J%JWTr5uL-PpXG9ky6Y~C zmZDUPb0Z+ej~{p6T8zsL`PCrtj2ccyXoiU#R50ek6UZ;q4c<93{xka$WEj)pHevu> z(-0NpE9WI7%qJ(uY-iVIEM{8Y2I9tsFy~s(poYKX94km~6uUhe9AXF$Q-ahZWsk=4 z?Feo~@u~jW4+Z&p`iFmhbdCbI`qzu2C2O++)KI~SY`*Gw1MpF+ySkEDxZ8kFuKm4h z%Rogoz00vL5XH~e1+y5jTvOpg-{N`1cVi(p!lpiSaS`aEe5Qu4wiAu4`DVinuehKn zZBcMAbXl=8y1@PZ{rgQ8gaqFbRH5c0@BXO|L|_RuyM|b4|iK1E~1ouUK39A%B}5k^wG~>2ECGAk)K00u!m$DaNaZGx2N23 zxU9dt^`Y>asV8L9+7SQSoTnH619(J_$fobU49!P=M1I+<9zZ^EJ4riAW4})N+}jtD ziCE~B6pb)RrFDUrxIpnM zdC*_nnfWyP*REZqY;B|JRd;ZmmWtV8UjBLJlW|URDykIuwd2d310R9hfwqfvU+VIP zo**;rWI_Yr_wf>r58&#L_^9a{by)M{Y;-IDv|W~wV8kuJDZ+npScfyt#!g4rN-#4H z_*{PbWxJtbnlt+vhp;c$oS&~n!-ut{z#-5-C!xF)!!3)1OvBRBa`+x4&*-3TWYhy& zR#+TdXk$oVi8{4kG&Ho(&TvMiKoHC_xRdun^oc=|A9^rNkaw9g{+mn+Rld|t84pB zUrI;Ew^u#-fj5#I9Z9de=bOwoE{;J}W?vZ}R7vfeuY$f@aS_0(1Yi@LBW?c=WVa($ z^BOZW%WFE21I})fbp7w5-fAF+EU*&yzp>?ia1@*@&+)_K&(b16@ zIFGoYM&2o{A4o8hBv&>OiktU7BCgK0p7&yFo%bHW$gSGF$(O8WbI5%7YHf?Nlzd4E z$@O?M<{Y_FO}FGqA9faTviZz_u>DJu*OaYCp{k(&s91#5;?2LS5U{a1?zHdxf;hJf zyOVlwOyO{L(`c94RE@i|`cUb01sRl_7eGnRusUu{C5Gml?zE2okh1>tn}Gz^lK@Gx zlc40ijedHIiKKcB2x2_z~V)L6)@PBdP z6|1$jHuTinI`yYjS+olSwgwj&t>|?O(3qc;w9ngKg z8_k=pIn8OA^>5*BUV_Ip>ge5G$$tA~Bo8Y6&S!a4`vOQ?>fGlMv9|;)x@83@EJUZfmZ5ZIQ<0k(&^fRX64ynP@Y32wx zZ{1^ZA;CCSU!&doDv!#{I$&c$mdMt$O!4OlB~1tpODs<}0;b06l zuyfna?}K&{s$EW$7|7=O8x^zU&H3#2z@Z$!Zf`ZG& zI-j5l=x?8sB~G}zDcSjF0^7j|jiz6HV}*XiOMdjIgD}>IVyys5@_4>vsTUExsOcEb zsy4eCHGDP~oN95WL({Lh_UN6a{?4A^*?hkvH3*-j91z1s(cnNt;l zep;r~A0Xo;vswr(5Aor1F0ZM`)j|zK-Q920_xS>fDK9xf(6i0;S~K<5jc^sxmuW+N zU{xTnWIttddHwCjlh<9gs^Wj}HkAz7obuF`GKamr5)o`&ox;pnu^$LTjbf^gTm1; zva+vP+?|~=3U`?7va^9idhq@GXfOXC0u;te)flv`nMF;&mDpp|C6fod44VRo%`TJf z2aakXDz_b+mNK)gS2lH$Tc(r%V-oXJ4e=kYhKYmwm`k7e$AlLg| z>uyU65muOl&Dbl}6h~8X#lX+}_XHWHQfb`%5Kl?(IgQ4IQ)9lu8ycyYKG9c^f^ zxi^vtQ!ZXMj-i&!>>OEJ2^HyN-@~!EDPy#0Spc==|K$R}AGRA^ z(~v+;6_~K&i^IKA8~Dv`+>5Z8<~Z#4fHZ8OeLXsIemD>DO^ytvY-EHQFp#}8 zJ>Ht(>=u&jHEbsG;M9_)j_4b;8Grl{BtYF%>&P0Vpg5( zBw_b+L@kL6lkjt){@)Qf=f~&EQ)Gqt5c`$mc6%$^a^E|s(GE3J3Sl9>lHdSIjp6Mf zB4km=yWlDd8tATM!)3VrX0;S13itm8iT93<=tn$ z$+cP5+jfx=T#Os^gwSTabr1;=jF2;sm%^=U+%5$};f~>+T&$O^y17HD8E8^$Iwj}!Rb|l31;emw z-6h(xXGiA_7O%e6p`!5iJ-3k_;z+VvVI9XiR*Z9Kw#o`(`>I}%SD3}VdARi_g|E0t znd${lxt|vZVluVp4*84Bx#yYC8h=^;;P0;hFs?2u^Aj#+aTrr&h%cT_b#;pKG`r(= z2QvR{L~axb z->ICL-sw)h2k}1i$G1m82zKW61_f^`5|^QnihDo(fn@?!V&E7Qd5GjlHx&caoNm4h zx(bpM`it&4?wWFVNd_$_>$8Z))!IemGpv4Vd&qR{SHKN+%>i>LSfzJ8o!LJ zzk0!-Gm=+XYlah~aR^h;(Ic=Pz9k@vAaUzAg^h;CjuZYT)^K@rA+w89X$u|g67lIw zz;mQmZ}HI-K0LYUNNfR8(bBt{$&g?`%BSO;@JD? z*C*1HD|v1R;1~Gy`catb)4+1oH|&=XA3;T@$;rt8h($cyfl%QD(M*N(12P_vAstiq z68rKS!oSDd%J2PAMPa|gX7%Am96=;UOg`H&BLRsI<# zQL9vEf1}8!0ycPsXy$4V9nYEhZ$ay2epFh_29Cw#DBF+4hf+x=mGSLkPWd;NN|I|d z)T`?^uMyIhYFejwN$OyPO=*aKF&uSpQ&#GZuJ*`o-|Ogdy>7rdnFa+kUxj+5Bk>PtHzF?+3amJB8i-EO!x1hyBAoGhP-k5uV3y zPzZVIk(+;sMDrf!6aiCC_Mx)W>~8{dhf(Yzq%7% zbIH^eB46D|)v|2Io~#Mw3B!Yw*ebY@TH62k7DcLja7gq;9W^*iC}G&ZHx!86nRf5~ zG0Ec0Lz2z~*;!Ipk<4Jmw)@uFE`+-d*qAohfon^Pt;pJ)&E>>B`68$M;3au^E@YKClV;!SZz7ZYzFZKgxEBxwXRK$~%q?Sk+Z zOa$Rl7?~W%7j$*N|L+rOPw?E_*&8v(_QT>MAa@;pL$MOv{CRS5fsaO--f90hy@FYaa1nbdst$34{zbjh{{cVyWzd^Q{N4sXbq7@+R zGcWM#6Z~>)5!8J;0HA&{YtPPZF$XK&qjA7182sK7K14r?^ZG0SpKv$i`unrB^*h~N zPaym|KL1Q1;Xh<3cA?jy6}$I*CM$^9krmOK7uF`&Xkp{^e&NYdhU6m=*PBON`52sL zynX8)#2F0n=E*&m{Os_@tYkUmS2*9^A;~e#vsdchUcfsbyKin&s_txSK_c4=<;d8M zowpiUkh=Rad|K*HEu3F&Om|IvSJ}jyPC~2JzPzk+|M2_u!=M0D)n^-bD{qxNGT$w7 zG5V@mFL^I=Vs4$dY#%$E(SE<_cN$mUcy4mEI^oVPxsAtm^2rcUIKNm^6d!bbW3wgM z#;?OA&VE-PBcUf(m5wh{(vverF|aE_s?pyt@a=(-a~Abs#N3+7O@2SRh)tMkxJpp- zUE;0-XE_{n;Nc;Zl|l)_eH^|IKh{rJW4iV+caz3%`u`wKMB4y zNwc*S5I5?3TUyVPF6OuKyuWBkAnI(38*^H6zh{l*qY!`huCpmS@kNNP{V=wf>UPH1 zn*1`G-v}6X{AdvPv$?Ha=MXQ#M`3)DBR+GBtON2kI#DBR5m2MP=PYVn)Ug$f8kJPY z%Q+Yfv9Pisi69BAAcbrk2F@!f(+`-FAsfE-@uYdahBPlNqb=G3(moT>t#p9s?#29InSA%>3m-r#au*XY24jn((IXk?|Bg>S$ZzNxD=gvD4=u8 z?;@!8u|m~Kho%f3eiy(&sQPo`1p^=Xs>9n_=qs4${-dEHp%h7>y86u!_VU*wKb2Zr zB7SrP*Wq(y{^KC?GYi*ji80BDGGazz{*d19dvd0E-d`>HjIdpiLq@ ziisz6;0r+%?KK%kYcEev7Rlzrhl?{-H!nGkI0~MuWWPEXzK0C-9Sai1+0)WKiW4I% zv0ZO6)aUniA#(P9wY5Y{%P3R)l12gaL4rM*gM*XO6GKRQOmswvql~zuvw2|Jm}KUc z=(w7{OT&3#sj|PN8!%Z?v)!AklAZ_FUxzuCjw0OXWFF8Wb_EnC<+yoNw^^?esHZNI zMIU>sa&LM6DD3=}#`yI3xuId#;2%Pb=W)M|Z@ZWVCkv9Y{wu}}*2y%po>2M(eRT)& zT2=1f?y0IyU?4i`xa`7Q^4DT(-G%a%@1Yo#F!0TIX`UoHMd9*>H1W~(#1X=ZP$3PK z1NZ`L)~^AUf?1z&K&}2eLMZUFUyha_6*I)|Aj<4eM6}bH>QP8Mu{bR?8_f{5{$kxz zFAa@7fDwO@5$G1e=Zkw6TPnB_+6@2gmGEmw;-J1&=#Sgi1?T62Kfaf=mkavTT^p3z z`c(c>p=u=5QxTV#y`aaHKQ&s5Nya_l8z3(mOJ^U!=0)65yH*ylh zQk;vSF=h~Snw!&`R2!hbpBFQ;jBQ0b{;?e;85@EpXE^~@Kund}Nij5o{#f-FZv+Js+v zga7{03zvUlIT)#JNUE|m!ip=N!B}HU=kW~5Xw`pn)g#G%$CTDGoHLA|N(i6gl}yz8 z1_{$&4F#W+v4>fl9W4q9U2Pb`Nsq%G&-$r(^qIG)J^zZb{wP-=-9?3fpV2LQC@_!1J5lC*iIRg<}??Ws0{TmOJ zYRX_hWJgX|Y?YLC=#?4q^2d)X2PT{y&BbiknFV8n&j_qw=c@YWZ2%a1zAP^@QO&<5 zDb?_cWT`vz60@&3?G6h}Uo&Ve88{z8+iRG!?=&<6mUY z9cU-t&oXX88R{G%TL%Un{~b-&w|_q4{sjJ(^*`&WH|FpymYv4_9eqqp=N&lx3R^=g zes4bPzbw9MCW6Nt$*!B;8}~d!YNi`rk8hrWoA@$&jglszus=j$0d?Gd7N_O2jvZ~Y zluTRZbT1t(0401Yy1u`gCmDDb_Oi$wjazL-eG>CP|2@O(2$aE+!qiW3rokDHqEJFb zR?E427RS58kJ0D2Ywkp($Qgbp#cfn$K%;*ozOcP&pc>n-3y$5de$SiA+obrHFv*mtK6niyaZ)rlg zA1JD|5X06k7tf$PCp!bp>t_|&<+LG%Oe8hMc*ux4cQrd5IZA)Cdx1TcbD#GA_K{VZ z;U7ih@q6UDu*(AuuW}EMs4aWjta_e_lIXADoz{Z`p zIhnjKzH>fP^ct&L2d!?svIuiPlH7EMsQ^f@jhe2aP`xtbd7L&Bq-=$)0BTx74c5rR zyVFt?MMlg@d{_NGvzL;|z2?%yoBzQ92?$#)~bM@oLi=^u*SHr#80KjUme_3jU zh5Elw^tU6rWG2jEO47$f-JI;iiEwB)P$)k-8)M?$!mPuxF}>b$73G1bTifLHcPrAq z@O1VP8FPUK(tRAjH#g_{MgQJucH^D&cgwqJVxUmS zZu>etUGu2pfM(|9V1VUC3%PdhL(_TQ{%}>LU+G_evp`;*oe=<+euU)oE0H|5{QK{> zqL%lepPP|Y?d|Q$48oRP<4?pTB&^4%M!+D!2`8bY%cIpH(98)67M%}Dexj4Jv*Qxm zrQ)Z}1AjURDfr(@y$hN?Upg?;f8Cr4U;=#fYM?XB!9!s7PV zjNgB}s98P9nmNo5N^J%jSWvP@M}7xCH;+`tJ?qAPp1tQEU6i_>?axFXt_G|SsUkI} zbsDv;vvV8N3GUWo{Q7$hz$LK#P|kUGoscZ0*`^s<8@*a*kMKm?xmmf++?)cTPCX+ z1|(YU57ffKqGdOcRereU0gxZSMGr;<`poh_wH0$AQLsCcUuIym&A7?B-wWRFac09S zBG%RWDWN_9P^NIXl)pGy&qQB(G2Q&Vf5W(2pzhtcnPQl6QDfhYZN6V--MJE_tH-NK zB<$~?6>QRqeJg0vv}&IpSe2oN%)_8gW}53D8XCb8Z~9`k2f2*5$b@-$VF#>qO!1(J z)D>d?q^>S)ZbLz1?@AF9;sE95yc&kT`!(2%-I(Yt1tQ+Cq6j#<&$|7NHR+j_)p!>Yica&#_AULFG|Vg##A=B>SCJF>ZE<3?Lu{ub zBV)Y!IZSk4UlZqm;3J2YlYon396#ypj?FKktL#;k5gDmev$?+IYR{3}2(U+r3~VY; zoD2;;eklI&Mbn`?D2opHUxt@=>M-w1srb;^B)Q+HsO}IHIzH@7wg^%Tt6eoCiG<|} z$YS~?Z1(OExpgh%u`B4GpOg2$Ym-$*mhKAvgaHCmFcD+1Aik9Rh}I(N@xNa2Ist%( zhr(E)I|N8eGx*nChUo#pQiul!WL5l!Gn$MdmHbetnhR$Yc)$lOf$olp@1u$pBX^sU z@)LQ|K0UXvo!}7xlo$M9eEhH}Q!7hnS|rKEg~TswU-OG=4}A^P=`)%zn+`@U?4^c6 zusHyDJ^ATd@;-J#su}_IJ`V36>Yisa9G$d{{#T*=p@|tRd0eGTc~K@+5$@*7%KWl_ z3_qOG7ge4^f6mtP!-zmbLrDe_hjm^(eE8w(H&RlbJgM8$axxf-) zJ;ko7AY?nE$hd_=_vF*}N)veZ{J+dximd?=qc2Vm&UfcKDROBbj^`R{o2Dy| zI>O{m8-KsuBxSX0c+Fi{-7m6~G5*4CWb5c5Feq6Sx&A8{lE3VI+<1>%Rr+yNv;aPc%{JGyG zhsZLDM6mKJt8JpH&HS%ylQc6hmLvE;TuG5-k&AmjnHbu~YUL^JN?f?$eb}rXvNO1|gk{Z(={>|_%w(Fui^zS`wg8l@BARCGS+)Oyq^qocL7<2wM!OPW$!1EB; zSi@_vDk$Ew%RhFzv&}GMFtb7+Z|&fY{wXyyINWmV--x^RBK_;az_~`M>RM%)wYp2D z%s=c-t^G)7ArDkVUy~Bp?`H`FALckPuV#uvI!{(2)|(HNRF?&^RhC}t-rdH#BVJL| z#KZNbJq(Q=u=(s5h8eVc{eTVa>+S?OY{dT676gL%{$#g{Bhb|gzo1L*SX)<8lx4)g zVm_L5{5qheBdmO&PfATGMjnoX>`?Wi-Tj1vTI9&7Z&ZU{nuNnpU|7{2gYu?31u0-4 z+~)dR5V*aw3>*$IoYVtN!VX1z(VnsZY~|EOkv#pfvy&6py09MTwYC0?U(-W&Ht`fe zN<%;7DPq#UG)C>~wWcYgyW8F1KjW#^yyd5_~YjT&c|iy0;HRwFJM zKK{SDc2<$pyw(sYSY(*jSPT1Hy zAu;753jp(;79$TtRD+T`%-2abbh*A-^6ToqzHWoR11F2#fF|S5ahDpDK=VfwIt5c2EnHcx zwiPY%E}fc_jSUdX(qbi8Gv8;2ZbZ8a07App#(t&nrKLVyujey!9#vyS6QVSm!E~P5 z93r@pGP;|J!^FkFyVg@SE=o`}PV?8DBbgw9CMZmX#6XfoYNCSg4dr%g1t;Bo(ZNsn z@tXdr&W$-Y!lJvL!?zg$Gc*5fY?`*`+^rl#xn{!d?U+bCwd8-xB;ECr#h(=<;vIzx zJyyYp|L;+@^(u%Ej4$_?OEJSwX#XP=xL&Ts2VBohm)0*Bn)#I{9n^>%}Sinw7^qA?_8x#{WDjOSNyXitCQg8`DB$mUdC zdD^OWF%6X+E;t}Qn1U=OX2gIY5mv9_=T(%GdN4;n+&y%yV9DS9N z>N^m_Dy`?goqc%W#^|@IiG^-Eh&>(rFXv>7fy9irsqPZ&15+@+>yn>2_{4C`4QzCj z&5G*HynBQaX{8~o(lG4!Sj;al@IzZANpo{XU_dMG1f%c0UwgVA=kx?!72TR+Pj34_ z9xHh0>5pFL^8n>9D4fnj>7q8nczxdmtzB+}(+s{TW>HkD3Cq)ya0UhDX=uY5S(|94 z@MUq8j%i0gT5?~ee=UPJB35u$SqdmL{Did-$dtz^s*)vzsp*6!R63RDhmf8#zd(s)2}b#>mxF2A_&f@3s2 z0Jy2;y8QWbF4_Ao(cWIAF5en>I=H)U1_Nx87h+!C!Zwrdf3ciD<%(d41~h}@{`>8d zGvwG4ew1YF3sP6O^ZCc_TCt>8Xq6W)lw)X5d$NCiwu8Af_<&EuXNHo7=un06kTp>%qI?>wk*rg@@(1%;%>DgPwUpPk+K zq21hCApjWN{;K=gpo)UG1^}2=|K$iUYVx~lSg8^5-#yVQ`U?C^j`k;WZ+TOcv{Uj` zwLdIWna;(2yXj8K+Kt^PS_b6^(J`nq;}CJ_QGazEh?4Pv4&Ug7e1Ckm^bduTOb8i^ zqSdwIyYDabs=dEtV+sokwO+q|;M;K?t6*Zn=;-Xs3DSOZmp#qradmYybe(ON2jb%< zeDC+JZ!T|04Wdr6cd(lVamC-GFHLAsGbd+}k0jr>MS%Jd zf^v2}_Tng*a9mzngXiiHVX0!ezpO&$XsTEJ3i6zV$8X;UuxiH9Yo zryHuT?eTs76gl_HY17wgd@!5vQ%|I4QCO>EZ{Go~aNHVuFT>mNW?xA5_vlKqD$R_uI8 z@%Nm7{OCmNQio5RA1ZM5;SY`nA^Gy!wo(t5PIucx-|DXjkg`U6HR52{n3-fCEa%Fc zyYu26L9lD3qMJR{3UiRlci6A#>5FY_No(u;hWE*rw+d^U3687#$SS3doQyNfdIp0) z0QO&psup~CheMuKor`k#Bn}hQBoy+skbpKA-D@e1oPurH1bT~95dUht!OqK9iJ&sp zI#o5LDVqFuXIP49W1xq7?ZSF5oXl<45a_{_o3d4Z+DWh zzoR4X%PV{- zvAg>A+mp1P$|0DOJ_Yq~ohpUTZ$1E+Rgkh+%zl`u1?vuyYtu=4aRCKQO*1Ra7s4+> zKn>|4MyOH&uEO$K$oG2+6IO31b!lr`RQ45xK&CvRj+-udJRTfmz^!v#wX?g05}*v;1s(@*o-h0z55JMS9$Ju@a3VPj=9rUf2!1f8ha`Wh2rad2!eoN z-y~XXcodvUAp`gT@>=)dxoPknW6A`B6)12_G#EEX<$0#X-Tqu-*NxUk1#oE81g;6? zkRv93{%d8=>tCW;*>ZCg z{f+Qj40hpbuYRH*1ud<8581)FFhq$r{PLk<<*${m#mv<%&M#Bs7Oh@0chcbxQg4!D ze!rOb9HVgl+oIJkSzKHkd9Y`EFmjG{je(2ZzptSb+TME6xcGO6UC8)Lcx^g-jrHQ} zt3@2NW@SNSd@h{6UXq&JCuQX99xf$V8VNa3PPUW(2FK}CrAd|UVkM-Zl(xP_x`k70 z>|As}!TvA%liO_LDfemnP74$Ey;XLldjR!~PS72&&p!W*pV{^8^^UrY4X4lUjMc>h z_lszS`Wlk=Qxb6JhkEz^E2y1Fc33BIcx~x&-HOtfXu?+yy8UW)VcGieo?Nhim*=b< z#f&t?OM|JU#2QChOZ?Z61)3+0@?9z3KP>l^BXgaoNqTjYRccO;2~#RZn-n6NNd(S9aAD+R1%oFHw}d$hu#;T~Mz zC@f6PQmM-b3J^v>?T7Ph`x5d8ru1u`+@{fzF5j4JSk=S>Bfc zjbZY%vuIk91~NlMgW<8V9K zX}DDK0o1jfH#wRr1cg!n8JK5nvC~w%hqt-D98r$kHqpqdns4+}ZOrN|QIZ){B5JpQ zB>l4tf&SiBd0o@jq%TG|;8BFA0hK1l4I>aZLqUFp?j8{a*b58kC@9rINHZH)O|Y`m zgkXIkfc`;ist1SVFXn$rTfc%^K9ev`!|9{GdM*cBGW)@SqQus&l@TvWRpiguXyY5L z$e)bLvt?|cRJtR_z(Kx}L*+nu;V z!_Rug#so1cp+!X;1M6Nx`I3p5pUP_P5e=bJzmO>1=2ErTuU3ACp4_$|9~{f4W2jj) zg9(3raSL%ycRWPxC0ahYY-LFf5xvUy-(r;=urM%=Xz3g7f$85ljVAsG5L2`^`^z*0 z39lNS)^b>CVFVX{Xn{REKQW_3JZF%a8s4ji%r8t#_TE#Pn3*LcAk3baUtI$*K)AT1 z(0fKiz_cS~Hdo&=MM3V!H%aDzFk;$6P-x>OM9hwNT<$JXX*^VTK|Ku2v$7y_4Skl< z&%rkYyCv|YTs{BM{0;}i41r4y#j=TiXUQ|gLR}DKMo&XSqsvDv!F^+t*x}8A&kt`% z>M$-_nX<+gL5<*Bs#`n<#8Ryn8CqcS z7vF{b)5Xl{#o&bEl9H^ps29yZ=v&epK7ZPM^X@`}S4AJ%sGK55q4v1u=7Ix5gUbA# z5_8~e@lG5FdKP%~>J@5smY%qK=@xy^54z-sQV^Zc2^PfqebjfNDB^`WT)8XR);~=) zCZN%g+};TwYH5K0;dx5$VRW%e!Z^X(R}cL5g%=!LJo`ZzcrxG@v=3!unipTVUOdE< zmhLN2Kg=DjxcOZEd9X^kKg+hh{^jx7ATG;W6Jnd zYvv)N`uK%q5%3kBU?Z5md)?%tFoh) ziBa?BZ+|GzSti_;fOyk@>lJY)BcASecpb~{R# z)u`#+)qb{cOjHye2(XeCb#Qar;6So;BeQr%A(rFHRSLa!|vLh#lLP)87Ih^ zdZR01kCGk=`%f}j3kcfUnD&nR0gA<+lO(fe+Zb;xU)9qd9>62RsZ?SHEezZO8dv5cXy9DhEG%JnXgPR2#}o|r*cIs?HlKsAqt;0_b# z_6c*b@HEAtDu6UjT(nqQtg(Vk%*?3IyksR(!k4?fv;k1O`9WQW?Hz;um-#MpD&PW& zuKj{GMrDY1PJ-gY`Hs~{tb%tl5G=af^hQVaiw=QqAU7>@r7P~5WP|;jt;=(vrH}~C ztRJ(R(MB9rMn~~6EI(^DkM^G1hI9&^45X4lTH578=8BL6BQRQDNUC`U-uOsxPmKLI z(y%~}`fV}AvQrb{XL3^>^4KIvt1-TE06jJkhKa%5Sp9_7VBjDoVqVv0| z6vnMx;|14UK7Y_R!aXU=lknK8J)GMMABc_cRsTduHK!?8NO-bu&B% zBXQBq`JPnswP(F-?R-Wqb^Yl*NjMXnhr_Yk(LNW7tyuhzka-&Bkfx3V)R$;0BPyBq zMx5Azxr0z8o-jTELMp0F4!%dwTS@KE7d*X9{zT1HA<_r=BAwZs9Zh;2E)N}j=$_r_ z=KwD$c2S;Ya0Uo5dnp?XnIxWB;hZo{nM z?&-*F{kuTf(P^rC&A|x~E!B+Y2Z99@DBbRVUXPDWbWcjg*(e7_MmFJ{8f*%Bo}L|3 zu)|kAk>ct-uT;WCzr7{>_~Nz4_W=%;vik!H^*GruqXu7!;1&-WGO)QbXb+SX&nV+A zYTlrI=HFcWF#;to1>ZT-)RqF*ZooaujH0zen>)Gs~%kPA4$o73E_8>)iWt$K5hX` z=x?3+ThO#toWGB|C&T{(BJpPokSSHte=G3A!^1s#4n_iill)tmjY?A-T3+7E|Kegg zo@rCNRyvG-q@WzX8PzeaBb=a>9X(h>xEyd?M$N}ET&^|}mH2hV;=3%iGXv3eb@w3( zVA%8MI0v#W15E4m)p4T6Wmc?in%P{Nd~ZL@2&)eFlZypL)W+V6(0p^^9niUre$s<_ zZN&JVx_i{2RN_16x>o1c6mi154#@UdZsq@Bu}cIG~uH(*GPqv zuLyPj32~_zGE2Uw!G$3CA}f!8d2m>nK!u++CB1<_awT>R|$zV-eNL>VZNS=!@mN`^3KwdK_5x z;z@0JL%F-Pf^oA?VSuVWr}({+yy9UYzNS|cPFcTJE~@#rg5|BAaAn{%z1J%_AXK^X zFoWC!ltrK-cS1t`AvqNd3}}Asx$;p;i3oyD;bif1w)mx)yW>;85p$<+39UvU3U~#d zz#)=>{`>bd-EQWGC`*T=M38;>UHacPJ2Nw8afUY^=Rdh9gD6H&2oU)d0#Z%bfDGlb zyX&0r=wk*`ePk7vYFIo}Z7Fe1@ z5Tv3V&Wfva@{;2*2Q6v+L(^+6){y!=hYm^N5XXptD*WE-?>~6v+T&&-Rb_I`P7l&( z4o5^|$|l}tUFZ(3LqXdj-`a^$uy`8HXn;E?530fxj@;2FD=>XV6kRAIeN+?q*p7Jeo$w0+ z8})8_dKFT%i0x~^cAnnoKQjc0_%$?)6`z46{euZ60H-$}u3t9H3wUe{J@xTFy;wxh z%+As%Jb&hmy(Prx(QAKPe&2maOhQ83{Am!F?5R_OCkZl+CNn zo96xLg4oFa?%B4$lAcV?w4wRm!wL%MTow=~8}+*PUPs4KbFVD5-_g*)xzIE{P-_9Ug^i&fMSCUNiVU%c%Zf*5yJ)07GyY(Yoc0LTV zGu4JeQ7s410EDrMq2C@p=<0?^AH%M3{sUWJe_v zPD=No1~)X;2ReeTENZ>h5i>cEpAcPL;&e9vINq(pg855uw%b6@iR9nE-(orfFVtkc zfL%Il7};&^-l7fo2&w9k^P3D|ESS}_i=;{u2N`Oe1h%_?$vHJx*R@Se>6MdVQ9uTY zy0vS8yKo(@#67iM|BhV(GemWw4?3POz7Mso>Gpe;B-?QJE`Jk&qFQ3!X5T+!JI%yX z@MKn;rWkzw!-q=oc~{r2n~@^^Z4j! zw!UgG#9Xu?n6JL<{Eee~qM)lhdN)^#J|ZeA`(cLBwTRQxJ@i=KJMc%l(qC_`hZkZV zNJt!?pGRu(gf%uc4w9`R@c-RwWud3nDcf4nW+c!DQsa{|GHOC$Fh}%Rt!%fX-P82J zm+II}u(F#}dku*5mk;;ZQHjJgu8}wAV7lr?Y&`w>A|fE* z;)a*!eC7HG@@IM^?R5L5uAz?%VIhZ@Mqjah+>xQ<$HlIQUOa}0h6mCK@WqC-saeRAg=Mp-=y`y9dFjE`bL zgDq9N!*V5)65CR<$hdi~>F)4y{Chm>`EIxNTs30vF5mw> c-0(37vPbzVBp`+k%#sdhsOqRxDOra8FQ4h@y#N3J diff --git a/minecraft/net/minecraft/src/eui/SteamGUI.png b/minecraft/net/minecraft/src/eui/SteamGUI.png deleted file mode 100644 index ac81171315361eec20cf1f7eb53d5f6cdff48132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3762 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 WU59UubRrj*0?^SgRIgOC4f_YtG&Dv4 diff --git a/minecraft/net/minecraft/src/eui/SteamPipe.png b/minecraft/net/minecraft/src/eui/SteamPipe.png deleted file mode 100644 index 5f4bb528d01814f47003ede29cf06b68de001a59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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%0AbMeZq%L-(Jd-Vy zF=MBQi`Q#dgimUrb8eh-&!^badWCdpM}lCY5H5kcj+(Cpi7livhPmIMC3faVrVn3% z0Z{d7^mcXrad7=}R&|Hx^G&R<&taxi)iuysrB>LLOKm%dmjn0qSK&Q|*k|7u&bO|d zV~%*{W~?;^FY%dD^W}xyBLh=$HV##W9!uh{yfTr^U=y>}Jk*8RGHV;2$x%n{_?o?u9)t6A zJ4zHA_6Icbn3NfqSTGsc#=dh(;!-2PuydPq-dhm20BDK9xD?*KDx+b0m>9Ou3d{KX78_uQD>Rw@__9 zTDaL7h+V+-MO~%pC+IGe%%(7p;6L7o&+F1MKE_fS6{(zYP&VR$9E(ROJR>G#; zc<7ro+^H7>{ZVZ$DhmVdP`<$=(5v%k<)f@S~9zOpBL3t zrN1=J&5h=)eG=6Sfss_ORaHzYu72M>g@cZ=mpp%e>2fsvl=DF-H$RkAek6}9ayt7A zMzV9I%TW4U!^Tsh_B6DFDTdDMj6jKEFm-F{#FGG-vK0OaFxGg3GCDHHzwmW9^*dXq zk|~^SIk-x2#CN^-yTNjJKW8`il__cJ2IhGB(xIVtZmp#o+Hz zcV4>v_Icz=#$GYhd?y6wbUOl?ySC$o*@8MIv8=2t12{LJ2C1d^heP7P#r!$W{$ohU zJ|fjR$S|{h@z|rW=I}z2Nj)$F!V0`q$@M$@we{OV;M@$IeEtAGX^|}ITEsZxxy%v+ zt!GjxJSvI5I5X1oNKLVSW|(_RuH3%0aoe2R<#4MX^>VAFhuiyk(UP4zEH&K?S8pNG z0NQdq*|rEestmX~?UENz4>?0y#IIxTzl-QY91EC8Hh6x$m#x0DvQdGmB_Dyj{wyj!W+ar;sUhQhH-ol}Z226= z^ZcyjrqSGs;(Z4}}=-bC54|py(<=87Vi4QwI&@;I@pbuLVCj zc*EnLV_8tcCfIgd&uLB%t6&dfn5{Qv2L73wu9uM@QBB;wg=LiIa?#SKnNN-H2c~ia z0`iOcC5Ad~-ntYRx3ME#KMeCfJeKsH*Aj*~ll z6?z2)9K|n$6j~e=v!YU>Z6VnoG@Ib-u&TYnxT*8x69PqJwj#~`R z-)J3$ibI)nkdoUX_J$^kJ+fk){2_84La;6R0?=O)2^6hIsl_Mhq_+(H-l^(;gZb!98P=Zr^ixi{jSgMxH7>5YmI)`~tD? zQ`3r$GT0#^iZoQOT-R{HFztzg1!XhV{^vHrsJ_F-TNuCo$DP;E= z^8}7(rG~1RyZxHc8BadsI7dyp%4gbiUfB=ux=lVsNExz^)yWzt!?;*8UWx9d2XQQ8 zqvGTpXhWLs#?GtP%(A9kd$~sJME2mty@o&;u%X6h8O0-SciMhux_b@aAGb;?thh-wdH(F@#%zfqj} z>13Rkwx;|fGIu{zWL=TH0}d1~40WpjZ=XP-f9aIOHR=Yb)RQe}tkDX8j=_9y6ZL3# zYtu~X?Wm)ju_RVSqpr7jo?}UDm1mji6i3ASTL9`zYXsf5Ny3KZbdS~@ZXncs3rofZWiLZ5E6(Y}LFV^|Kvz_U zcTMMC<29+vsn=!Iwv*XQbx6%W`LpNquv6rT%f(mJneNkcKRYY&pe;fR>h;yzKGuuW zXQ(|?XI1kJ9nDoxUaFRqiKWOOP1pKu{p9KK!K^KQp8oVk89Xnsb2(ffy{Js;+$u2@ zzid;t#8FdHH1TkwC(Ib`@aJc3Jic^ct>)oVteA>@WqnIzk2XFE_MjER@h-q=BH$O_ zxN(!z(W3KRoG+5^QhQ;?g#I@L3t+nz3WgQB$yerroUqvBZVe1-VH?*eAri!>4Nb3EMB&y zi$C5y-5Dd)cWFUQiuZmEp*4Pxn=TN*hE?_R69TG)3;BEZ8cI3_m0@?xPn30q z-k$C9gYa8St>8() znS*|UTbnTEtQV=^JCd+OzE7LkYjr3<6dlqV#_i)$gIW*=0nlBNv2<{fnlWDcrfa3D zWWdh1sB$wvm`v2PT@E@t8C4S7YM5_qdUwWmG(X>aU_cn=`d_!AwVYi@Hg~(ZSoMDD zNdE3}I<#Qf8@NK{5W6$GmH$zq?ff=tyLp}hKk+BI9lJYMwwsuRTNO39IG|ZJwvPt4 z5U?4r7%aUR^FwQJvCQkH@jsbWw~<=fo-XR9!~bbH&S&w{H@KK3+Q7_4$mzEdns~)_ zl?`(e3xki6oVtz8bAv#NI-%;jiFAaj$~D*VuhkZ7Ept+M(7sCA%<0X@OiIf%V@o7R z%3{=Mi$r;bg8flLhSP4IeadB}$~}QUhiH(Q!JQ2CZP4GP@e5WOH$j%f1r|pqAI^&J z+a$6{To^P36BMtQvJSZaDNaagYWNmOOJt%G3-(=Y@zo}Dd$*K~LAw3!3Y*VGR_`~z zo+I=-4Rk+yzOGcgZN0Dk>WcVMZKh9p?7Lx_jY2ka$fPlkWV^d>Ki~{|g)*MyMlPic z54NAd@SNXxCZ7AeEuUjn(W>wYw~)>cEt|0lLRB^f1kK2@DC^#KYIVSu zhkN2jt_b*u=??>|J{g(v*q>vEjjXz1UMjI(?)3twV zi^oO~LI)%?-Nbfs^jicQzbvM!$>s(EliSC0JLeV(=XN;BFwRC%DJNCC3`YV!s& zmPFw?xD*x}HF_N^sQ7sl)w%~o<%66@r_&ii5`KHdTZzmv1VQQhUW`8hUHFE6l^oYL zN6>eerSra7*nvJDCzW+wfdnMacEN)Zfakh*56@9Uc^dFPpd-@W^F9zte-&lS0ENv$ z&{{s~N}nAy%X?SXzmnYy+c^T@Rd3+XCI~Z@p1_U#Y9U8vMP!y{`_+TDgXda5`ROuO3ed!=^t<1KUM4R%UsDVLJ=D0)S5-8`&DN6pSxK*T%jo6a2I z{bk;xvm@XIo5iAq@8Rl&rMw%gZ<-7@vrQ{$4A|3(Svk9X4^_{)%3W z*}${DV8HysydkgOGcH0u-Pn!5HXJU(0OJjG%gIix-)QL0RlW=Q1e3uJZZbKC1`iW5;^yRJ!Yn~MBY$yu!Rv9>)MwJ-lQCdQp!;)MX$4hz1fVQ!cR*H^=X@Uu8Bf4E{yYMMA=?gv7f9lK;yy1mc)(?C)`;rthZTDC3fuOlqjM{Y^)CcdXQ1yWb&)2mVYoJZ^B%_D(I&`j{D)v*tjut64rP{`*_o+`Iyn znDqb@+LYGh1t|IbP<;`LfH$7!x+bZFJnoJrB^36@yPo`B-@nQA+#4 zL)Y}JgSSz(*ue_Ci8h`aBsTl8@Y3~WW~*eOs*1SP&$smsnd^VjesF=~dNrzBW!C!p zpnhAdto==KEW|s`Q^C1ckvHMi=Dnx{XaV-9LBa|9LF)MPP!wrVAB~c@SVe`9+klvJ zhC^>1t)fV+w3YrN2SQC!!FU^VA^oCg@xNWbxZ2bKO_9%deThO7`<~0XNlTs*=n_%? z&0*os>}OR6o)W3CwQs{!XXDuL3CiE<6NR}uiKLb~Z8B(lDF`;qoI3W5t#BN3l(6Qb z&ew_dNaG{^QcqoZ5d)kMV2Mz&N~5LKjMJ&3rRWp(0`JP%<${D%?c`%rB#IY~3*!f9 zzpJwlVn326Wvc1tR!JM$H*q|JvL}D*LVcOASC|NekPQ$e=3iYlo`UEWAW;|r$_f-u zb}@^kmFYWQ|KLzMHoM52&-~oxwYH$AzYrkDP|ts~@%zTy2V+KvHHNMo_2|?>BxBR{ zXG;$+>Ja=y84~n+*5SN%2$VVE^VdTN|M9-f4ceJ=RAGgd(mG6e{VPy5)ATX5kxduwcb9>~$)I&k}_ zF!oc@Q8ro@&GERre*+QirtO{jsv@EY-py)xp{Y}V$-f|F#K^2b8Oo6QtSs1h>iQOw znDq0Lf0b%+oP4e@)tQR#Tf3&w4i3LZrFmbEramocOn6uNhRRzcZpbRMdq{g$=oQ$5 zHhytIf$D0!Zrm~?bq78AM~cmco)Y%t0If5Ex6WudMPb^!>j&^>`=!!z4Zj!P(5=C$V!53_%;Xz9&Q6sMVKBw+L?$v-^#XDC+nC zJo7XtvwhI^16W{in;ix1x&yg7JJb~<7En9B#KWxqm~#3=7O{Vi(gT7#5UT8-c~7b& z2{kExU@GM9D%5kEJ6Tp53yL~ zf6*N#PpwoL6|xUrik1PA0b=TjGklrjVht!j-&L(fw${`qd1bPE`Az(%F_IJflR7-B zzCmGf=?LgsBjO&5_4ck7rhvG8c01LT0kuyxnx63`c4JG-lNE_IWVN@;-AyIrwC?zkES-gS3gJd5e^He zQ#@X`9P#`X-F)SDJ9W1Eb~nJI?ZD^@^N5HkC$K!=y)!F_f`hhpYj}n`{Kt#2XPRs^ zT8XUK?5keYXegD#q}%aq2z~EB@*l_FdO`E=T2Ps&%0OgO*1tk4jvM^Uf@Lj~xX?1nW%gL#6Sdw_L-WIRYgU7rx&IA7YV}FTTP4OV;cz?BptUln1!-x*)u*FbS zy_MLn*}Zl0s^T0mDEkMur;{J4$Z3P-BkB-cRrl4mkY(s;mk>&gm!VoX1kKi{Vf<`! zcj9$!-Az0EVN4u%4!H-3((>E?=I?F1%)E0iE9m-7j-~MI^OEf1SF41KceZnh*#hQ_ zDl-LfWA2-o(^Y5%|EK15Wk|kR=<(2NhTm=b0C=*O3gCYB9;$P#D)vLXA3MP-uJD+nk`UEM$sH#n;VRmf~^s>xo*u$bZi2pK%c$ zGVkN}i9*pRxSVDB*EGK{dTmM8;X2PEyZ>T5e)teHjkPW=gb0-eg;#YmF3kqVApEGzh=AKl*@DLJq z-?NFcK^-?Y3CSlCxz48tkk8T^Ff^IW&m7mh5GRwMlexq{io z?Yn?ZuJXUx*K1GG4b2R#EvDpD70Ty+mEcI&{`lU)QY`yeX4+zkwJY_DmkkcFWrltv z?F37_%_A$J2N{r6%{Q%qnxg*~%4tFU)Rc(G?d7#Lg=wS*x$9dNJdXE2rH@VicOE9< z(ZZBLMUdTBEpjVSSxjpIV{xK0oYJbg23yhOkrcToVz=wR;uX`lWM|&ycLJIex@*T3 zSAE|9z--srPtLi0J1lDjx!1L5w6p}MFAr{h2mH$p=H99VY&^MF6{4Lkk?&HOj-f{Q z7zM9_(&hee_{;Mj2c-U2X?l5uUX!mO_ZBJSLDKOa2HSk^HcTQ@EUwli7tsG6 zsy}&e&4!QW+Nvqi|9@g)5sEu}^LOlCuXSk3G|_yz5r$84p`)XAlNvYbxPDH?Vd4pI zcHwk14N=tJwffj6LmGUUZ_hoJC^1i8u_@MCHC`3FYca-OEX0roH_|;a5!q`wmA6(F zps$>@_x{d;2bKb5Gmk6^?@u2#iu>PT;t;RN+PxYp^y)Wz=;a9n4Do2VMO@Zty?<*lv`K1Eao#J%+5XsCDr7n>XCB+n zjD|ywN#zi9ng>FJNnZTrx5==^!|J5ULp!EEE_Cyu0k$ z{l%KM{i`&0j|6$9ogH)_nRj~u+%+Y6_IP6n`nA5HA^fpT@_B;pzkz2v&lLGbt)`=9 zo;(tty@TSe0WF8+6a}A@Uxow9#Rb~rQPcingxM1D z&4-nhhY*Z7kvZGTqMit}z=|^;QcJA4?`MtH%*FodShIlzlYSK~UE)uFqUpl zFTu{bzs0eAWZyL1-jfJ#naA!!tsT(RACe12hI@2$7!PLYyJK?h_Tt`?QF7=Cin>(e z9#mabRnydj-F*QDq8ouw4EXv@=g>26hAk)W=Ub`ilX~lv=4P!P|2GJTXM0c|b9)t2 zK(z);W3eyo70-EkKP%RpifkC}%*fPnvDT-_y(OL1w?8%ekgtTLFx1tPZ{AuTC@MMR zC}Jg&Rr|YXQir`^lFtv?*p;InneFk>-pCNfY9>B}F2G~;7s_rxdxCkt6mcQmkT=W< zc$>EuP~VeQs!>Xt7AZ?eNSpnQ%j3>?FR48S#m)ctEqcRTmmR*yZu{C9-;*D!g<<}% z02;4l+{)-e&?|-bpLP&1Vfj|k5J%xMp>K|j(@5YOgoii1sI6@9e2~r#wy7U+OmjTU zY)(#PauEJ)=X`l??vvf&e{)gE+BxbPSl?XuHa7q^a_Vuu74hj=wSpmw&*mZJ^$AeN zbYc1Lf3{6ztER1#lVHPq))u%kuZzm^p(paFtBX`1>($#*JhWVpGl?GDz+uEgJ@<&i z;+;d-d#(mL^o$-O#baC$!axK4wuCGom0Zsfig{CzZeeRQ6Jt2G6?57(X3?eH!F=E2)3FtiuHGW=`37qcTOPqK z#w(8f4YBY>Qp`C!v_vYJT4!x&wgXsH#lY>W$rM@qB&sqS`&y3%Uk-SsG5JbCc zjRj~k7Bd@Wp0+IC_*xGeF^twkB$`oQevj97x91;(KwVoD({8gPm7e>455pk=@KJjv zYSnf&DVEP|{yiW-6X`8S`yGgNR-j56bjMe(67BjkcYO2zN%lTQn6WqHcn~VRoS%<+ zi@MIMnTP$M0-{0S4FTxML%|0>fEh;Qt?_z(#aUT^2rg1Gc1lRX2W zydt&AYLH{A!8sY{orW|?e+`$lJDN_r*CgS?|EHa6k7v5=|3gLH!c%UC&?woIat^ga zC8y9z&8bicNywbTP)d;vEjf%mNpm-+Sjb_Ba*XOmOPHi>P9s|mGq&GX&;9)B^?UtZ z_wziz|9-F6{m=gR?%H*I_PIXa&*6Q2-d7#ag>k8J#d&0`4VBJz7X$iZ0Ww@gLsjdY zt%c5RZn`j#1`z9-feeAUWhtQp$IFuDaQF4Yad z^?t%zl?=Ay^;^FJpxvkmcIpAY7bRLRYH0(vD4hx6Q!{Cj6q4X&6!^DgDJcyAX=T?H z>IT2bwThVGpCZB{F;*q7I93Zm+}AD{VY5DZ;{eeH1z(i_X^m+o1|pr&;yPi1FTW?6 zvWg^1X$?TT7I!EzU@&%184>m>ioruXdk>VYH6cvtYBgBX+*Y<(B=>ZTI#A}$WgO0x zc-pOmZ|iSN(O(xIXe;=EO1@tB&rnG)L^Qn>#mfOld7vHGMbfG^>74f8O&*_qN2b5g zl`{9J{K~_}%EirBhQ3d3wE~V|`gcT(%!vIWF{1GNJ5QnfeK|t)-7McYdVDm>1&mL1 z0M1NY1wkz-mPg^T&w&^iXxxW=!+GB%Ua5Vu?Ahm%&}bpm`q|_y6Tr~zB4;b# zWlUC%UTwc*REnKpV<$Wbh5@-$Q%N8(HR>wj9`X!x6bwdsS!q6Gj#)UH6$OJ-Lm|<(_S3!3$g3P{hM3UH=mi?FehYIQk6zc_fa+4g$H~cUy}sA=Z|QXHzUf(bzoC1N z`R)@(gYNbibB-r(eP#60@liRGP42LSi)J3bvM+OUQ^U-2G4reN#UUH&fO=POKJ?=s zQF$f!QIFUMZ=Jn+=SsuXm>+B*5rY7iFKrx>@Cg7_T%|5AG26E9ut}%TW)&L*7v?`E z&NOb;UX`b*pNJM7R4I%3tE#r>mtCrPcq5+#5#BFEw4e(SE zA(9Tzd}x#S@Nq>ayF+%p2`|pYIcW5_QtELfn3bYiuMc)lex9b{maWcTj%48f$Wqc_S@XO!&x^=3B?IfPY5wz8(M&J&LQdk zuO3|QO~3Gm!>29$Qp$169b>~N2|~R9M+1;%SHo=r-^kian=Y<#Ipwdnh89n7EL}Ea zlC^1hB)`;M8>jq=)*X(M_>N_TV09`CabbmbnoQPrR(iv>Ke{gGCw;&^>r1xfqxeno zS|&>Vsm)eR&CuUmHv!ndBcNdITe@@T7&t1dXYO<7v&k<`wFR^bO&L=Sw_;jSJT`@u z#0;-k+6|&=sa4bAvvupevlu}daeyUlnkba;W=w+dTjg+b5zQ|oB$Y~K#l*z3yEiyk z6L!y9r7Cu&_r!2L^8^XVw2fEN&SiQH;QqU;WxQ6AgKkT?eK6o4;C?S=Ed&Iz+YM6) zpKIy1k6-vaeX!I2C$4O6v9w!#^un#qw{uST)!UtNbf~$|CoKOD8x;Sll_;0)g!35c zBU&AE*~s$_4o)7atVAcI0xkV{aND~O!++oob5*zP$Kq@?APMTYvB}`imanhuF9Pa! z%8#_F{NA>?zJDfwhf=m7g9?0)Ws|M7i{jz#8|7|JF;d9`#AeXBREMjhpVt#Zt#@ra zePZM4M9B4Eoaq|CaP*|Jv(R_+Z`R3JP^j`B!5E;=wgBKl4vdbRlWSUx{pvtl`lGNj zu43wK_$Rcm2aH`wx?N%u_Z?bLTmw}C&H75>{HBR5&|N8(36(g@zQ@C=Z!b$bD@~sd zqPu(FBeo&98tJ}0l312`fnm#-sJpErok-%>;JI(>z~0aIkEJcbJFoh;N+OqgFWzC& z@HA2f)XR4fE2H*2cTi^d)!r!C^5;(#DM@Wk5yF9oOOZu;%wVi?kpI218sV<`pP6;OgKHLVeIv%7Q%h@r_GMYX!Ui`y)}(5dtc%S4BDKb>5`UXDx?r_v5aTG9kc2IBniq+hMI#K_ zH|uM|p{gQyHDz*gq9$Ux-24ja%OSmnl=kZhx7BqN)D>LRHR1`o0;R&Nb)1jtoK#4Y zP*GqU{o9sv%^&o&&c~a#K8Uymi+OUbR3~q;0;1cb)19Aj?qL#j^Xvfr8)90T| z8i0|+K(m$4m^6H+hQA3b9(~*o1d?X1-3uUOxi@eVO?dA|@Gd$zA#S9y*fABGbOBfm zQU@;?Gi51)u>?-oy&`(4SKR=aLMe9aivIc{QMpY&F)?wX7SYAL0IVnuLU<~k5+>za zpP~zbXvmnr_9_n5Stppc#IMILiX5i3miJ~`d@Ri!S-JNurcp(3P?Rwe8iNonod?fQF%^r}~Ei8g-VsBHU@;>;QqfbroDR~Rwj4n3S zmsrNz8%8=ej1)q>(Cm+uMKz*#K_9ES_f$s$5OO!E@L(v&1KEnb?`eFeR3Lqb>~t88e+hiJcC;{}5c^ ztYgSQeDK)oqTvD?p3#x4OH0=@tG%|%hWqJ7n++>D&Rvj5XR*f3JA8Je&M%(7(z@(##ork>+0b(QVnVaRP#N@g|b%zkcrG z(W^NKaR>P)Nta{iQ1sA9IEpnN)nS_Fl}$EE*0MNRK(UPify6)$fCtj6nGIkATnu96 z>kU=#$ea2{v7M%`=_~F!^aqLu7YltE-N;>IMuF2&Gc~#pn~W~6Wvn$C&0np5pvia7 z5YVRu8s?&LP8?uf`#N4-5h5ezb6mj1zgG&>j<7}$^PB+V_xkVCsS&z4VWxXdT>ZcrU~PD zPXD#sGbqOEN)7fhg+aB=)caf3M|_5$T~cy+&U`IDxAz7E*vjY;|K%U{n` zo5y0Oqp2NwcFM~Lue5J&Ih=us6|LB(on*MJOLv_xr`Cq*?33Mk8cjoPh?r~R^w)nf z#)AUFTjE*tp@3Pw*qZ)Y)~+RRqfmzMEY7lhQr|#89Wj^WrN58&{vfiu3@)%ce*Aca zJNP1Xz+1J@$Ue80Vufcz^O8nk^-d6+5_r{ z-UbkvV4YT*2TwRe}8shrNHaY;S>b<7&yDIEPWFv(p zSok7xN&O9icT*=L)Zka`&K*VlJMc&>+{$Wd__b(9uimtIzIEC|Fe^$T=|Xt@RfN`u zD*t6HHoDUFWlU4tufY2cfj~$EUl+icsTR|<9mqPJee=6*FwxQJ6pDepc~uTVG{-s^ z$+E5H@uFtgEKd{GC<1-IVV0#PtcyP!>Q?AK2#a3Q^D>qdWs$XW?EPdw=hlPvl~_(q zrU59S8?$rtu#98Z**Yv74-ea!>`&+J=R*N+U|`R)l5P344+NOl*`)JIi&osE;oVJPgI?ul znTrklc_Jy#r;~8GrjsNbAQkM(dFKCMj}x8$2#GZ=gh0%Y$l<{8gTp0IVqjviLKgvD z(+GuH%(V}R0T;&rFX{MarB7AIz&%f=q^eVdh+&oiKz1ulKswqhW_ugWW0aVZqLQznrB>C;fg z^Va!xK3_|lOe7LnS%oCVYOA}Z1?KA0V=jazlw^~+9kSbD?RvP0I)u%Fidb@0yQ%#| z?LPlOGNqGXk=B2iDY-VQw3k`n%N(-yA|p0DmN)W>%|oNTv(rf{Z}8yA`k~=15#@K0 z(w>ydh{LI0(l%qqOgVv4_0IN}1{qeMI8dCefK*;u;kuX0)P?7epY&G6C?sDKrqDR2 zW-?Y|`E$vaGV#1!ZYJPG!8cFE{W%M1ZTs?m0bJrP?IZ)y>b)p@G{a*ij0>Dl-?(wZ zN^3z4JOTtO-|Pb@SkN9wAv;pEx@c%`L%rls@F8~fRj|9XlIuQX&6bE7SJukPkSu5^ zdNs#y%QjH7FjM0DrIB(VKrj$!-C951+BN`x6Y#Z|{7_>V>Yt=WGJ{~^==_UvEF z3H<8E6#v%nIMC0^0B+U%zb*Wif&f4NXS(}KL4PUeyTAE!Gx?LZ@Bfzt#l6W9NuKzv WV**nd(hB$(kd4LhqoqgAUH>ok(3-da diff --git a/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java b/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java deleted file mode 100644 index 0f74db8d..00000000 --- a/minecraft/net/minecraft/src/pipes/api/ILiquidConsumer.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.minecraft.src.eui.pipes.api; - - -public interface ILiquidConsumer -{ - /** - * onRecieveLiquid - * @param vol - The amount this block received. - * @param side - The side of the block in which the liquid came from. - * @parm type - The type of liquid being received - * @return vol - The amount liquid that can't be recieved - */ - public int onReceiveLiquid(int type, int vol, byte side); - - /** - * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param side - The side in which the electricity is coming from. - * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveLiquid(int type, byte side); - - /** - * @return Return the stored liquid of type in this consumer. - */ - public int getStoredLiquid(int type); - - /** - * @return Return the maximum amount of stored liquid this consumer can get. - */ - public int getLiquidCapacity(int type); - -} diff --git a/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java b/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java deleted file mode 100644 index 64873561..00000000 --- a/minecraft/net/minecraft/src/pipes/api/ILiquidProducer.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.minecraft.src.eui.pipes.api; - -/** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia - * - */ -public interface ILiquidProducer -{ - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param maxvol - The maximum vol or requested volume - * @param side - The side - * @return vol - Return a vol of liquid type that is produced - */ - public int onProduceLiquid(int type, int maxVol, int side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canProduceLiquid(int type, byte side); -} \ No newline at end of file From 5a0fd881823734a2dc00712ced2081c14cea39f4 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Thu, 23 Aug 2012 04:02:25 -0400 Subject: [PATCH 049/115] Init 1.3.2 Update upload Most of it is working just need some more work before can be call Updated. Still have to fix model rotations, Add new steam engine, Add Eletric motor block, Add crank Shaft, Fix all models to fit to pipes, Re do pipes to look nicer. Most likely i need to fix both steam engine and boiler's share resources methods, and Generation methods --- 1.3/common/EUI/SteamPower/BlockMachine.java | 289 ++++++++++ 1.3/common/EUI/SteamPower/ItemCoalFuel.java | 59 ++ 1.3/common/EUI/SteamPower/ItemMachine.java | 49 ++ 1.3/common/EUI/SteamPower/ItemParts.java | 70 +++ 1.3/common/EUI/SteamPower/SteamPower.java | 113 ++++ 1.3/common/EUI/SteamPower/SteamProxy.java | 72 +++ .../EUI/SteamPower/TileEntityMachine.java | 136 +++++ .../EUI/SteamPower/TileEntityNuller.java | 29 + .../EUI/SteamPower/api/IHeatConsumer.java | 22 + .../EUI/SteamPower/api/IHeatProducer.java | 14 + .../SteamPower/boiler/ContainerBoiler.java | 59 ++ .../SteamPower/boiler/TileEntityBoiler.java | 540 ++++++++++++++++++ .../SteamPower/burner/ContainerFireBox.java | 42 ++ .../SteamPower/burner/TileEntityFireBox.java | 301 ++++++++++ .../turbine/ContainerGenerator.java | 41 ++ .../turbine/TileEntityGenerator.java | 359 ++++++++++++ .../EUIClient/SteamPower/GUIFireBox.java | 91 +++ .../EUIClient/SteamPower/GUIGenerator.java | 79 +++ .../EUIClient/SteamPower/GuiBoiler.java | 88 +++ .../EUIClient/SteamPower/ModelEngine.java | 242 ++++++++ .../EUIClient/SteamPower/ModelFurnace.java | 82 +++ .../EUIClient/SteamPower/ModelTank.java | 155 +++++ .../EUIClient/SteamPower/RenderBoiler.java | 30 + .../EUIClient/SteamPower/RenderFurnace.java | 29 + .../SteamPower/RenderSteamEngine.java | 29 + .../SteamPower/SteamClientProxy.java | 39 ++ .../EUIClient/Textures/BoilerGui.png | Bin 0 -> 1876 bytes .../EUIClient/Textures/CopperWire.png | Bin 0 -> 3196 bytes .../EUIClient/Textures/DefaultPipe.png | Bin 0 -> 770 bytes 1.3/minecraft/EUIClient/Textures/Furnace.png | Bin 0 -> 2426 bytes .../EUIClient/Textures/GrinderGUI.png | Bin 0 -> 1284 bytes 1.3/minecraft/EUIClient/Textures/Items.png | Bin 0 -> 29993 bytes 1.3/minecraft/EUIClient/Textures/SteamGUI.png | Bin 0 -> 3762 bytes .../EUIClient/Textures/SteamPipe.png | Bin 0 -> 3196 bytes .../EUIClient/Textures/WaterPipe.png | Bin 0 -> 3192 bytes 1.3/minecraft/EUIClient/Textures/blocks.png | Bin 0 -> 22475 bytes .../EUIClient/Textures/tankTexture.png | Bin 0 -> 658 bytes 37 files changed, 3059 insertions(+) create mode 100644 1.3/common/EUI/SteamPower/BlockMachine.java create mode 100644 1.3/common/EUI/SteamPower/ItemCoalFuel.java create mode 100644 1.3/common/EUI/SteamPower/ItemMachine.java create mode 100644 1.3/common/EUI/SteamPower/ItemParts.java create mode 100644 1.3/common/EUI/SteamPower/SteamPower.java create mode 100644 1.3/common/EUI/SteamPower/SteamProxy.java create mode 100644 1.3/common/EUI/SteamPower/TileEntityMachine.java create mode 100644 1.3/common/EUI/SteamPower/TileEntityNuller.java create mode 100644 1.3/common/EUI/SteamPower/api/IHeatConsumer.java create mode 100644 1.3/common/EUI/SteamPower/api/IHeatProducer.java create mode 100644 1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java create mode 100644 1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java create mode 100644 1.3/common/EUI/SteamPower/burner/ContainerFireBox.java create mode 100644 1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java create mode 100644 1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java create mode 100644 1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/GUIFireBox.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/GUIGenerator.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/ModelEngine.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/ModelTank.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java create mode 100644 1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java create mode 100644 1.3/minecraft/EUIClient/Textures/BoilerGui.png create mode 100644 1.3/minecraft/EUIClient/Textures/CopperWire.png create mode 100644 1.3/minecraft/EUIClient/Textures/DefaultPipe.png create mode 100644 1.3/minecraft/EUIClient/Textures/Furnace.png create mode 100644 1.3/minecraft/EUIClient/Textures/GrinderGUI.png create mode 100644 1.3/minecraft/EUIClient/Textures/Items.png create mode 100644 1.3/minecraft/EUIClient/Textures/SteamGUI.png create mode 100644 1.3/minecraft/EUIClient/Textures/SteamPipe.png create mode 100644 1.3/minecraft/EUIClient/Textures/WaterPipe.png create mode 100644 1.3/minecraft/EUIClient/Textures/blocks.png create mode 100644 1.3/minecraft/EUIClient/Textures/tankTexture.png diff --git a/1.3/common/EUI/SteamPower/BlockMachine.java b/1.3/common/EUI/SteamPower/BlockMachine.java new file mode 100644 index 00000000..6a5ac1bf --- /dev/null +++ b/1.3/common/EUI/SteamPower/BlockMachine.java @@ -0,0 +1,289 @@ +package EUI.SteamPower; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import universalelectricity.basiccomponents.BasicComponents; + +import EUI.SteamPower.boiler.TileEntityBoiler; +import EUI.SteamPower.burner.TileEntityFireBox; +import EUI.SteamPower.turbine.TileEntityGenerator; +import net.minecraft.client.Minecraft; +import net.minecraft.src.*; +import EUI.SteamPower.*; +import EUIClient.SteamPower.GUIFireBox; +import EUIClient.SteamPower.GUIGenerator; +import EUIClient.SteamPower.GuiBoiler; +import net.minecraftforge.common.ForgeDirection; + +public class BlockMachine extends universalelectricity.extend.BlockMachine +{ + + private Random furnaceRand = new Random(); + private static boolean keepFurnaceInventory = true; + + public BlockMachine(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + this.setCreativeTab(CreativeTabs.tabBlock); + + } + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + par3List.add(new ItemStack(this, 1, 3)); + par3List.add(new ItemStack(this, 1, 15)); + } + @Override + protected int damageDropped(int metadata) + { + return metadata; + } + @Override + public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) + { + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof TileEntityFireBox) + { + if(((TileEntityFireBox)tileEntity).generateRate > 0) + { + int var6 = ((TileEntityFireBox) tileEntity).getDirection(); + float var7 = (float)x + 0.5F; + float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; + float var9 = (float)z + 0.5F; + float var10 = 0.52F; + float var11 = par5Random.nextFloat() * 0.6F - 0.3F; + + if (var6 == 5) + { + par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 4) + { + par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 3) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 2) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + } + } + } + } + @Override + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); + int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); + if(metadata > -1 && tileEntity != null) + { + if (side == 1) + { + switch(metadata) + { + case 0: return 6; + case 1: return 4; + case 2: return 7; + case 3: return 4; + } + } + //If it is the back side + else if(side == ((TileEntityMachine) tileEntity).getDirection()); + { + switch(metadata) + { + case 0: return 5; + case 2: return 8; + case 3: return 4; + } + } + + + switch(metadata) + { + case 1: return 0; + case 2: return 2; + } + } + return 1; + + + } + @Override + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 2: tileEntity.setDirection(5); break; + case 5: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + case 4: tileEntity.setDirection(2); break; + } + + return true; + } + /** + * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the + * block. + */ + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntityBoiler) + { + TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPower.instance, 1, par1World, x, y, z); + } + if(blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPower.instance, 0, par1World, x, y, z); + } + if(blockEntity instanceof TileEntityGenerator) + { + TileEntity var6 = (TileEntityGenerator)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPower.instance, 2, par1World, x, y, z); + } + } + + return true; + } + } + @Override + public TileEntity createNewTileEntity(World var1,int meta) + { + switch(meta) + { + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityGenerator(); + case 15: return new TileEntityNuller(); + } + return null; + } + + /** + * Called when the block is placed in the world. + */ + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(5); break; + case 1: tileEntity.setDirection(3); break; + case 2: tileEntity.setDirection(4); break; + case 3: tileEntity.setDirection(2); break; + } + } + /** + * Called whenever the block is removed. + */ + @Override + public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ + if (!keepFurnaceInventory) + { + TileEntityMachine var5 = null; + TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); + if(entityBox instanceof TileEntityFireBox) + { + var5 = (TileEntityFireBox)entityBox; + } + else if(entityBox instanceof TileEntityBoiler) + { + var5 = (TileEntityBoiler)entityBox; + } + if (var5 != null) + { + for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) + { + ItemStack var7 = var5.getStackInSlot(var6); + + if (var7 != null) + { + float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + + while (var7.stackSize > 0) + { + int var11 = this.furnaceRand.nextInt(21) + 10; + + if (var11 > var7.stackSize) + { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); + + if (var7.hasTagCompound()) + { + var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); + } + + float var13 = 0.05F; + var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); + var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); + par1World.spawnEntityInWorld(var12); + } + } + } + } + } + + super.breakBlock(par1World, par2, par3, par4, par5, par6); + } + @Override + public String getTextureFile() + { + return "/EUIClient/textures/blocks/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } +} diff --git a/1.3/common/EUI/SteamPower/ItemCoalFuel.java b/1.3/common/EUI/SteamPower/ItemCoalFuel.java new file mode 100644 index 00000000..8a25c219 --- /dev/null +++ b/1.3/common/EUI/SteamPower/ItemCoalFuel.java @@ -0,0 +1,59 @@ +package EUI.SteamPower; + +import java.util.ArrayList; + +import net.minecraft.src.*; + +public class ItemCoalFuel extends Item +{ + + public ItemCoalFuel(int par1) + { + super(par1); + this.setItemName("CoalDust"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 0; + case 1: return 1; + case 2: return 2; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/Items.png"; + } + public String getItemName() + { + return "CoalDust"; + } + + + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalNuggets"; + case 1: return "CoalPellets"; + case 2: return "CoalDust"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) { + + itemList.add(new ItemStack(this, 1,0)); + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,2)); + + } +} diff --git a/1.3/common/EUI/SteamPower/ItemMachine.java b/1.3/common/EUI/SteamPower/ItemMachine.java new file mode 100644 index 00000000..5a41ce2d --- /dev/null +++ b/1.3/common/EUI/SteamPower/ItemMachine.java @@ -0,0 +1,49 @@ +package EUI.SteamPower; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.src.*; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + this.setTabToDisplayOn(CreativeTabs.tabBlock); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + par3List.add(new ItemStack(this, 1, 3)); + par3List.add(new ItemStack(this, 1, 15)); + } + @Override + public int getMetadata(int metadata) + { + return metadata; + } + @Override + public String getItemName() + { + return "Machine"; + } + @Override + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalProcessor"; + case 1: return "Boiler"; + case 2: return "FireBox"; + case 3: return "SteamGen"; + case 15: return "EnergyNuller"; + } + return this.getItemName(); + } + } + diff --git a/1.3/common/EUI/SteamPower/ItemParts.java b/1.3/common/EUI/SteamPower/ItemParts.java new file mode 100644 index 00000000..22255215 --- /dev/null +++ b/1.3/common/EUI/SteamPower/ItemParts.java @@ -0,0 +1,70 @@ +package EUI.SteamPower; + +import java.util.ArrayList; + +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; + +public class ItemParts extends Item{ + + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 3; + case 1: return 4; + case 2: return 5; + case 3: return 6; + case 4: return 7; + case 5: return 8; + case 6: return 9; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/Items.png"; + } + public String getItemName() + { + return "parts"; + } + + + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "Tank"; + case 3: return "Valve"; + case 4: return "Tube"; + case 5: return "Seal"; + case 6: return "Rivits"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,4)); + itemList.add(new ItemStack(this, 1,5)); + itemList.add(new ItemStack(this, 1,6)); + + } +} + + + diff --git a/1.3/common/EUI/SteamPower/SteamPower.java b/1.3/common/EUI/SteamPower/SteamPower.java new file mode 100644 index 00000000..ede15267 --- /dev/null +++ b/1.3/common/EUI/SteamPower/SteamPower.java @@ -0,0 +1,113 @@ +package EUI.SteamPower; +import net.minecraft.client.Minecraft; +import net.minecraft.src.Block; +import net.minecraft.src.ItemStack; +import net.minecraftforge.common.Configuration; + +import java.util.ArrayList; +import java.util.Map; +import java.io.*; + +import EUI.BasicPipes.BasicPipes; +import EUI.SteamPower.boiler.TileEntityBoiler; +import EUI.SteamPower.burner.TileEntityFireBox; +import EUI.SteamPower.turbine.TileEntityGenerator; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.PostInit; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.Instance; +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.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; + +import universalelectricity.UniversalElectricity; +import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.network.PacketManager; +@Mod(modid = "SteamPower", name = "Steam Power", version = "V4") +@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) + +public class SteamPower{ + static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); + private static int BlockID= configurationProperties(); + public static int genOutput; + public static int steamOutBoiler; + public static int pipeLoss; + public static int boilerHeat; + public static int fireOutput; + public static final String channel = "SPpack"; + public static Block machine = new EUI.SteamPower.BlockMachine(BlockID).setBlockName("machine"); + @Instance + public static SteamPower instance; + + @SidedProxy(clientSide = "EUIClient.SteamPower.SteamClientProxy", serverSide = "EUI.SteamPower.SteamProxy") + public static SteamProxy proxy; + public static String textureFile = "/EUIClient/Textures/"; + public static int configurationProperties() + { + config.load(); + BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); + genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); + steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); + boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); + fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJMax", Configuration.CATEGORY_GENERAL,250).value); + config.save(); + return BlockID; + } + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); + GameRegistry.registerBlock(machine, ItemMachine.class); + } + @Init + public void load(FMLInitializationEvent evt) + { + proxy.init(); + GameRegistry.registerTileEntity(TileEntityNuller.class, "EUNuller"); + //Names............... + LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); + LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); + LanguageRegistry.addName((new ItemStack(machine, 1, 3)), "SteamGen"); + LanguageRegistry.addName((new ItemStack(machine, 1, 15)), "EUVampire"); + + + } + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + proxy.postInit(); + UniversalElectricity.registerMod(this,"SteamPower", "0.5.1"); + //Crafting + /** + * case 0: return new TileEntityGrinder(); <-Removed + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityGenerator(); + case 14: return new TileEntityCondenser();<-Removed + case 15: return new TileEntityNuller();<-Just for testing Not craftable + */ + GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(BasicPipes.parts, 1,5), + '@',new ItemStack(BasicComponents.itemSteelPlate), + 'O',new ItemStack(BasicPipes.parts, 1,1), + 'V',new ItemStack(BasicPipes.parts, 1,6)}); + GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", + 'F',Block.stoneOvenIdle, + '@',new ItemStack(BasicComponents.itemSteelPlate)}); + GameRegistry.addRecipe(new ItemStack(machine, 1, 3), new Object [] {"@T@", "PMP", "@T@", + 'T',new ItemStack(BasicPipes.parts, 1,0), + '@',new ItemStack(BasicComponents.itemSteelPlate), + 'P',Block.pistonBase, + 'M',new ItemStack(BasicComponents.itemMotor)}); + } + +} diff --git a/1.3/common/EUI/SteamPower/SteamProxy.java b/1.3/common/EUI/SteamPower/SteamProxy.java new file mode 100644 index 00000000..c82623ac --- /dev/null +++ b/1.3/common/EUI/SteamPower/SteamProxy.java @@ -0,0 +1,72 @@ +package EUI.SteamPower; + +import universalelectricity.basiccomponents.GUIBatteryBox; +import universalelectricity.basiccomponents.TileEntityBatteryBox; +import EUI.SteamPower.boiler.ContainerBoiler; +import EUI.SteamPower.boiler.TileEntityBoiler; +import EUI.SteamPower.burner.ContainerFireBox; +import EUI.SteamPower.burner.TileEntityFireBox; +import EUI.SteamPower.turbine.ContainerGenerator; +import EUI.SteamPower.turbine.TileEntityGenerator; +import EUIClient.SteamPower.GUIFireBox; +import EUIClient.SteamPower.GUIGenerator; +import EUIClient.SteamPower.GuiBoiler; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class SteamProxy implements IGuiHandler{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); + GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + GameRegistry.registerTileEntity(TileEntityGenerator.class, "generator"); + + } + 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) + { + case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + case 2: return new GUIGenerator(player.inventory, ((TileEntityGenerator)tileEntity)); + } + } + + 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) + { + case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + case 1: return new ContainerBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + case 2: return new ContainerGenerator(player.inventory, ((TileEntityGenerator)tileEntity)); + } + } + + return null; + } +} diff --git a/1.3/common/EUI/SteamPower/TileEntityMachine.java b/1.3/common/EUI/SteamPower/TileEntityMachine.java new file mode 100644 index 00000000..a57975dd --- /dev/null +++ b/1.3/common/EUI/SteamPower/TileEntityMachine.java @@ -0,0 +1,136 @@ +package EUI.SteamPower; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.electricity.TileEntityElectricUnit; +import universalelectricity.extend.IRotatable; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import net.minecraft.src.*; +import net.minecraftforge.common.ForgeDirection; +public class TileEntityMachine extends TileEntityElectricUnit +{ + public int facing = 0; + private int count = 0; + public TileEntity getSteamMachine(int i) + { + int x = this.xCoord; + int y = this.yCoord; + int z = this.zCoord; + + switch(i) + { + case 0: y = y - 1;break; + case 1: y = y + 1;break; + case 2: z = z + 1;break; + case 3: z = z - 1;break; + case 4: x = x + 1;break; + case 5: x = x - 1;break; + } + TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntityMachine) + { + return aEntity; + } + + return null; + } + + public int getDirection() + { + return this.facing; + } + + public void setDirection(int i) + { + this.facing = i; + } + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", this.facing); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.facing = par1NBTTagCompound.getInteger("facing"); + } + + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + + + public int getSizeInventory() { + // TODO Auto-generated method stub + return 0; + } + + public ItemStack getStackInSlot(int var6) { + // TODO Auto-generated method stub + return null; + } + @Override + public boolean canUpdate() + { + return true; + } + public Object[] getSendData() + { + return new Object[]{}; + } + public int getNumSide(ForgeDirection side) + { + if(side == ForgeDirection.DOWN) + { + return 0; + } + if(side == ForgeDirection.UP) + { + return 1; + } + if(side == ForgeDirection.NORTH) + { + return 2; + } + if(side == ForgeDirection.SOUTH) + { + return 3; + } + if(side == ForgeDirection.WEST) + { + return 4; + } + if(side == ForgeDirection.EAST) + { + return 5; + } + return 0; + } + + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + count++; + if(count >= 10) + { + if(!worldObj.isRemote) + { + PacketManager.sendTileEntityPacket(this, SteamPower.channel, getSendData()); + } + count = 0; + } + } +} \ No newline at end of file diff --git a/1.3/common/EUI/SteamPower/TileEntityNuller.java b/1.3/common/EUI/SteamPower/TileEntityNuller.java new file mode 100644 index 00000000..28ceb6c9 --- /dev/null +++ b/1.3/common/EUI/SteamPower/TileEntityNuller.java @@ -0,0 +1,29 @@ +package EUI.SteamPower; + +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.extend.IElectricUnit; + +public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { + + public float electricityRequest() + { + return 100; + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) + { + return true; + } + public float getVoltage() + { + return 1000; + } + public int getTickInterval() + { + return 1; + } + public boolean canConnect(ForgeDirection side) + { + return true; + } +} diff --git a/1.3/common/EUI/SteamPower/api/IHeatConsumer.java b/1.3/common/EUI/SteamPower/api/IHeatConsumer.java new file mode 100644 index 00000000..6b5e1c28 --- /dev/null +++ b/1.3/common/EUI/SteamPower/api/IHeatConsumer.java @@ -0,0 +1,22 @@ +package EUI.SteamPower.api; + +/** + * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. + * @author Darkguardsman code sourced from Calclavia + * + */ +public interface IHeatConsumer +{ + /** + * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). + * @param vol - The amount of steam this block received + * @param side - The side of the block in which the electricity came from. + * @return vol - The amount of rejected steam to be sent to back + */ + public float onReceiveHeat(float jouls, int side); + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + public float getStoredHeat(); +} \ No newline at end of file diff --git a/1.3/common/EUI/SteamPower/api/IHeatProducer.java b/1.3/common/EUI/SteamPower/api/IHeatProducer.java new file mode 100644 index 00000000..1c8e33db --- /dev/null +++ b/1.3/common/EUI/SteamPower/api/IHeatProducer.java @@ -0,0 +1,14 @@ +package EUI.SteamPower.api; + + +public interface IHeatProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param jouls - The maximum jouls can be transfered + * @param side - The side of block in which the conductor is on + * @return jouls - Return jouls to consumer + */ + public float onProduceHeat(float jouls, int side); +} \ No newline at end of file diff --git a/1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java b/1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java new file mode 100644 index 00000000..af6599f5 --- /dev/null +++ b/1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java @@ -0,0 +1,59 @@ +package EUI.SteamPower.boiler; +import net.minecraft.src.*; + +public class ContainerBoiler extends Container +{ + private TileEntityBoiler boiler; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) + { + this.boiler = par2TileEntityboiler; + this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + + + public void updateProgressBar(int par1, int par2) + { + if (par1 == 0) + { + // this.boiler.furnaceCookTime = par2; + } + + if (par1 == 1) + { + //this.boiler.boilerRunTime = par2; + } + + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.boiler.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java b/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..46ad17aa --- /dev/null +++ b/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java @@ -0,0 +1,540 @@ +package EUI.SteamPower.boiler; +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.network.IPacketReceiver; +import EUI.BasicPipes.pipes.api.ILiquidConsumer; +import EUI.BasicPipes.pipes.api.ILiquidProducer; +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.TileEntityMachine; +import EUI.SteamPower.burner.TileEntityFireBox; +import net.minecraft.src.*; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; + +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory,ILiquidProducer, ILiquidConsumer +{ + + /** + * The ItemStacks that hold the items currently being used in the furnace + */ + private ItemStack[] furnaceItemStacks = new ItemStack[1]; + + /** The number of ticks that the boiler will keep burning */ + public int RunTime = 0; + /** The ammount of energy stored before being add to run Timer */ + public int energyStore = 0; + /** The ammount of water stored */ + public int waterStored = 0; + /** The ammount of steam stored */ + public int steamStored = 0; + /** The ammount of heat stored */ + public int heatStored = 0; + public int heatMax = 10000; + /** The ammount of heat stored */ + public int hullHeat = 0; + public int hullHeatMax = 10000; + private int heatTick = 0; + int count = 0; + boolean hullHeated = false; + TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + int steamMax = 140; + public boolean isBeingHeated = false; + /** + * Returns the number of slots in the inventory. + */ + public int getSizeInventory() + { + return this.furnaceItemStacks.length; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.furnaceItemStacks[par1]; + } + + public ItemStack decrStackSize(int par1, int par2) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var3; + + if (this.furnaceItemStacks[par1].stackSize <= par2) + { + var3 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var3; + } + else + { + var3 = this.furnaceItemStacks[par1].splitStack(par2); + + if (this.furnaceItemStacks[par1].stackSize == 0) + { + this.furnaceItemStacks[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.furnaceItemStacks[par1] != null) + { + ItemStack var2 = this.furnaceItemStacks[par1]; + this.furnaceItemStacks[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.furnaceItemStacks[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + + /** + * Returns the name of the inventory. + */ + public String getInvName() + { + return "container.boiler"; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.furnaceItemStacks.length) + { + this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + this.RunTime = par1NBTTagCompound.getShort("BurnTime"); + this.energyStore = par1NBTTagCompound.getInteger("energyStore"); + this.steamStored = par1NBTTagCompound.getInteger("steamStore"); + this.heatStored = par1NBTTagCompound.getInteger("heatStore"); + this.waterStored = par1NBTTagCompound.getInteger("waterStore"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); + par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); + par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); + par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); + par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); + par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) + { + if (this.furnaceItemStacks[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.furnaceItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + private boolean getIsHeated() { + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); + if(blockEntity instanceof TileEntityFireBox) + { + return true; + } + else + { + return false; + } + } + @Override + public void updateEntity(){ + count++; + if(count >= 20){ + isBeingHeated = getIsHeated(); + addWater();//adds water from container slot + shareWater(); + count = 0; + } + + //changed hullHeat max depending on contents of boiler + if(waterStored > 0) + { + hullHeatMax = 4700; + if(hullHeat > hullHeatMax) + { + hullHeat = 4700; + } + } + else + { + hullHeatMax = 10000; + } + //Checks if the hull is heated + if(hullHeat >= hullHeatMax) + { + hullHeated = true; + } + else + { + hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); + } + //checks if heat level hit max + if(hullHeat >= 10000) + { + if(heatTick >= 1200) + { + // TODO remove block and set fire + heatTick = 0; + } + else + { + heatTick += 1; + } + } + + + int heatNeeded = SteamPower.boilerHeat; // kilo joules + //if hull heated do work + if(hullHeated) + { + if(heatStored > SteamPower.fireOutput) + { + if(waterStored >= 1){ + if(heatStored >= heatNeeded) + { + heatStored = Math.max(heatStored - heatNeeded, 0); + --waterStored; + steamStored = Math.min(steamStored + SteamPower.steamOutBoiler,this.steamMax); + } + } + else + { + heatStored = 0; + } + } + } + TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); + if(blockE instanceof TileEntityFireBox) + { + if(!hullHeated || waterStored > 0) + { + heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPower.fireOutput, 1)), heatMax); + } + } + + } + public void shareWater() + { + int wSum = getStoredLiquid(1); //pre-sets the sum to the first tanks current volume + int tankCount = 1; //amount of tanks around this tank, used to get avarage liquid ammount + boolean bottom = false; // whether or not this tanks need to worry about what is bellow it + TileEntity entityBellow = worldObj.getBlockTileEntity(this.xCoord,this.yCoord-1, this.zCoord); + TileEntity entityAbove = worldObj.getBlockTileEntity(this.xCoord,this.yCoord+1, this.zCoord); + //checks wether or not the block bellow it is a tank to move liquid too + if(entityBellow instanceof TileEntityBoiler) + { + int bWater = ((TileEntityBoiler) entityBellow).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) entityBellow).getLiquidCapacity(1); + //checks if that tank has room to get liquid. + + if(bWater < bMax) + { + int emptyVol = Math.max( bMax - bWater,0); + int tradeVol = Math.min(emptyVol, waterStored); + int rejected = ((TileEntityBoiler) entityBellow).onReceiveLiquid(1, tradeVol, ForgeDirection.getOrientation(1)); + waterStored = Math.max(waterStored - rejected,0); + wSum -= rejected; + } + else + { + bottom = true; + } + } + else + { + //there was no tank bellow this tank + bottom = true; + } + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + if(bottom) + { + //get average water around center tank + for(int i = 0; i<4;i++) + { + int x = this.xCoord; + int z = this.zCoord; + //switch to check each side TODO rewrite for side values + switch(i) + { + case 0: --x; + case 1: ++x; + case 2: --z; + case 3: ++z; + } + TileEntity entity = worldObj.getBlockTileEntity(x,this.yCoord, z); + if(entity instanceof TileEntityBoiler) + { + //if is a tank add to the sum + wSum += ((TileEntityBoiler) entity).getStoredLiquid(1); + tankCount += 1; + } + } + } + //transfers water + for(int i = 0; i<4;i++) + { + int average = wSum / tankCount;// takes the sum and makes it an average + int x2 = this.xCoord; + int z2 = this.zCoord; + int tradeSum = 0; + //switch to check each side TODO rewrite for side values + switch(i) + { + case 0: --x2; + case 1: ++x2; + case 2: --z2; + case 3: ++z2; + } + TileEntity entity = worldObj.getBlockTileEntity(x2,this.yCoord, z2); + if(entity instanceof TileEntityBoiler) + { + int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); + if(targetW < average) + { + tradeSum = Math.min(average, waterStored); //gets the ammount to give to the target tank + int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back + waterStored =rejectedAm + waterStored - tradeSum; //counts up current water sum after trade + } + } + } + if(entityAbove instanceof TileEntityBoiler) + { + int bWater = ((TileEntityBoiler) entityAbove).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) entityAbove).getLiquidCapacity(1); + if(bottom && waterStored > 0) + { + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, steamStored); + int rejectedS = ((TileEntityBoiler) entityAbove).addSteam(tradeVolS); + waterStored = Math.max(waterStored - rejectedS,0); + wSum -= rejectedS; + } + } + } + + + + + + } + public int addSteam(int watt) { + int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); + this.steamStored += watt - rejectedElectricity; + return rejectedElectricity; + } + private void addWater() { + if (this.furnaceItemStacks[0] != null) + { + if(this.furnaceItemStacks[0].isItemEqual(new ItemStack(Item.bucketWater,1))) + { + if((int)waterStored < getLiquidCapacity(1)) + { + ++waterStored; + this.furnaceItemStacks[0] = new ItemStack(Item.bucketEmpty,1); + this.onInventoryChanged(); + } + } + } + + } + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() {} + + public void closeChest() {} + + public int precentHeated() { + int var1; + if(hullHeat < 100) + { + var1 = (int)(100 *(hullHeat/100)); + } + else + { + var1 = 100; + } + return var1; + } + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 1) + { + int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); + this.waterStored += vol - rejectedElectricity; + return rejectedElectricity; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type,ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 1) + { + return this.waterStored; + } + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type ==1) + { + return 14; + } + if(type == 0) + { + return steamMax; + } + return 0; + } + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 0) + { + if(steamStored > 1) + { + this.steamStored -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + @Override + public int getStartInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int getSizeInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, + (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + facing = dataStream.readInt(); + RunTime = dataStream.readInt(); + energyStore = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + heatStored = dataStream.readInt(); + hullHeat = dataStream.readInt(); + heatTick = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } + + } diff --git a/1.3/common/EUI/SteamPower/burner/ContainerFireBox.java b/1.3/common/EUI/SteamPower/burner/ContainerFireBox.java new file mode 100644 index 00000000..20918815 --- /dev/null +++ b/1.3/common/EUI/SteamPower/burner/ContainerFireBox.java @@ -0,0 +1,42 @@ +package EUI.SteamPower.burner; + +import net.minecraft.src.*; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java b/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java new file mode 100644 index 00000000..c07c5fd2 --- /dev/null +++ b/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java @@ -0,0 +1,301 @@ +package EUI.SteamPower.burner; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.network.IPacketReceiver; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.TileEntityMachine; +import EUI.SteamPower.api.IHeatProducer; +import EUI.SteamPower.boiler.*; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer +{ + //max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + //Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + public ItemStack[] containingItems = new ItemStack[1]; + public void updateEntity() + {if (!this.worldObj.isRemote){ + + if(count == 20) + { + addConnection(); + sharCoal(); + + count = 0; + } + count++; + maxGenerateRate = SteamPower.fireOutput + (connectedUnits*5); + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if(blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.containingItems[0] != null && isConnected) + { + if (this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + if(isConnected) + { + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); + } + } + //Loose heat when the generator is not connected or if there is no coal in the inventory. + if(this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate-5, 0); + } + } + + //gets all connected fireBoxes and shares its supply of coal + public void sharCoal(){ + for(int i =0; i<6;i++) + { + + if(connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if(this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.containingItems[0].stackSize > 0) + { + if(connectedConsumer.containingItems[0] != null) + { + if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.containingItems[0].stackSize + connectedConsumer.containingItems[0].stackSize)/2; + if(this.containingItems[0].stackSize > connectedConsumer.containingItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.containingItems[0].stackSize); + connectedConsumer.containingItems[0].stackSize = connectedConsumer.containingItems[0].stackSize + transferC; + this.containingItems[0].stackSize = this.containingItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.containingItems[0] = new ItemStack(this.containingItems[0].getItem()); + this.containingItems[0].stackSize -= 1; + } + } + } + } + } + + + } + public void addConnection() + { + connectedUnits = 0; + for(int i = 0; i<6; i++) + { + + TileEntity aEntity = getSteamMachine(i); + if(aEntity instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(ForgeDirection side) + { + if (side == ForgeDirection.DOWN) + { + return 1; + } + if (side == ForgeDirection.UP) + { + return 0; + } + return 2; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { return getSizeInventory(); } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "FireBox"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + @Override + public float onProduceHeat(float jouls, int side) { + // TODO Auto-generated method stub + return Math.min(generateRate,jouls); + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + connectedUnits = dataStream.readInt(); + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java b/1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java new file mode 100644 index 00000000..293b2424 --- /dev/null +++ b/1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java @@ -0,0 +1,41 @@ +package EUI.SteamPower.turbine; + +import net.minecraft.src.*; + +public class ContainerGenerator extends Container +{ + private TileEntityGenerator tileEntity; + + public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java b/1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java new file mode 100644 index 00000000..50c05594 --- /dev/null +++ b/1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java @@ -0,0 +1,359 @@ +package EUI.SteamPower.turbine; + +import com.google.common.io.ByteArrayDataInput; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.UniversalElectricity; +import universalelectricity.Vector3; +import universalelectricity.electricity.ElectricityManager; +import universalelectricity.extend.IElectricUnit; +import universalelectricity.extend.TileEntityConductor; +import universalelectricity.network.IPacketReceiver; +import EUI.BasicPipes.pipes.api.ILiquidConsumer; +import EUI.BasicPipes.pipes.api.ILiquidProducer; +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.TileEntityMachine; + +public class TileEntityGenerator extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public int maxGenerateRate = 1000; + public int waterStored = 0; + public int steamStored = 0; + public int steamConsumed = 0; + //Current generation rate based on hull heat. In TICKS. + public float generateRate = 0; + //public TileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int itemCookTime = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + public TileEntityConductor connectedElectricUnit = null; + @Override + public boolean canConnect(ForgeDirection side) + { + return true; + } + + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void onUpdate(float watts, float voltage, ForgeDirection side) + { if(!this.worldObj.isRemote) + { + super.onUpdate(watts, voltage, side); + + //Check nearby blocks and see if the conductor is full. If so, then it is connected + TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite()); + + + if(tileEntity instanceof TileEntityConductor) + { + if(ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + { + this.connectedElectricUnit = (TileEntityConductor)tileEntity; + } + else + { + this.connectedElectricUnit = null; + } + } + else + { + this.connectedElectricUnit = null; + } + + + if(!this.isDisabled()) + { + //Adds time to runTime by consuming steam + if(this.itemCookTime <= 0) + { + if(steamStored > 0) + { + --steamStored; + ++steamConsumed; + if(steamConsumed == SteamPower.steamOutBoiler) + { + ++waterStored; + steamConsumed = 0; + } + itemCookTime += 65; + } + } + + //Empties water from tank to buckets + if (this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) + { + if(this.waterStored > 0) + { + this.containingItems[0] = new ItemStack(Item.bucketWater,1); + --waterStored; + } + } + } + + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + + if(this.connectedElectricUnit != null) + { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.001+0.0015, 0.05F), this.maxGenerateRate/20); + } + } + + if(this.connectedElectricUnit == null || this.itemCookTime <= 0) + { + this.generateRate = (float)Math.max(this.generateRate-0.05, 0); + } + + if(this.generateRate > 1) + { + ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + } + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); + this.steamStored = par1NBTTagCompound.getInteger("steamStored"); + this.generateRate = par1NBTTagCompound.getFloat("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); + par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); + par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(ForgeDirection side) + { + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { return 0; } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 1) + { + if(this.waterStored > 0) + { + --waterStored; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type == 0) + { + return 100; + } + return 0; + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(int)generateRate,(int)itemCookTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + steamConsumed = dataStream.readInt(); + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/1.3/minecraft/EUIClient/SteamPower/GUIFireBox.java b/1.3/minecraft/EUIClient/SteamPower/GUIFireBox.java new file mode 100644 index 00000000..816f7383 --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/GUIFireBox.java @@ -0,0 +1,91 @@ +package EUIClient.SteamPower; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.burner.ContainerFireBox; +import EUI.SteamPower.burner.TileEntityFireBox; + +import java.math.*; +import java.text.DecimalFormat; +import java.lang.Integer; +import net.minecraft.src.*; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if(!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if(tileEntity.containingItems[0] != null) + { + if(tileEntity.containingItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Coal"; + } + else{ + if(tileEntity.generateRate*20 < 20) + { + displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate*20)); + } + } + } + this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPower.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" KJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/1.3/minecraft/EUIClient/SteamPower/GUIGenerator.java b/1.3/minecraft/EUIClient/SteamPower/GUIGenerator.java new file mode 100644 index 00000000..e6b7adbb --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/GUIGenerator.java @@ -0,0 +1,79 @@ +package EUIClient.SteamPower; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.turbine.ContainerGenerator; +import EUI.SteamPower.turbine.TileEntityGenerator; + +import java.math.*; +import java.lang.Integer; +import net.minecraft.src.*; + + public class GUIGenerator extends GuiContainer + { + private TileEntityGenerator tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + { + super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + if(tileEntity.connectedElectricUnit == null) + { + displayText = "Not Connected"; + } + else if(tileEntity.generateRate*20 <= 0) + { + if(tileEntity.steamStored> 0) + { + displayText = "Power Full"; + } + if(tileEntity.steamStored<= 0) + { + displayText = "No Steam"; + } + } + else if(tileEntity.generateRate*20 < 20) + { + displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = universalelectricity.UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); + } + displayText2 = "water" + "-" + tileEntity.waterStored; + displayText3 = "steam" + "-" + tileEntity.steamStored; + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPower.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java b/1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java new file mode 100644 index 00000000..dc91a79c --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java @@ -0,0 +1,88 @@ +package EUIClient.SteamPower; +import java.text.DecimalFormat; + +import net.minecraft.src.*; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; +import EUI.SteamPower.boiler.ContainerBoiler; +import EUI.SteamPower.boiler.TileEntityBoiler; + +public class GuiBoiler extends GuiContainer +{ + private TileEntityBoiler boilerInventory; + + public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) + { + super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); + this.boilerInventory = par2TileEntityGrinder; + } + + /** + * Draw the foreground layer for the GuiContainer (everythin in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Boiler", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) + { + this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); + } + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPower.textureFile+"BoilerGui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); + int var7; + int var8; + int var9; + int var10; + if (this.boilerInventory.waterStored > 0) + { + var7 = boilerInventory.getStoredLiquid(1)*4 + 1; + this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); + } + if (this.boilerInventory.steamStored > 0) + { + var8 = boilerInventory.steamStored/14*4 + 1; + this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); + } + + float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); + var9 = (int) Math.min(precentH*3.0F,30); + this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); + float precentSH = this.boilerInventory.heatStored/1000; + var10 = (int) Math.round(precentSH*5.33); + this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); + + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" kJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelEngine.java b/1.3/minecraft/EUIClient/SteamPower/ModelEngine.java new file mode 100644 index 00000000..a06fd499 --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/ModelEngine.java @@ -0,0 +1,242 @@ +// Date: 8/14/2012 3:20:15 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package EUIClient.SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer BASE; + ModelRenderer PISTON_WALL_1; + ModelRenderer PISTON_HEAD_MOVES; + ModelRenderer PISTON_TURNER_MOVES; + ModelRenderer PISTON_ARM_MOVES; + ModelRenderer GEAR_A_NECK; + ModelRenderer PISTON_WALL_2; + ModelRenderer PISTON_WALL_3; + ModelRenderer PISTON_WALL_4; + ModelRenderer PISTON_SUPPORT_1; + ModelRenderer PISTON_SUPPORT_2; + ModelRenderer FORCE_CONDUCTOR_BOX; + ModelRenderer GEAR_A_TEETH_1_ROTATES; + ModelRenderer GEAR_A_TEETH_2_ROTATES; + ModelRenderer GEAR_A_TEETH_3_ROTATES; + ModelRenderer FORCE_TRANSMITTER_ROTATES; + ModelRenderer GEAR_B_TEETH_1_ROTATES; + ModelRenderer GEAR_B_TEETH_2_ROTATES; + ModelRenderer GEAR_B_TEETH_3_ROTATES; + ModelRenderer SUPPORT_PLATE; + ModelRenderer ORNAMENT_1; + ModelRenderer ORNAMENT_2; + ModelRenderer LEVER_1_CAN_BE_TURNED; + ModelRenderer LEVER_2_CAN_BE_TURNED; + + public ModelEngine() + { + textureWidth = 128; + textureHeight = 128; + + BASE = new ModelRenderer(this, 0, 0); + BASE.addBox(0F, 0F, 0F, 16, 1, 16); + BASE.setRotationPoint(-8F, 23F, -8F); + BASE.setTextureSize(128, 128); + BASE.mirror = true; + setRotation(BASE, 0F, 0F, 0F); + PISTON_WALL_1 = new ModelRenderer(this, 0, 18); + PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); + PISTON_WALL_1.setTextureSize(128, 128); + PISTON_WALL_1.mirror = true; + setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); + PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); + PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); + PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); + PISTON_HEAD_MOVES.setTextureSize(128, 128); + PISTON_HEAD_MOVES.mirror = true; + setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); + PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); + PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); + PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); + PISTON_TURNER_MOVES.setTextureSize(128, 128); + PISTON_TURNER_MOVES.mirror = true; + setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); + PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); + PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); + PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); + PISTON_ARM_MOVES.setTextureSize(128, 128); + PISTON_ARM_MOVES.mirror = true; + setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); + GEAR_A_NECK = new ModelRenderer(this, 65, 25); + GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); + GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); + GEAR_A_NECK.setTextureSize(128, 128); + GEAR_A_NECK.mirror = true; + setRotation(GEAR_A_NECK, 0F, 0F, 0F); + PISTON_WALL_2 = new ModelRenderer(this, 0, 18); + PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); + PISTON_WALL_2.setTextureSize(128, 128); + PISTON_WALL_2.mirror = true; + setRotation(PISTON_WALL_2, 0F, 0F, 0F); + PISTON_WALL_3 = new ModelRenderer(this, 0, 18); + PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); + PISTON_WALL_3.setTextureSize(128, 128); + PISTON_WALL_3.mirror = true; + setRotation(PISTON_WALL_3, 0F, 0F, 0F); + PISTON_WALL_4 = new ModelRenderer(this, 0, 18); + PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); + PISTON_WALL_4.setTextureSize(128, 128); + PISTON_WALL_4.mirror = true; + setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); + PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); + PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); + PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); + PISTON_SUPPORT_1.setTextureSize(128, 128); + PISTON_SUPPORT_1.mirror = true; + setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); + PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); + PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); + PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); + PISTON_SUPPORT_2.setTextureSize(128, 128); + PISTON_SUPPORT_2.mirror = true; + setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); + FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); + FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); + FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); + FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); + FORCE_CONDUCTOR_BOX.mirror = true; + setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); + GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); + FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); + FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); + FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); + FORCE_TRANSMITTER_ROTATES.mirror = true; + setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + SUPPORT_PLATE = new ModelRenderer(this, 65, 12); + SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); + SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); + SUPPORT_PLATE.setTextureSize(128, 128); + SUPPORT_PLATE.mirror = true; + setRotation(SUPPORT_PLATE, 0F, 0F, 0F); + ORNAMENT_1 = new ModelRenderer(this, 86, 0); + ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_1.setRotationPoint(6F, 19F, -5F); + ORNAMENT_1.setTextureSize(128, 128); + ORNAMENT_1.mirror = true; + setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); + ORNAMENT_2 = new ModelRenderer(this, 86, 0); + ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_2.setRotationPoint(4F, 19F, -5F); + ORNAMENT_2.setTextureSize(128, 128); + ORNAMENT_2.mirror = true; + setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); + LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); + LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_1_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); + LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); + LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_2_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + BASE.render(f5); + PISTON_WALL_1.render(f5); + PISTON_HEAD_MOVES.render(f5); + PISTON_TURNER_MOVES.render(f5); + PISTON_ARM_MOVES.render(f5); + GEAR_A_NECK.render(f5); + PISTON_WALL_2.render(f5); + PISTON_WALL_3.render(f5); + PISTON_WALL_4.render(f5); + PISTON_SUPPORT_1.render(f5); + PISTON_SUPPORT_2.render(f5); + FORCE_CONDUCTOR_BOX.render(f5); + GEAR_A_TEETH_1_ROTATES.render(f5); + GEAR_A_TEETH_2_ROTATES.render(f5); + GEAR_A_TEETH_3_ROTATES.render(f5); + FORCE_TRANSMITTER_ROTATES.render(f5); + GEAR_B_TEETH_1_ROTATES.render(f5); + GEAR_B_TEETH_2_ROTATES.render(f5); + GEAR_B_TEETH_3_ROTATES.render(f5); + SUPPORT_PLATE.render(f5); + ORNAMENT_1.render(f5); + ORNAMENT_2.render(f5); + LEVER_1_CAN_BE_TURNED.render(f5); + LEVER_2_CAN_BE_TURNED.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java b/1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java new file mode 100644 index 00000000..37d0e0bd --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java @@ -0,0 +1,82 @@ +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package EUIClient.SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelFurnace extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public ModelFurnace() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(256, 256); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(256, 256); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(256, 256); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 0); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(256, 256); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelTank.java b/1.3/minecraft/EUIClient/SteamPower/ModelTank.java new file mode 100644 index 00000000..f57c884e --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/ModelTank.java @@ -0,0 +1,155 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package EUIClient.SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //fields + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + generalRender(f5); + } + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java b/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java new file mode 100644 index 00000000..b64d662c --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java @@ -0,0 +1,30 @@ +package EUIClient.SteamPower; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; + +import net.minecraft.src.*; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPower.textureFile+"tankTexture.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.generalRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java b/1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java new file mode 100644 index 00000000..d379048a --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java @@ -0,0 +1,29 @@ +package EUIClient.SteamPower; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; +import net.minecraft.src.*; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelFurnace model; + + public RenderFurnace() + { + model = new ModelFurnace(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPower.textureFile+"Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java b/1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java new file mode 100644 index 00000000..3ad0c5a4 --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java @@ -0,0 +1,29 @@ +package EUIClient.SteamPower; + +import org.lwjgl.opengl.GL11; + +import EUI.SteamPower.SteamPower; +import net.minecraft.src.*; + +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(SteamPower.textureFile+"tankTexture.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java b/1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java new file mode 100644 index 00000000..6fb887e8 --- /dev/null +++ b/1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java @@ -0,0 +1,39 @@ +package EUIClient.SteamPower; + + +import EUI.SteamPower.SteamProxy; +import EUI.SteamPower.TileEntityNuller; +import EUI.SteamPower.boiler.TileEntityBoiler; +import EUI.SteamPower.burner.TileEntityFireBox; +import EUI.SteamPower.turbine.TileEntityGenerator; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ModelBiped; +import net.minecraft.src.RenderBiped; +import net.minecraft.src.RenderBlocks; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.client.MinecraftForgeClient; + +public class SteamClientProxy extends SteamProxy{ + + public void preInit() + { + MinecraftForgeClient.preloadTexture("/EUIClient/textures/blocks.png"); + MinecraftForgeClient.preloadTexture("/EUIClient/textures/Items.png"); + } + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); + ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ClientRegistry.registerTileEntity(TileEntityGenerator.class, "generator", new RenderSteamEngine()); + } + public void postInit() + { + + } + +} diff --git a/1.3/minecraft/EUIClient/Textures/BoilerGui.png b/1.3/minecraft/EUIClient/Textures/BoilerGui.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25 GIT binary patch literal 1876 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 literal 0 HcmV?d00001 diff --git a/1.3/minecraft/EUIClient/Textures/Items.png b/1.3/minecraft/EUIClient/Textures/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac4a810f40f2f56bef731001ca478c627d4e8a1 GIT binary patch literal 29993 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 EFXfgrNdN!< literal 0 HcmV?d00001 diff --git a/1.3/minecraft/EUIClient/Textures/SteamGUI.png b/1.3/minecraft/EUIClient/Textures/SteamGUI.png new file mode 100644 index 0000000000000000000000000000000000000000..ac81171315361eec20cf1f7eb53d5f6cdff48132 GIT binary patch literal 3762 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 WU59UubRrj*0?^SgRIgOC4f_YtG&Dv4 literal 0 HcmV?d00001 diff --git a/1.3/minecraft/EUIClient/Textures/SteamPipe.png b/1.3/minecraft/EUIClient/Textures/SteamPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4bb528d01814f47003ede29cf06b68de001a59 GIT binary patch literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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%0AbMeZq%L-(Jd-Vy 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 WV**nd(hB$(kd4LhqoqgAUH>ok(3-da literal 0 HcmV?d00001 diff --git a/1.3/minecraft/EUIClient/Textures/tankTexture.png b/1.3/minecraft/EUIClient/Textures/tankTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..82b85311d70a731928995004e0824bbbee23c308 GIT binary patch literal 658 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^J-m z@Uec~W}paXfk$L90|Vb-5N14{zaj-F$X?><>&kwIgO6F$=zD;b2?GO@kf)1dNX4zU zw;hX`3`E!-Tu7YBUBO@z$$zQ3ib4OtJUy$jDS|9Zr#-2?@Aujw>)#Vwk6TN6W%$}3 z{`&Z{ChyYhSUcx)mETHh?=M$fFKs>7&)0MRaUuDYPSY9VesAx%HEW;Gxu4|?$2Zs5 ze8^7!zuCC{&!2l?P20A)^t1noW#0dNsa*)C!Urw`)5puboJ-`l^3|RDnKt2gziG4R z^oE@`bDxRFFfCj6dH&q9!A}!b^_0Y#pV{l5$-6*p!ltkWq4XIHZx*=NL~~t>DqbDI z`Qz}j_3wYX)*k%&dXZWC)q9+K$|Ehl&JhY&S)FL`VjWY*CMFF=M&=J04f0<(9x@qh zt>1f9^``auzt^w*{21zdM4)A#=pGXX@AD#4Dpp4buVB|`k3Kl-fbVai#vrCi3$wK|kpBK-(bvSNyi@*(@ASMBZysCyt z|NQG-f9_ttFP>L*NvTN`rvrlkgGnO`PlH+jkj)Xzl=CElQJ_I`ex^r!=7-=&MgfLZ z*-YNQHt-by#Ti%_7!#xy`mrXnIxy_m$^XE?;{$_*z#U+tglubG%zmJ3gAmB|8B7;hK$@|D1NA@HTISuV|De_N P3?%L8>gTe~DWM4fP^b7L literal 0 HcmV?d00001 From 40f0710849471b70730e6834d06d5a16a3ed36c3 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 07:59:13 -0400 Subject: [PATCH 050/115] Update of code I really should have update git after i changed packages. Now there so many changes i really don't care to sort threw them. Main changes though are boiler tank model/code changed to show corner block when more than one boil is placed togther. Steam engine was changed to steam piston set and shows animation when running. FireBox now shows flames on the correct side. All models rotate as well but only when first placed. No wrench rotation support will be added. A lot of code cleanup and bug fixes including an infinite water loop in the boiler tanks. --- .../EUI/SteamPower/TileEntityMachine.java | 136 ----- .../SteamPower/boiler/TileEntityBoiler.java | 540 ------------------ .../SteamPower/burner/TileEntityFireBox.java | 301 ---------- .../{EUI => }/SteamPower/BlockMachine.java | 103 +--- .../{EUI => }/SteamPower/ItemCoalFuel.java | 2 +- .../{EUI => }/SteamPower/ItemMachine.java | 2 +- .../{EUI => }/SteamPower/ItemParts.java | 2 +- .../SteamPowerMain.java} | 63 +- .../{EUI => }/SteamPower/SteamProxy.java | 25 +- 1.3/common/SteamPower/TileEntityMachine.java | 261 +++++++++ .../SteamPower/TileEntityNuller.java | 2 +- .../api => SteamPower/ap}/IHeatConsumer.java | 2 +- .../api => SteamPower/ap}/IHeatProducer.java | 2 +- .../SteamPower/boiler/ContainerBoiler.java | 2 +- .../SteamPower/boiler/TileEntityBoiler.java | 329 +++++++++++ .../SteamPower/burner/ContainerFireBox.java | 2 +- .../SteamPower/burner/TileEntityFireBox.java | 203 +++++++ .../SteamPower/turbine/BlockEngine.java | 185 ++++++ .../turbine/ContainerGenerator.java | 2 +- 1.3/common/SteamPower/turbine/ItemEngine.java | 66 +++ .../turbine/TileEntityGenerator.java | 124 ++-- .../SteamPower/turbine/TileEntitytopGen.java | 69 +++ .../EUIClient/SteamPower/RenderBoiler.java | 30 - .../EUIClient/Textures/CornerTank.png | Bin 0 -> 2686 bytes 1.3/minecraft/EUIClient/Textures/Engine.png | Bin 0 -> 2686 bytes .../EUIClient/Textures/tankBlock.png | Bin 0 -> 2478 bytes .../SteamPower/GUIFireBox.java | 27 +- .../SteamPower/GUIGenerator.java | 23 +- .../{EUIClient => }/SteamPower/GuiBoiler.java | 13 +- 1.3/minecraft/SteamPower/ModelCenterTank.java | 59 ++ 1.3/minecraft/SteamPower/ModelCornerTank.java | 100 ++++ 1.3/minecraft/SteamPower/ModelEngine.java | 115 ++++ .../SteamPower/ModelFurnace.java | 2 +- .../{EUIClient => }/SteamPower/ModelTank.java | 5 +- .../ModelToyEngine.java} | 6 +- 1.3/minecraft/SteamPower/RenderBoiler.java | 62 ++ .../SteamPower/RenderFurnace.java | 18 +- .../SteamPower/RenderSteamEngine.java | 49 ++ .../RenderToyEngine.java} | 18 +- .../SteamPower/SteamClientProxy.java | 23 +- 40 files changed, 1736 insertions(+), 1237 deletions(-) delete mode 100644 1.3/common/EUI/SteamPower/TileEntityMachine.java delete mode 100644 1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java delete mode 100644 1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java rename 1.3/common/{EUI => }/SteamPower/BlockMachine.java (76%) rename 1.3/common/{EUI => }/SteamPower/ItemCoalFuel.java (98%) rename 1.3/common/{EUI => }/SteamPower/ItemMachine.java (98%) rename 1.3/common/{EUI => }/SteamPower/ItemParts.java (98%) rename 1.3/common/{EUI/SteamPower/SteamPower.java => SteamPower/SteamPowerMain.java} (71%) rename 1.3/common/{EUI => }/SteamPower/SteamProxy.java (74%) create mode 100644 1.3/common/SteamPower/TileEntityMachine.java rename 1.3/common/{EUI => }/SteamPower/TileEntityNuller.java (95%) rename 1.3/common/{EUI/SteamPower/api => SteamPower/ap}/IHeatConsumer.java (96%) rename 1.3/common/{EUI/SteamPower/api => SteamPower/ap}/IHeatProducer.java (93%) rename 1.3/common/{EUI => }/SteamPower/boiler/ContainerBoiler.java (97%) create mode 100644 1.3/common/SteamPower/boiler/TileEntityBoiler.java rename 1.3/common/{EUI => }/SteamPower/burner/ContainerFireBox.java (97%) create mode 100644 1.3/common/SteamPower/burner/TileEntityFireBox.java create mode 100644 1.3/common/SteamPower/turbine/BlockEngine.java rename 1.3/common/{EUI => }/SteamPower/turbine/ContainerGenerator.java (97%) create mode 100644 1.3/common/SteamPower/turbine/ItemEngine.java rename 1.3/common/{EUI => }/SteamPower/turbine/TileEntityGenerator.java (78%) create mode 100644 1.3/common/SteamPower/turbine/TileEntitytopGen.java delete mode 100644 1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java create mode 100644 1.3/minecraft/EUIClient/Textures/CornerTank.png create mode 100644 1.3/minecraft/EUIClient/Textures/Engine.png create mode 100644 1.3/minecraft/EUIClient/Textures/tankBlock.png rename 1.3/minecraft/{EUIClient => }/SteamPower/GUIFireBox.java (81%) rename 1.3/minecraft/{EUIClient => }/SteamPower/GUIGenerator.java (85%) rename 1.3/minecraft/{EUIClient => }/SteamPower/GuiBoiler.java (89%) create mode 100644 1.3/minecraft/SteamPower/ModelCenterTank.java create mode 100644 1.3/minecraft/SteamPower/ModelCornerTank.java create mode 100644 1.3/minecraft/SteamPower/ModelEngine.java rename 1.3/minecraft/{EUIClient => }/SteamPower/ModelFurnace.java (98%) rename 1.3/minecraft/{EUIClient => }/SteamPower/ModelTank.java (98%) rename 1.3/minecraft/{EUIClient/SteamPower/ModelEngine.java => SteamPower/ModelToyEngine.java} (99%) create mode 100644 1.3/minecraft/SteamPower/RenderBoiler.java rename 1.3/minecraft/{EUIClient => }/SteamPower/RenderFurnace.java (52%) create mode 100644 1.3/minecraft/SteamPower/RenderSteamEngine.java rename 1.3/minecraft/{EUIClient/SteamPower/RenderSteamEngine.java => SteamPower/RenderToyEngine.java} (52%) rename 1.3/minecraft/{EUIClient => }/SteamPower/SteamClientProxy.java (59%) diff --git a/1.3/common/EUI/SteamPower/TileEntityMachine.java b/1.3/common/EUI/SteamPower/TileEntityMachine.java deleted file mode 100644 index a57975dd..00000000 --- a/1.3/common/EUI/SteamPower/TileEntityMachine.java +++ /dev/null @@ -1,136 +0,0 @@ -package EUI.SteamPower; - -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.electricity.TileEntityElectricUnit; -import universalelectricity.extend.IRotatable; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import net.minecraft.src.*; -import net.minecraftforge.common.ForgeDirection; -public class TileEntityMachine extends TileEntityElectricUnit -{ - public int facing = 0; - private int count = 0; - public TileEntity getSteamMachine(int i) - { - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - - switch(i) - { - case 0: y = y - 1;break; - case 1: y = y + 1;break; - case 2: z = z + 1;break; - case 3: z = z - 1;break; - case 4: x = x + 1;break; - case 5: x = x - 1;break; - } - TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntityMachine) - { - return aEntity; - } - - return null; - } - - public int getDirection() - { - return this.facing; - } - - public void setDirection(int i) - { - this.facing = i; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", this.facing); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.facing = par1NBTTagCompound.getInteger("facing"); - } - - @Override - public float electricityRequest() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - - - public int getSizeInventory() { - // TODO Auto-generated method stub - return 0; - } - - public ItemStack getStackInSlot(int var6) { - // TODO Auto-generated method stub - return null; - } - @Override - public boolean canUpdate() - { - return true; - } - public Object[] getSendData() - { - return new Object[]{}; - } - public int getNumSide(ForgeDirection side) - { - if(side == ForgeDirection.DOWN) - { - return 0; - } - if(side == ForgeDirection.UP) - { - return 1; - } - if(side == ForgeDirection.NORTH) - { - return 2; - } - if(side == ForgeDirection.SOUTH) - { - return 3; - } - if(side == ForgeDirection.WEST) - { - return 4; - } - if(side == ForgeDirection.EAST) - { - return 5; - } - return 0; - } - - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - count++; - if(count >= 10) - { - if(!worldObj.isRemote) - { - PacketManager.sendTileEntityPacket(this, SteamPower.channel, getSendData()); - } - count = 0; - } - } -} \ No newline at end of file diff --git a/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java b/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java deleted file mode 100644 index 46ad17aa..00000000 --- a/1.3/common/EUI/SteamPower/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,540 +0,0 @@ -package EUI.SteamPower.boiler; -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.network.IPacketReceiver; -import EUI.BasicPipes.pipes.api.ILiquidConsumer; -import EUI.BasicPipes.pipes.api.ILiquidProducer; -import EUI.SteamPower.SteamPower; -import EUI.SteamPower.TileEntityMachine; -import EUI.SteamPower.burner.TileEntityFireBox; -import net.minecraft.src.*; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; - -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory,ILiquidProducer, ILiquidConsumer -{ - - /** - * The ItemStacks that hold the items currently being used in the furnace - */ - private ItemStack[] furnaceItemStacks = new ItemStack[1]; - - /** The number of ticks that the boiler will keep burning */ - public int RunTime = 0; - /** The ammount of energy stored before being add to run Timer */ - public int energyStore = 0; - /** The ammount of water stored */ - public int waterStored = 0; - /** The ammount of steam stored */ - public int steamStored = 0; - /** The ammount of heat stored */ - public int heatStored = 0; - public int heatMax = 10000; - /** The ammount of heat stored */ - public int hullHeat = 0; - public int hullHeatMax = 10000; - private int heatTick = 0; - int count = 0; - boolean hullHeated = false; - TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - int steamMax = 140; - public boolean isBeingHeated = false; - /** - * Returns the number of slots in the inventory. - */ - public int getSizeInventory() - { - return this.furnaceItemStacks.length; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.furnaceItemStacks[par1]; - } - - public ItemStack decrStackSize(int par1, int par2) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var3; - - if (this.furnaceItemStacks[par1].stackSize <= par2) - { - var3 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var3; - } - else - { - var3 = this.furnaceItemStacks[par1].splitStack(par2); - - if (this.furnaceItemStacks[par1].stackSize == 0) - { - this.furnaceItemStacks[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var2 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.furnaceItemStacks[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - - /** - * Returns the name of the inventory. - */ - public String getInvName() - { - return "container.boiler"; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.furnaceItemStacks.length) - { - this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - - this.RunTime = par1NBTTagCompound.getShort("BurnTime"); - this.energyStore = par1NBTTagCompound.getInteger("energyStore"); - this.steamStored = par1NBTTagCompound.getInteger("steamStore"); - this.heatStored = par1NBTTagCompound.getInteger("heatStore"); - this.waterStored = par1NBTTagCompound.getInteger("waterStore"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); - par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); - par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); - par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); - par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); - par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) - { - if (this.furnaceItemStacks[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.furnaceItemStacks[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - private boolean getIsHeated() { - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); - if(blockEntity instanceof TileEntityFireBox) - { - return true; - } - else - { - return false; - } - } - @Override - public void updateEntity(){ - count++; - if(count >= 20){ - isBeingHeated = getIsHeated(); - addWater();//adds water from container slot - shareWater(); - count = 0; - } - - //changed hullHeat max depending on contents of boiler - if(waterStored > 0) - { - hullHeatMax = 4700; - if(hullHeat > hullHeatMax) - { - hullHeat = 4700; - } - } - else - { - hullHeatMax = 10000; - } - //Checks if the hull is heated - if(hullHeat >= hullHeatMax) - { - hullHeated = true; - } - else - { - hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); - } - //checks if heat level hit max - if(hullHeat >= 10000) - { - if(heatTick >= 1200) - { - // TODO remove block and set fire - heatTick = 0; - } - else - { - heatTick += 1; - } - } - - - int heatNeeded = SteamPower.boilerHeat; // kilo joules - //if hull heated do work - if(hullHeated) - { - if(heatStored > SteamPower.fireOutput) - { - if(waterStored >= 1){ - if(heatStored >= heatNeeded) - { - heatStored = Math.max(heatStored - heatNeeded, 0); - --waterStored; - steamStored = Math.min(steamStored + SteamPower.steamOutBoiler,this.steamMax); - } - } - else - { - heatStored = 0; - } - } - } - TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); - if(blockE instanceof TileEntityFireBox) - { - if(!hullHeated || waterStored > 0) - { - heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPower.fireOutput, 1)), heatMax); - } - } - - } - public void shareWater() - { - int wSum = getStoredLiquid(1); //pre-sets the sum to the first tanks current volume - int tankCount = 1; //amount of tanks around this tank, used to get avarage liquid ammount - boolean bottom = false; // whether or not this tanks need to worry about what is bellow it - TileEntity entityBellow = worldObj.getBlockTileEntity(this.xCoord,this.yCoord-1, this.zCoord); - TileEntity entityAbove = worldObj.getBlockTileEntity(this.xCoord,this.yCoord+1, this.zCoord); - //checks wether or not the block bellow it is a tank to move liquid too - if(entityBellow instanceof TileEntityBoiler) - { - int bWater = ((TileEntityBoiler) entityBellow).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) entityBellow).getLiquidCapacity(1); - //checks if that tank has room to get liquid. - - if(bWater < bMax) - { - int emptyVol = Math.max( bMax - bWater,0); - int tradeVol = Math.min(emptyVol, waterStored); - int rejected = ((TileEntityBoiler) entityBellow).onReceiveLiquid(1, tradeVol, ForgeDirection.getOrientation(1)); - waterStored = Math.max(waterStored - rejected,0); - wSum -= rejected; - } - else - { - bottom = true; - } - } - else - { - //there was no tank bellow this tank - bottom = true; - } - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - if(bottom) - { - //get average water around center tank - for(int i = 0; i<4;i++) - { - int x = this.xCoord; - int z = this.zCoord; - //switch to check each side TODO rewrite for side values - switch(i) - { - case 0: --x; - case 1: ++x; - case 2: --z; - case 3: ++z; - } - TileEntity entity = worldObj.getBlockTileEntity(x,this.yCoord, z); - if(entity instanceof TileEntityBoiler) - { - //if is a tank add to the sum - wSum += ((TileEntityBoiler) entity).getStoredLiquid(1); - tankCount += 1; - } - } - } - //transfers water - for(int i = 0; i<4;i++) - { - int average = wSum / tankCount;// takes the sum and makes it an average - int x2 = this.xCoord; - int z2 = this.zCoord; - int tradeSum = 0; - //switch to check each side TODO rewrite for side values - switch(i) - { - case 0: --x2; - case 1: ++x2; - case 2: --z2; - case 3: ++z2; - } - TileEntity entity = worldObj.getBlockTileEntity(x2,this.yCoord, z2); - if(entity instanceof TileEntityBoiler) - { - int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); - if(targetW < average) - { - tradeSum = Math.min(average, waterStored); //gets the ammount to give to the target tank - int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back - waterStored =rejectedAm + waterStored - tradeSum; //counts up current water sum after trade - } - } - } - if(entityAbove instanceof TileEntityBoiler) - { - int bWater = ((TileEntityBoiler) entityAbove).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) entityAbove).getLiquidCapacity(1); - if(bottom && waterStored > 0) - { - if(bWater < bMax) - { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, steamStored); - int rejectedS = ((TileEntityBoiler) entityAbove).addSteam(tradeVolS); - waterStored = Math.max(waterStored - rejectedS,0); - wSum -= rejectedS; - } - } - } - - - - - - } - public int addSteam(int watt) { - int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); - this.steamStored += watt - rejectedElectricity; - return rejectedElectricity; - } - private void addWater() { - if (this.furnaceItemStacks[0] != null) - { - if(this.furnaceItemStacks[0].isItemEqual(new ItemStack(Item.bucketWater,1))) - { - if((int)waterStored < getLiquidCapacity(1)) - { - ++waterStored; - this.furnaceItemStacks[0] = new ItemStack(Item.bucketEmpty,1); - this.onInventoryChanged(); - } - } - } - - } - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - public void openChest() {} - - public void closeChest() {} - - public int precentHeated() { - int var1; - if(hullHeat < 100) - { - var1 = (int)(100 *(hullHeat/100)); - } - else - { - var1 = 100; - } - return var1; - } - @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 1) - { - int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); - this.waterStored += vol - rejectedElectricity; - return rejectedElectricity; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type,ForgeDirection side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 1) - { - return this.waterStored; - } - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type ==1) - { - return 14; - } - if(type == 0) - { - return steamMax; - } - return 0; - } - @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - if(type == 0) - { - if(steamStored > 1) - { - this.steamStored -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 0) - { - return true; - } - return false; - } - - @Override - public int getStartInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public int getSizeInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, - (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try{ - facing = dataStream.readInt(); - RunTime = dataStream.readInt(); - energyStore = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - heatStored = dataStream.readInt(); - hullHeat = dataStream.readInt(); - heatTick = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } - - } diff --git a/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java b/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java deleted file mode 100644 index c07c5fd2..00000000 --- a/1.3/common/EUI/SteamPower/burner/TileEntityFireBox.java +++ /dev/null @@ -1,301 +0,0 @@ -package EUI.SteamPower.burner; - -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.network.IPacketReceiver; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import EUI.SteamPower.SteamPower; -import EUI.SteamPower.TileEntityMachine; -import EUI.SteamPower.api.IHeatProducer; -import EUI.SteamPower.boiler.*; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer -{ - //max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - //Current generation rate based on hull heat. In TICKS. - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - public ItemStack[] containingItems = new ItemStack[1]; - public void updateEntity() - {if (!this.worldObj.isRemote){ - - if(count == 20) - { - addConnection(); - sharCoal(); - - count = 0; - } - count++; - maxGenerateRate = SteamPower.fireOutput + (connectedUnits*5); - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if(blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. - if (this.containingItems[0] != null && isConnected) - { - if (this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - if(isConnected) - { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); - } - } - //Loose heat when the generator is not connected or if there is no coal in the inventory. - if(this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate-5, 0); - } - } - - //gets all connected fireBoxes and shares its supply of coal - public void sharCoal(){ - for(int i =0; i<6;i++) - { - - if(connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if(this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.containingItems[0].stackSize > 0) - { - if(connectedConsumer.containingItems[0] != null) - { - if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.containingItems[0].stackSize + connectedConsumer.containingItems[0].stackSize)/2; - if(this.containingItems[0].stackSize > connectedConsumer.containingItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.containingItems[0].stackSize); - connectedConsumer.containingItems[0].stackSize = connectedConsumer.containingItems[0].stackSize + transferC; - this.containingItems[0].stackSize = this.containingItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.containingItems[0] = new ItemStack(this.containingItems[0].getItem()); - this.containingItems[0].stackSize -= 1; - } - } - } - } - } - - - } - public void addConnection() - { - connectedUnits = 0; - for(int i = 0; i<6; i++) - { - - TileEntity aEntity = getSteamMachine(i); - if(aEntity instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(ForgeDirection side) - { - if (side == ForgeDirection.DOWN) - { - return 1; - } - if (side == ForgeDirection.UP) - { - return 0; - } - return 2; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { return getSizeInventory(); } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "FireBox"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - @Override - public float onProduceHeat(float jouls, int side) { - // TODO Auto-generated method stub - return Math.min(generateRate,jouls); - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - connectedUnits = dataStream.readInt(); - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} diff --git a/1.3/common/EUI/SteamPower/BlockMachine.java b/1.3/common/SteamPower/BlockMachine.java similarity index 76% rename from 1.3/common/EUI/SteamPower/BlockMachine.java rename to 1.3/common/SteamPower/BlockMachine.java index 6a5ac1bf..61391e62 100644 --- a/1.3/common/EUI/SteamPower/BlockMachine.java +++ b/1.3/common/SteamPower/BlockMachine.java @@ -1,21 +1,21 @@ -package EUI.SteamPower; +package SteamPower; -import java.util.ArrayList; import java.util.List; import java.util.Random; -import universalelectricity.basiccomponents.BasicComponents; - -import EUI.SteamPower.boiler.TileEntityBoiler; -import EUI.SteamPower.burner.TileEntityFireBox; -import EUI.SteamPower.turbine.TileEntityGenerator; -import net.minecraft.client.Minecraft; -import net.minecraft.src.*; -import EUI.SteamPower.*; -import EUIClient.SteamPower.GUIFireBox; -import EUIClient.SteamPower.GUIGenerator; -import EUIClient.SteamPower.GuiBoiler; -import net.minecraftforge.common.ForgeDirection; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityItem; +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.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import SteamPower.boiler.TileEntityBoiler; +import SteamPower.burner.TileEntityFireBox; +import SteamPower.turbine.TileEntityGenerator; public class BlockMachine extends universalelectricity.extend.BlockMachine { @@ -36,7 +36,6 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine par3List.add(new ItemStack(this, 1, 1)); par3List.add(new ItemStack(this, 1, 2)); - par3List.add(new ItemStack(this, 1, 3)); par3List.add(new ItemStack(this, 1, 15)); } @Override @@ -60,22 +59,22 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine float var10 = 0.52F; float var11 = par5Random.nextFloat() * 0.6F - 0.3F; - if (var6 == 5) + if (var6 == 4) { par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); } - else if (var6 == 4) + else if (var6 == 2) { par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); } - else if (var6 == 3) + else if (var6 == 1) { par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); } - else if (var6 == 2) + else if (var6 == 3) { par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); @@ -83,45 +82,7 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine } } } - @Override - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); - int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - if(metadata > -1 && tileEntity != null) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 6; - case 1: return 4; - case 2: return 7; - case 3: return 4; - } - } - //If it is the back side - else if(side == ((TileEntityMachine) tileEntity).getDirection()); - { - switch(metadata) - { - case 0: return 5; - case 2: return 8; - case 3: return 4; - } - } - - - switch(metadata) - { - case 1: return 0; - case 2: return 2; - } - } - return 1; - - - } + @Override public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) { @@ -130,10 +91,10 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine //Reorient the block switch(tileEntity.getDirection()) { - case 2: tileEntity.setDirection(5); break; - case 5: tileEntity.setDirection(3); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; case 3: tileEntity.setDirection(4); break; - case 4: tileEntity.setDirection(2); break; + case 4: tileEntity.setDirection(1); break; } return true; @@ -159,17 +120,12 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine if(blockEntity instanceof TileEntityBoiler) { TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPower.instance, 1, par1World, x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); } if(blockEntity instanceof TileEntityFireBox) { TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPower.instance, 0, par1World, x, y, z); - } - if(blockEntity instanceof TileEntityGenerator) - { - TileEntity var6 = (TileEntityGenerator)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPower.instance, 2, par1World, x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); } } @@ -183,7 +139,6 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine { case 1: return new TileEntityBoiler(); case 2: return new TileEntityFireBox(); - case 3: return new TileEntityGenerator(); case 15: return new TileEntityNuller(); } return null; @@ -201,10 +156,10 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine switch (angle) { - case 0: tileEntity.setDirection(5); break; - case 1: tileEntity.setDirection(3); break; - case 2: tileEntity.setDirection(4); break; - case 3: tileEntity.setDirection(2); break; + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; } } /** @@ -266,6 +221,7 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine super.breakBlock(par1World, par2, par3, par4, par5, par6); } + @Override public String getTextureFile() { @@ -286,4 +242,5 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine { return -1; } + } diff --git a/1.3/common/EUI/SteamPower/ItemCoalFuel.java b/1.3/common/SteamPower/ItemCoalFuel.java similarity index 98% rename from 1.3/common/EUI/SteamPower/ItemCoalFuel.java rename to 1.3/common/SteamPower/ItemCoalFuel.java index 8a25c219..19036e6a 100644 --- a/1.3/common/EUI/SteamPower/ItemCoalFuel.java +++ b/1.3/common/SteamPower/ItemCoalFuel.java @@ -1,4 +1,4 @@ -package EUI.SteamPower; +package SteamPower; import java.util.ArrayList; diff --git a/1.3/common/EUI/SteamPower/ItemMachine.java b/1.3/common/SteamPower/ItemMachine.java similarity index 98% rename from 1.3/common/EUI/SteamPower/ItemMachine.java rename to 1.3/common/SteamPower/ItemMachine.java index 5a41ce2d..b25de352 100644 --- a/1.3/common/EUI/SteamPower/ItemMachine.java +++ b/1.3/common/SteamPower/ItemMachine.java @@ -1,4 +1,4 @@ -package EUI.SteamPower; +package SteamPower; import java.util.ArrayList; import java.util.List; diff --git a/1.3/common/EUI/SteamPower/ItemParts.java b/1.3/common/SteamPower/ItemParts.java similarity index 98% rename from 1.3/common/EUI/SteamPower/ItemParts.java rename to 1.3/common/SteamPower/ItemParts.java index 22255215..4274bf2d 100644 --- a/1.3/common/EUI/SteamPower/ItemParts.java +++ b/1.3/common/SteamPower/ItemParts.java @@ -1,4 +1,4 @@ -package EUI.SteamPower; +package SteamPower; import java.util.ArrayList; diff --git a/1.3/common/EUI/SteamPower/SteamPower.java b/1.3/common/SteamPower/SteamPowerMain.java similarity index 71% rename from 1.3/common/EUI/SteamPower/SteamPower.java rename to 1.3/common/SteamPower/SteamPowerMain.java index ede15267..d79b7bf6 100644 --- a/1.3/common/EUI/SteamPower/SteamPower.java +++ b/1.3/common/SteamPower/SteamPowerMain.java @@ -1,24 +1,25 @@ -package EUI.SteamPower; +package SteamPower; +import java.io.File; + +import SteamPower.turbine.BlockEngine; +import SteamPower.turbine.ItemEngine; +import SteamPower.turbine.TileEntitytopGen; + import net.minecraft.client.Minecraft; import net.minecraft.src.Block; +import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraftforge.common.Configuration; - -import java.util.ArrayList; -import java.util.Map; -import java.io.*; - -import EUI.BasicPipes.BasicPipes; -import EUI.SteamPower.boiler.TileEntityBoiler; -import EUI.SteamPower.burner.TileEntityFireBox; -import EUI.SteamPower.turbine.TileEntityGenerator; - +import universalelectricity.UniversalElectricity; +import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.network.PacketManager; +import BasicPipes.BasicPipesMain; import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.PostInit; -import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -26,33 +27,35 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; - -import universalelectricity.UniversalElectricity; -import universalelectricity.basiccomponents.BasicComponents; -import universalelectricity.network.PacketManager; -@Mod(modid = "SteamPower", name = "Steam Power", version = "V4") +@Mod(modid = "SteamPower", name = "Steam Power", version = "V8") @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPower{ +public class SteamPowerMain{ static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); private static int BlockID= configurationProperties(); + public static int EngineItemID; + public static int EngineID; public static int genOutput; public static int steamOutBoiler; public static int pipeLoss; public static int boilerHeat; public static int fireOutput; public static final String channel = "SPpack"; - public static Block machine = new EUI.SteamPower.BlockMachine(BlockID).setBlockName("machine"); + public static Block machine = new BlockMachine(BlockID).setBlockName("machine"); + public static Block engine = new BlockEngine(EngineID).setBlockName("SteamEngien"); + public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); @Instance - public static SteamPower instance; + public static SteamPowerMain instance; - @SidedProxy(clientSide = "EUIClient.SteamPower.SteamClientProxy", serverSide = "EUI.SteamPower.SteamProxy") + @SidedProxy(clientSide = "SteamPower.SteamClientProxy", serverSide = "SteamPower.SteamProxy") public static SteamProxy proxy; public static String textureFile = "/EUIClient/Textures/"; public static int configurationProperties() { config.load(); BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); + EngineItemID = Integer.parseInt(config.getOrCreateIntProperty("EngineItem", Configuration.CATEGORY_ITEM, 30308).value); + EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); @@ -67,16 +70,18 @@ public class SteamPower{ NetworkRegistry.instance().registerGuiHandler(this, this.proxy); proxy.preInit(); GameRegistry.registerBlock(machine, ItemMachine.class); + GameRegistry.registerBlock(engine); } @Init public void load(FMLInitializationEvent evt) { proxy.init(); GameRegistry.registerTileEntity(TileEntityNuller.class, "EUNuller"); + GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); //Names............... LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); - LanguageRegistry.addName((new ItemStack(machine, 1, 3)), "SteamGen"); + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); LanguageRegistry.addName((new ItemStack(machine, 1, 15)), "EUVampire"); @@ -84,8 +89,8 @@ public class SteamPower{ @PostInit public void postInit(FMLPostInitializationEvent event) { + proxy.postInit(); - UniversalElectricity.registerMod(this,"SteamPower", "0.5.1"); //Crafting /** * case 0: return new TileEntityGrinder(); <-Removed @@ -96,15 +101,15 @@ public class SteamPower{ case 15: return new TileEntityNuller();<-Just for testing Not craftable */ GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(BasicPipes.parts, 1,5), + 'T',new ItemStack(BasicPipesMain.parts, 1,5), '@',new ItemStack(BasicComponents.itemSteelPlate), - 'O',new ItemStack(BasicPipes.parts, 1,1), - 'V',new ItemStack(BasicPipes.parts, 1,6)}); + 'O',new ItemStack(BasicPipesMain.parts, 1,1), + 'V',new ItemStack(BasicPipesMain.parts, 1,6)}); GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", 'F',Block.stoneOvenIdle, '@',new ItemStack(BasicComponents.itemSteelPlate)}); - GameRegistry.addRecipe(new ItemStack(machine, 1, 3), new Object [] {"@T@", "PMP", "@T@", - 'T',new ItemStack(BasicPipes.parts, 1,0), + GameRegistry.addRecipe(new ItemStack(itemEngine, 1, 0), new Object [] {"@T@", "PMP", "@T@", + 'T',new ItemStack(BasicPipesMain.parts, 1,0), '@',new ItemStack(BasicComponents.itemSteelPlate), 'P',Block.pistonBase, 'M',new ItemStack(BasicComponents.itemMotor)}); diff --git a/1.3/common/EUI/SteamPower/SteamProxy.java b/1.3/common/SteamPower/SteamProxy.java similarity index 74% rename from 1.3/common/EUI/SteamPower/SteamProxy.java rename to 1.3/common/SteamPower/SteamProxy.java index c82623ac..ca53eb48 100644 --- a/1.3/common/EUI/SteamPower/SteamProxy.java +++ b/1.3/common/SteamPower/SteamProxy.java @@ -1,21 +1,17 @@ -package EUI.SteamPower; +package SteamPower; -import universalelectricity.basiccomponents.GUIBatteryBox; -import universalelectricity.basiccomponents.TileEntityBatteryBox; -import EUI.SteamPower.boiler.ContainerBoiler; -import EUI.SteamPower.boiler.TileEntityBoiler; -import EUI.SteamPower.burner.ContainerFireBox; -import EUI.SteamPower.burner.TileEntityFireBox; -import EUI.SteamPower.turbine.ContainerGenerator; -import EUI.SteamPower.turbine.TileEntityGenerator; -import EUIClient.SteamPower.GUIFireBox; -import EUIClient.SteamPower.GUIGenerator; -import EUIClient.SteamPower.GuiBoiler; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import SteamPower.boiler.ContainerBoiler; +import SteamPower.boiler.TileEntityBoiler; +import SteamPower.burner.ContainerFireBox; +import SteamPower.burner.TileEntityFireBox; +import SteamPower.turbine.ContainerGenerator; +import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntitytopGen; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; public class SteamProxy implements IGuiHandler{ @@ -29,6 +25,7 @@ public class SteamProxy implements IGuiHandler{ GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); GameRegistry.registerTileEntity(TileEntityGenerator.class, "generator"); + } public void postInit() { diff --git a/1.3/common/SteamPower/TileEntityMachine.java b/1.3/common/SteamPower/TileEntityMachine.java new file mode 100644 index 00000000..081562a8 --- /dev/null +++ b/1.3/common/SteamPower/TileEntityMachine.java @@ -0,0 +1,261 @@ +package SteamPower; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.electricity.TileEntityElectricUnit; +import universalelectricity.extend.IRotatable; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import net.minecraft.src.*; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +public class TileEntityMachine extends TileEntityElectricUnit implements IInventory, ISidedInventory +{ + public int facing = 0; + private int count = 0; + public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; + public int getTickInterval() + { + return 10; + + } + private int getInvSize() { + return 1; + } + public int getDirection() + { + return this.facing; + } + + public void setDirection(int i) + { + this.facing = i; + } + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", this.facing); + //inventory + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.storedItems.length; ++var3) + { + if (this.storedItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.storedItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + //inventory + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.storedItems = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.storedItems.length) + { + this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + //vars + this.facing = par1NBTTagCompound.getInteger("facing"); + } + + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public boolean canUpdate() + { + return true; + } + public Object[] getSendData() + { + return new Object[]{}; + } + public int getNumSide(ForgeDirection side) + { + if(side == ForgeDirection.DOWN) + { + return 0; + } + if(side == ForgeDirection.UP) + { + return 1; + } + if(side == ForgeDirection.NORTH) + { + return 2; + } + if(side == ForgeDirection.SOUTH) + { + return 3; + } + if(side == ForgeDirection.WEST) + { + return 4; + } + if(side == ForgeDirection.EAST) + { + return 5; + } + return 0; + } + + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + count++; + + if(!worldObj.isRemote) + { + PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); + } + count = 0; + + } + + + ////////////////////////// + //I Inventory shit + ///////////////////////// + public int getSizeInventory() + { + return this.storedItems.length; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.storedItems[par1]; + } + + public ItemStack decrStackSize(int par1, int par2) + { + if (this.storedItems[par1] != null) + { + ItemStack var3; + + if (this.storedItems[par1].stackSize <= par2) + { + var3 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var3; + } + else + { + var3 = this.storedItems[par1].splitStack(par2); + + if (this.storedItems[par1].stackSize == 0) + { + this.storedItems[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.storedItems[par1] != null) + { + ItemStack var2 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.storedItems[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public int getStartInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public String getInvName() { + // TODO Auto-generated method stub + return "SteamMachine"; + } + @Override + public void openChest() { + // TODO Auto-generated method stub + + } + @Override + public void closeChest() { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/1.3/common/EUI/SteamPower/TileEntityNuller.java b/1.3/common/SteamPower/TileEntityNuller.java similarity index 95% rename from 1.3/common/EUI/SteamPower/TileEntityNuller.java rename to 1.3/common/SteamPower/TileEntityNuller.java index 28ceb6c9..00c1af36 100644 --- a/1.3/common/EUI/SteamPower/TileEntityNuller.java +++ b/1.3/common/SteamPower/TileEntityNuller.java @@ -1,4 +1,4 @@ -package EUI.SteamPower; +package SteamPower; import net.minecraftforge.common.ForgeDirection; import universalelectricity.extend.IElectricUnit; diff --git a/1.3/common/EUI/SteamPower/api/IHeatConsumer.java b/1.3/common/SteamPower/ap/IHeatConsumer.java similarity index 96% rename from 1.3/common/EUI/SteamPower/api/IHeatConsumer.java rename to 1.3/common/SteamPower/ap/IHeatConsumer.java index 6b5e1c28..8d4f24c1 100644 --- a/1.3/common/EUI/SteamPower/api/IHeatConsumer.java +++ b/1.3/common/SteamPower/ap/IHeatConsumer.java @@ -1,4 +1,4 @@ -package EUI.SteamPower.api; +package SteamPower.ap; /** * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. diff --git a/1.3/common/EUI/SteamPower/api/IHeatProducer.java b/1.3/common/SteamPower/ap/IHeatProducer.java similarity index 93% rename from 1.3/common/EUI/SteamPower/api/IHeatProducer.java rename to 1.3/common/SteamPower/ap/IHeatProducer.java index 1c8e33db..4b729111 100644 --- a/1.3/common/EUI/SteamPower/api/IHeatProducer.java +++ b/1.3/common/SteamPower/ap/IHeatProducer.java @@ -1,4 +1,4 @@ -package EUI.SteamPower.api; +package SteamPower.ap; public interface IHeatProducer diff --git a/1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java b/1.3/common/SteamPower/boiler/ContainerBoiler.java similarity index 97% rename from 1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java rename to 1.3/common/SteamPower/boiler/ContainerBoiler.java index af6599f5..c6ab4323 100644 --- a/1.3/common/EUI/SteamPower/boiler/ContainerBoiler.java +++ b/1.3/common/SteamPower/boiler/ContainerBoiler.java @@ -1,4 +1,4 @@ -package EUI.SteamPower.boiler; +package SteamPower.boiler; import net.minecraft.src.*; public class ContainerBoiler extends Container diff --git a/1.3/common/SteamPower/boiler/TileEntityBoiler.java b/1.3/common/SteamPower/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..bd70d7f1 --- /dev/null +++ b/1.3/common/SteamPower/boiler/TileEntityBoiler.java @@ -0,0 +1,329 @@ +package SteamPower.boiler; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.network.IPacketReceiver; +import BasicPipes.TradeHelper; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; +import SteamPower.SteamPowerMain; +import SteamPower.TileEntityMachine; +import SteamPower.burner.TileEntityFireBox; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, ILiquidConsumer +{ + + /** + * The ItemStacks that hold the items currently being used in the furnace + */ + + + /** The number of ticks that the boiler will keep burning */ + public int RunTime = 0; + /** The ammount of energy stored before being add to run Timer */ + public int energyStore = 0; + /** The ammount of water stored */ + public int waterStored = 0; + /** The ammount of steam stored */ + public int steamStored = 0; + /** The ammount of heat stored */ + public int heatStored = 0; + public int heatMax = 10000; + /** The ammount of heat stored */ + public int hullHeat = 0; + public int hullHeatMax = 10000; + private int heatTick = 0; + public int tankCount = 0; + private int heatNeeded = SteamPowerMain.boilerHeat; // kilo joules + int count = 0; + boolean hullHeated = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + int steamMax = 140; + public boolean isBeingHeated = false; + public String getInvName() + { + return "container.boiler"; + } + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, + (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + facing = dataStream.readInt(); + RunTime = dataStream.readInt(); + energyStore = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + heatStored = dataStream.readInt(); + hullHeat = dataStream.readInt(); + heatTick = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.RunTime = par1NBTTagCompound.getShort("BurnTime"); + this.energyStore = par1NBTTagCompound.getInteger("energyStore"); + this.steamStored = par1NBTTagCompound.getInteger("steamStore"); + this.heatStored = par1NBTTagCompound.getInteger("heatStore"); + this.waterStored = par1NBTTagCompound.getInteger("waterStore"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); + par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); + par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); + par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); + par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); + par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); + + } + + + private boolean getIsHeated() { + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); + if(blockEntity instanceof TileEntityFireBox) + { + return true; + } + else + { + return false; + } + } + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + @Override + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + //update connection list + TileEntity[] entityList = TradeHelper.getSourounding(this); + tankCount = 0; + for(int c = 0; c< 6; c++) + { + + if(entityList[c] instanceof TileEntityBoiler) + { + connectedBlocks[c] = entityList[c]; + if(entityList[c] == connectedBlocks[0] || entityList[c] == connectedBlocks[1]) + { + + } + else + { + tankCount++; + } + } + else + { + connectedBlocks[c] = null; + } + } + isBeingHeated = getIsHeated(); + if(!worldObj.isRemote) + { + addWater();//adds water from container slot + this.waterStored = TradeHelper.shareLiquid(this, 1, false); + this.steamStored = TradeHelper.shareLiquid(this, 0, true); + + //changed hullHeat max depending on contents of boiler + if(waterStored > 0) + { + hullHeatMax = 4700; + if(hullHeat > hullHeatMax) + { + hullHeat = 4700; + } + } + else + { + hullHeatMax = 10000; + } + + //Checks if the hull is heated + if(hullHeat >= hullHeatMax) + { + hullHeated = true; + } + else + { + hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); + } + + //checks if heat level hit max + if(hullHeat >= 10000) + { + if(heatTick >= 1200) + { + // TODO remove block and set fire + heatTick = 0; + } + else + { + heatTick += 1; + } + } + + + + //hull heated ? (do work) : move on + if(hullHeated) + { + if(heatStored > SteamPowerMain.fireOutput) + { + if(waterStored >= 1){ + if(heatStored >= heatNeeded) + { + heatStored = Math.max(heatStored - heatNeeded, 0); + --waterStored; + steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); + } + } + else + { + heatStored = 0; + } + } + } + TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); + if(blockE instanceof TileEntityFireBox) + { + if(!hullHeated || waterStored > 0) + { + heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput, 1)), heatMax); + } + } + } + } + + public int addSteam(int watt) { + int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); + this.steamStored += watt - rejectedElectricity; + return rejectedElectricity; + } + private void addWater() { + if (storedItems[0] != null) + { + if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) + { + if((int)waterStored < getLiquidCapacity(1)) + { + ++waterStored; + this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); + this.onInventoryChanged(); + } + } + } + + } + public int precentHeated() { + int var1; + if(hullHeat < 100) + { + var1 = (int)(100 *(hullHeat/100)); + } + else + { + var1 = 100; + } + return var1; + } + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 1) + { + int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); + this.waterStored += vol - rejectedElectricity; + return rejectedElectricity; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type,ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 1) + { + return this.waterStored; + } + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type ==1) + { + return 14; + } + if(type == 0) + { + return steamMax; + } + return 0; + } + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 0) + { + if(steamStored > 1) + { + this.steamStored -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + + } diff --git a/1.3/common/EUI/SteamPower/burner/ContainerFireBox.java b/1.3/common/SteamPower/burner/ContainerFireBox.java similarity index 97% rename from 1.3/common/EUI/SteamPower/burner/ContainerFireBox.java rename to 1.3/common/SteamPower/burner/ContainerFireBox.java index 20918815..f4176fd4 100644 --- a/1.3/common/EUI/SteamPower/burner/ContainerFireBox.java +++ b/1.3/common/SteamPower/burner/ContainerFireBox.java @@ -1,4 +1,4 @@ -package EUI.SteamPower.burner; +package SteamPower.burner; import net.minecraft.src.*; diff --git a/1.3/common/SteamPower/burner/TileEntityFireBox.java b/1.3/common/SteamPower/burner/TileEntityFireBox.java new file mode 100644 index 00000000..2badf0a5 --- /dev/null +++ b/1.3/common/SteamPower/burner/TileEntityFireBox.java @@ -0,0 +1,203 @@ +package SteamPower.burner; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.network.IPacketReceiver; +import BasicPipes.TradeHelper; +import SteamPower.TileEntityMachine; +import SteamPower.ap.IHeatProducer; +import SteamPower.boiler.TileEntityBoiler; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer +{ + //max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + //Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + private int getInvSize() { + return 1; + } + public int getTickInterval() + { + return 5; + + } + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + addConnection(); + if(!worldObj.isRemote) + { + sharCoal(); + } + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if(blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + if (!this.worldObj.isRemote){ + + + maxGenerateRate = SteamPower.SteamPowerMain.fireOutput + (connectedUnits*5); + + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.storedItems[0] != null && isConnected) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + if(isConnected) + { + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); + } + } + //Loose heat when the generator is not connected or if there is no coal in the inventory. + if(this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate-5, 0); + } + } + + //gets all connected fireBoxes and shares its supply of coal + public void sharCoal(){ + for(int i =0; i<6;i++) + { + + if(connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if(this.storedItems[0] != null) + { + if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) + { + if(connectedConsumer.storedItems[0] != null) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; + if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); + connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; + this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem()); + this.storedItems[0].stackSize -= 1; + } + } + } + } + } + + + } + public void addConnection() + { + connectedUnits = 0; + TileEntity[] aEntity = TradeHelper.getSourounding(this); + for(int i = 0; i<6; i++) + { + + + if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity[i]; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); + } + @Override + public String getInvName() { + return "FireBox"; + } + public float onProduceHeat(float jouls, int side) { + // TODO Auto-generated method stub + return Math.min(generateRate,jouls); + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + connectedUnits = dataStream.readInt(); + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/1.3/common/SteamPower/turbine/BlockEngine.java b/1.3/common/SteamPower/turbine/BlockEngine.java new file mode 100644 index 00000000..0a1c3d78 --- /dev/null +++ b/1.3/common/SteamPower/turbine/BlockEngine.java @@ -0,0 +1,185 @@ +package SteamPower.turbine; + +import java.util.List; +import java.util.Random; + +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 SteamPower.SteamPowerMain; +import SteamPower.TileEntityMachine; + +public class BlockEngine extends universalelectricity.extend.BlockMachine{ + + public BlockEngine(int par1) { + super("SteamEngine", par1, Material.iron); + + } + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(this, 1, 0)); + } + @Override + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + case 4: tileEntity.setDirection(1); break; + } + + return true; + } + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + } + } + public TileEntity createNewTileEntity(World var1) + { + return null; + } + public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntityGenerator) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); + } + if(blockEntity instanceof TileEntitytopGen) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); + } + } + + return true; + } + } + public void breakBlock(World world, int x, int y, int z,int par5, int par6) + { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + if(world.getBlockId(x, y+1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)> 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + else + if(meta > 4) + { + if(world.getBlockId(x, y-1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)< 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if(metadata < 4) + { + return new TileEntityGenerator(); + } + if(metadata == 14) + { + return new TileEntitytopGen(); + } + if(metadata == 15) + { + return null; + } + return null; + } + public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) + { + int meta = par1World.getBlockMetadata(par2, par3, par4); + boolean var7 = false; + if (meta < 4) + { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + var7 = true; + } + } + else + { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + if (var7) + { + if (!par1World.isRemote) + { + this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); + } + } + } + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return SteamPowerMain.itemEngine.shiftedIndex; + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3+1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); + } +} diff --git a/1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java b/1.3/common/SteamPower/turbine/ContainerGenerator.java similarity index 97% rename from 1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java rename to 1.3/common/SteamPower/turbine/ContainerGenerator.java index 293b2424..d6eb883e 100644 --- a/1.3/common/EUI/SteamPower/turbine/ContainerGenerator.java +++ b/1.3/common/SteamPower/turbine/ContainerGenerator.java @@ -1,4 +1,4 @@ -package EUI.SteamPower.turbine; +package SteamPower.turbine; import net.minecraft.src.*; diff --git a/1.3/common/SteamPower/turbine/ItemEngine.java b/1.3/common/SteamPower/turbine/ItemEngine.java new file mode 100644 index 00000000..1385251b --- /dev/null +++ b/1.3/common/SteamPower/turbine/ItemEngine.java @@ -0,0 +1,66 @@ +package SteamPower.turbine; +import java.util.List; + +import SteamPower.SteamPowerMain; +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Material; +import net.minecraft.src.MathHelper; +import net.minecraft.src.World; + +public class ItemEngine extends Item +{ + public ItemEngine(int par1) + { + super(par1); + this.maxStackSize = 5; + this.setTabToDisplayOn(CreativeTabs.tabBlock); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(this, 1, 0)); + } + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + if (par3World.isRemote) + { + return false; + } + + Block var11 = SteamPowerMain.engine; + int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(par3World.getBlockId(par4, par5, par6) == var11.blockID && par3World.getBlockMetadata(par4, par5, par6) == 15) + { + par3World.editingBlocks = true; + par3World.setBlockAndMetadataWithUpdate(par4, par5, par6, var11.blockID, 14,true); + par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); + ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); + par3World.editingBlocks = false; + } + else + { + if (ePlayer.canPlayerEdit(par4, par5, par6)) + { + ++par5; + + if (var11.canPlaceBlockAt(par3World, par4, par5, par6)) + { + par3World.editingBlocks = true; + par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, angle); + par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); + par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); + par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); + ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); + par3World.editingBlocks = false; + --par1ItemStack.stackSize; + return true; + } + } + } + return false; + } +} diff --git a/1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java b/1.3/common/SteamPower/turbine/TileEntityGenerator.java similarity index 78% rename from 1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java rename to 1.3/common/SteamPower/turbine/TileEntityGenerator.java index 50c05594..30fe63d7 100644 --- a/1.3/common/EUI/SteamPower/turbine/TileEntityGenerator.java +++ b/1.3/common/SteamPower/turbine/TileEntityGenerator.java @@ -1,6 +1,4 @@ -package EUI.SteamPower.turbine; - -import com.google.common.io.ByteArrayDataInput; +package SteamPower.turbine; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; @@ -13,16 +11,17 @@ import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; -import universalelectricity.UniversalElectricity; import universalelectricity.Vector3; import universalelectricity.electricity.ElectricityManager; import universalelectricity.extend.IElectricUnit; import universalelectricity.extend.TileEntityConductor; import universalelectricity.network.IPacketReceiver; -import EUI.BasicPipes.pipes.api.ILiquidConsumer; -import EUI.BasicPipes.pipes.api.ILiquidProducer; -import EUI.SteamPower.SteamPower; -import EUI.SteamPower.TileEntityMachine; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; +import SteamPower.SteamPowerMain; +import SteamPower.TileEntityMachine; + +import com.google.common.io.ByteArrayDataInput; public class TileEntityGenerator extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory { @@ -31,69 +30,115 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec public int waterStored = 0; public int steamStored = 0; public int steamConsumed = 0; + public float position = 0; + public int count = 0; //Current generation rate based on hull heat. In TICKS. public float generateRate = 0; //public TileEntityConductor connectedWire = null; /** * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for */ - public int itemCookTime = 0; + public int genTime = 0; /** * The ItemStacks that hold the items currently being used in the battery box */ private ItemStack[] containingItems = new ItemStack[1]; - public TileEntityConductor connectedElectricUnit = null; + public TileEntityConductor connectedElectricUnit = null; + public boolean isConnected = false; + private boolean posT = true; @Override public boolean canConnect(ForgeDirection side) { return true; } - + public int getTickInterval() + { + return 10; + + } /** * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. */ public void onUpdate(float watts, float voltage, ForgeDirection side) - { if(!this.worldObj.isRemote) - { + { super.onUpdate(watts, voltage, side); - - //Check nearby blocks and see if the conductor is full. If so, then it is connected - TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite()); - - - if(tileEntity instanceof TileEntityConductor) + count++; + float cPercent = (generateRate/10); + int cCount = 1; + if(cPercent > 25f) { - if(ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + cCount = 2; + } + if(cPercent > 50f) + { + cCount = 3; + } + if(cPercent > 75f) + { + cCount = 4; + } + if(generateRate > 0) + { + + if(position < 9f && posT ) { - this.connectedElectricUnit = (TileEntityConductor)tileEntity; + position+= cCount; } else { - this.connectedElectricUnit = null; + posT = false; } + if(position > 1f && !posT ) + { + position-= cCount; + } + else + { + posT = true; + } + count =0; } - else + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if(ent instanceof TileEntitytopGen) { - this.connectedElectricUnit = null; + isConnected = true; } + this.connectedElectricUnit = null; + //Check nearby blocks and see if the conductor is full. If so, then it is connected + for(int i = 0;i<6;i++) + { + TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), + ForgeDirection.getOrientation(i)); + if (tileEntity instanceof TileEntityConductor) + { + if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + { + this.connectedElectricUnit = (TileEntityConductor)tileEntity; + } + } + } + + if(!this.worldObj.isRemote) + { + if(!this.isDisabled()) { //Adds time to runTime by consuming steam - if(this.itemCookTime <= 0) + if(this.genTime <= 0) { if(steamStored > 0) { --steamStored; ++steamConsumed; - if(steamConsumed == SteamPower.steamOutBoiler) + if(steamConsumed >= SteamPowerMain.steamOutBoiler) { ++waterStored; steamConsumed = 0; } - itemCookTime += 65; + genTime += 65; } } @@ -111,17 +156,17 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec } //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) + if (this.genTime > 0) { - this.itemCookTime --; + this.genTime --; if(this.connectedElectricUnit != null) { - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.001+0.0015, 0.05F), this.maxGenerateRate/20); + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); } } - if(this.connectedElectricUnit == null || this.itemCookTime <= 0) + if(this.connectedElectricUnit == null || this.genTime <= 0) { this.generateRate = (float)Math.max(this.generateRate-0.05, 0); } @@ -139,7 +184,7 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); this.waterStored = par1NBTTagCompound.getInteger("waterStored"); this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); this.steamStored = par1NBTTagCompound.getInteger("steamStored"); @@ -162,7 +207,7 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); @@ -273,13 +318,14 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec } @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + public int onProduceLiquid(int type, int Vol, ForgeDirection side) { if(type == 1) { if(this.waterStored > 0) { - --waterStored; - return 1; + int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); + this.waterStored += waterStored - rejectedSteam; + return rejectedSteam; } } return 0; @@ -334,7 +380,7 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec @Override public Object[] getSendData() { - return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(int)generateRate,(int)itemCookTime}; + return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; } @Override @@ -347,8 +393,8 @@ public class TileEntityGenerator extends TileEntityMachine implements IPacketRec waterStored = dataStream.readInt(); steamStored = dataStream.readInt(); steamConsumed = dataStream.readInt(); - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); + generateRate = dataStream.readFloat(); + genTime = dataStream.readInt(); } catch(Exception e) { diff --git a/1.3/common/SteamPower/turbine/TileEntitytopGen.java b/1.3/common/SteamPower/turbine/TileEntitytopGen.java new file mode 100644 index 00000000..aaf15d88 --- /dev/null +++ b/1.3/common/SteamPower/turbine/TileEntitytopGen.java @@ -0,0 +1,69 @@ +package SteamPower.turbine; + +import com.google.common.io.ByteArrayDataInput; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.extend.IElectricUnit; +import universalelectricity.network.IPacketReceiver; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; +import SteamPower.TileEntityMachine; + +public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { +public TileEntityGenerator genB = null; + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + if(!this.worldObj.isRemote) + { + super.onUpdate(watts, voltage, side); + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); + if(ent instanceof TileEntityGenerator) + { + genB = (TileEntityGenerator)ent; + } + } + } + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.onProduceLiquid(type, maxVol, side) : 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.canProduceLiquid(type, side) : false; + } + + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.onReceiveLiquid(type, vol, side) : vol; + } + + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.canRecieveLiquid(type, side): false; + } + + @Override + public int getStoredLiquid(int type) { + // TODO Auto-generated method stub + return genB !=null ? genB.getStoredLiquid(type): 0; + } + + @Override + public int getLiquidCapacity(int type) { + // TODO Auto-generated method stub + return genB !=null ? genB.getLiquidCapacity(type): 0; + } + +} diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java b/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java deleted file mode 100644 index b64d662c..00000000 --- a/1.3/minecraft/EUIClient/SteamPower/RenderBoiler.java +++ /dev/null @@ -1,30 +0,0 @@ -package EUIClient.SteamPower; - -import org.lwjgl.opengl.GL11; - -import EUI.SteamPower.SteamPower; - -import net.minecraft.src.*; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - - public RenderBoiler(float par1) - { - model = new ModelTank(par1); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPower.textureFile+"tankTexture.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.generalRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/Textures/CornerTank.png b/1.3/minecraft/EUIClient/Textures/CornerTank.png new file mode 100644 index 0000000000000000000000000000000000000000..1477442fc608a221711478243884f7abf6ee93f4 GIT binary patch literal 2686 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 W)Tr2KPyRuf0$dR8jxF{ 0) { @@ -48,6 +48,7 @@ import net.minecraft.src.*; displayText = "No Steam"; } } + else if(tileEntity.generateRate*20 < 20) { displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; @@ -69,7 +70,7 @@ import net.minecraft.src.*; */ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { - int var4 = this.mc.renderEngine.getTexture(SteamPower.textureFile+"SteamGUI.png"); + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); containerWidth = (this.width - this.xSize) / 2; diff --git a/1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java b/1.3/minecraft/SteamPower/GuiBoiler.java similarity index 89% rename from 1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java rename to 1.3/minecraft/SteamPower/GuiBoiler.java index dc91a79c..786e4daf 100644 --- a/1.3/minecraft/EUIClient/SteamPower/GuiBoiler.java +++ b/1.3/minecraft/SteamPower/GuiBoiler.java @@ -1,13 +1,14 @@ -package EUIClient.SteamPower; +package SteamPower; import java.text.DecimalFormat; -import net.minecraft.src.*; +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.StatCollector; import org.lwjgl.opengl.GL11; -import EUI.SteamPower.SteamPower; -import EUI.SteamPower.boiler.ContainerBoiler; -import EUI.SteamPower.boiler.TileEntityBoiler; +import SteamPower.boiler.ContainerBoiler; +import SteamPower.boiler.TileEntityBoiler; public class GuiBoiler extends GuiContainer { @@ -37,7 +38,7 @@ public class GuiBoiler extends GuiContainer */ protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { - int var4 = this.mc.renderEngine.getTexture(SteamPower.textureFile+"BoilerGui.png"); + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); this.mc.renderEngine.bindTexture(var4); int var5 = (this.width - this.xSize) / 2; diff --git a/1.3/minecraft/SteamPower/ModelCenterTank.java b/1.3/minecraft/SteamPower/ModelCenterTank.java new file mode 100644 index 00000000..00f0ef1e --- /dev/null +++ b/1.3/minecraft/SteamPower/ModelCenterTank.java @@ -0,0 +1,59 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCenterTank extends ModelBase +{ + + ModelRenderer Block; + + public ModelCenterTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //block + Block = new ModelRenderer(this, 0, 0); + Block.addBox(0F, 0F, 0F, 16, 16, 16); + Block.setRotationPoint(-8F, 8F, -8F); + Block.setTextureSize(128, 32); + Block.mirror = true; + setRotation(Block, 0F, 0F, 0F); + } + public void renderBlock(float f5) + { + Block.render(f5); + } + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/SteamPower/ModelCornerTank.java b/1.3/minecraft/SteamPower/ModelCornerTank.java new file mode 100644 index 00000000..87c030fe --- /dev/null +++ b/1.3/minecraft/SteamPower/ModelCornerTank.java @@ -0,0 +1,100 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCornerTank extends ModelBase +{ + //Corner + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape4; + + public ModelCornerTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //corner + Shape1 = new ModelRenderer(this, 0, 1); + Shape1.addBox(0F, 0F, 0F, 1, 16, 20); + Shape1.setRotationPoint(7F, 8F, -7F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, -0.7853982F, 0F); + Shape2 = new ModelRenderer(this, 44, 0); + Shape2.addBox(0F, 0F, 0F, 2, 16, 2); + Shape2.setRotationPoint(-8F, 8F, 6F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 44, 0); + Shape3.addBox(0F, 0F, 0F, 2, 16, 2); + Shape3.setRotationPoint(6F, 8F, -8F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 44); + Shape6.addBox(0F, 0F, 0F, 1, 15, 13); + Shape6.setRotationPoint(-8F, 9F, -7F); + Shape6.setTextureSize(128, 128); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 0, 73); + Shape7.addBox(0F, 0F, 0F, 14, 15, 1); + Shape7.setRotationPoint(-8F, 9F, -8F); + Shape7.setTextureSize(128, 128); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 92); + Shape4.addBox(0F, 0F, 0F, 16, 1, 16); + Shape4.setRotationPoint(-8F, 8F, -8F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + } + public void renderCorner(float f5) + { + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape4.render(f5); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/SteamPower/ModelEngine.java b/1.3/minecraft/SteamPower/ModelEngine.java new file mode 100644 index 00000000..9d766aae --- /dev/null +++ b/1.3/minecraft/SteamPower/ModelEngine.java @@ -0,0 +1,115 @@ +// Date: 8/24/2012 1:44:37 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer Base; + ModelRenderer top; + ModelRenderer TopPiston; + ModelRenderer BottomPiston; + ModelRenderer center; + ModelRenderer C1; + ModelRenderer C2; + + public ModelEngine() + { + textureWidth = 64; + textureHeight = 64; + + Base = new ModelRenderer(this, 0, 20); + Base.addBox(-6F, 0F, -6F, 12, 8, 12); + Base.setRotationPoint(0F, 16F, 0F); + Base.setTextureSize(64, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + top = new ModelRenderer(this, 0, 0); + top.addBox(-6F, 0F, -6F, 12, 8, 12); + top.setRotationPoint(0F, -8F, 0F); + top.setTextureSize(64, 64); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + TopPiston = new ModelRenderer(this, 0, 52); + TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + TopPiston.setRotationPoint(0F, 0F, 0F); + TopPiston.setTextureSize(64, 64); + TopPiston.mirror = true; + setRotation(TopPiston, 0F, 0F, 0F); + BottomPiston = new ModelRenderer(this, 16, 52); + BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + BottomPiston.setRotationPoint(0F, 8F, 0F); + BottomPiston.setTextureSize(64, 64); + BottomPiston.mirror = true; + setRotation(BottomPiston, 0F, 0F, 0F); + center = new ModelRenderer(this, 32, 52); + center.addBox(-3F, 0F, -3F, 6, 6, 6); + //center.setRotationPoint(0F, 5F, 0F); + center.setTextureSize(64, 64); + center.mirror = true; + setRotation(center, 0F, 0F, 0F); + C1 = new ModelRenderer(this, 0, 41); + C1.addBox(-2F, -3F, 0F, 4, 6, 3); + C1.setRotationPoint(0F, 8F, 3F); + C1.setTextureSize(64, 64); + C1.mirror = true; + setRotation(C1, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 15, 41); + C2.addBox(-2F, -3F, -3F, 4, 6, 3); + C2.setRotationPoint(0F, 8F, -3F); + C2.setTextureSize(64, 64); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + //renderBot(f5); + //renderTop(f5); + } + public void renderBot(float f5) + { + Base.render(f5); + BottomPiston.render(f5); + } + public void renderTop(float f5) + { + top.render(f5); + TopPiston.render(f5); + C1.render(f5); + C2.render(f5); + } + public void renderMid(float f5,float p) + { + + center.setRotationPoint(0F, p, 0F); + center.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java b/1.3/minecraft/SteamPower/ModelFurnace.java similarity index 98% rename from 1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java rename to 1.3/minecraft/SteamPower/ModelFurnace.java index 37d0e0bd..0546703d 100644 --- a/1.3/minecraft/EUIClient/SteamPower/ModelFurnace.java +++ b/1.3/minecraft/SteamPower/ModelFurnace.java @@ -9,7 +9,7 @@ -package EUIClient.SteamPower; +package SteamPower; import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelTank.java b/1.3/minecraft/SteamPower/ModelTank.java similarity index 98% rename from 1.3/minecraft/EUIClient/SteamPower/ModelTank.java rename to 1.3/minecraft/SteamPower/ModelTank.java index f57c884e..03c6ffa8 100644 --- a/1.3/minecraft/EUIClient/SteamPower/ModelTank.java +++ b/1.3/minecraft/SteamPower/ModelTank.java @@ -9,7 +9,7 @@ -package EUIClient.SteamPower; +package SteamPower; import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; @@ -17,7 +17,7 @@ import net.minecraft.src.ModelRenderer; public class ModelTank extends ModelBase { - //fields + //One Block Tank ModelRenderer TANK_WALL_1; ModelRenderer TANK_WALL_2; ModelRenderer TANK_WALL_3; @@ -121,7 +121,6 @@ public class ModelTank extends ModelBase { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5); - generalRender(f5); } public void generalRender(float f5) { diff --git a/1.3/minecraft/EUIClient/SteamPower/ModelEngine.java b/1.3/minecraft/SteamPower/ModelToyEngine.java similarity index 99% rename from 1.3/minecraft/EUIClient/SteamPower/ModelEngine.java rename to 1.3/minecraft/SteamPower/ModelToyEngine.java index a06fd499..021f4565 100644 --- a/1.3/minecraft/EUIClient/SteamPower/ModelEngine.java +++ b/1.3/minecraft/SteamPower/ModelToyEngine.java @@ -9,13 +9,13 @@ -package EUIClient.SteamPower; +package SteamPower; import net.minecraft.src.Entity; import net.minecraft.src.ModelBase; import net.minecraft.src.ModelRenderer; -public class ModelEngine extends ModelBase +public class ModelToyEngine extends ModelBase { //fields ModelRenderer BASE; @@ -43,7 +43,7 @@ public class ModelEngine extends ModelBase ModelRenderer LEVER_1_CAN_BE_TURNED; ModelRenderer LEVER_2_CAN_BE_TURNED; - public ModelEngine() + public ModelToyEngine() { textureWidth = 128; textureHeight = 128; diff --git a/1.3/minecraft/SteamPower/RenderBoiler.java b/1.3/minecraft/SteamPower/RenderBoiler.java new file mode 100644 index 00000000..8e023391 --- /dev/null +++ b/1.3/minecraft/SteamPower/RenderBoiler.java @@ -0,0 +1,62 @@ +package SteamPower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import BasicPipes.TradeHelper; +import SteamPower.boiler.TileEntityBoiler; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + private ModelCenterTank model2; + private ModelCornerTank model3; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + model2 = new ModelCenterTank(par1); + model3 = new ModelCornerTank(par1); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; + int meta = 0; + if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) + { + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); + model.generalRender(0.0625F); + } + else + if(TradeHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) + { + bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); + model2.renderBlock(0.0625F); + } + else + { + int corner = TradeHelper.corner(tileEntity); + bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); + switch(corner) + { + case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + model3.renderCorner(0.0625f); + + } + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java b/1.3/minecraft/SteamPower/RenderFurnace.java similarity index 52% rename from 1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java rename to 1.3/minecraft/SteamPower/RenderFurnace.java index d379048a..42f96d06 100644 --- a/1.3/minecraft/EUIClient/SteamPower/RenderFurnace.java +++ b/1.3/minecraft/SteamPower/RenderFurnace.java @@ -1,10 +1,10 @@ -package EUIClient.SteamPower; +package SteamPower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; -import EUI.SteamPower.SteamPower; -import net.minecraft.src.*; - public class RenderFurnace extends TileEntitySpecialRenderer { int type = 0; @@ -18,10 +18,18 @@ public class RenderFurnace extends TileEntitySpecialRenderer @Override public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPower.textureFile+"Furnace.png"); + bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); + 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.genRender(0.0625F); GL11.glPopMatrix(); } diff --git a/1.3/minecraft/SteamPower/RenderSteamEngine.java b/1.3/minecraft/SteamPower/RenderSteamEngine.java new file mode 100644 index 00000000..ce9ffdbb --- /dev/null +++ b/1.3/minecraft/SteamPower/RenderSteamEngine.java @@ -0,0 +1,49 @@ +package SteamPower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import SteamPower.turbine.TileEntityGenerator; + +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 = ((TileEntityGenerator)tileEntity).position; + boolean cc = ((TileEntityGenerator)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; + } + if(cc) + { + model.renderTop(0.0625F); + model.renderMid(0.0625F,p); + } + model.renderBot(0.0625F); + + + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java b/1.3/minecraft/SteamPower/RenderToyEngine.java similarity index 52% rename from 1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java rename to 1.3/minecraft/SteamPower/RenderToyEngine.java index 3ad0c5a4..8b760e8f 100644 --- a/1.3/minecraft/EUIClient/SteamPower/RenderSteamEngine.java +++ b/1.3/minecraft/SteamPower/RenderToyEngine.java @@ -1,24 +1,24 @@ -package EUIClient.SteamPower; +package SteamPower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; -import EUI.SteamPower.SteamPower; -import net.minecraft.src.*; - -public class RenderSteamEngine extends TileEntitySpecialRenderer +public class RenderToyEngine extends TileEntitySpecialRenderer { int type = 0; - private ModelEngine model; + private ModelToyEngine model; - public RenderSteamEngine() + public RenderToyEngine() { - model = new ModelEngine(); + model = new ModelToyEngine(); } @Override public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPower.textureFile+"tankTexture.png"); + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); diff --git a/1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java b/1.3/minecraft/SteamPower/SteamClientProxy.java similarity index 59% rename from 1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java rename to 1.3/minecraft/SteamPower/SteamClientProxy.java index 6fb887e8..efc104e9 100644 --- a/1.3/minecraft/EUIClient/SteamPower/SteamClientProxy.java +++ b/1.3/minecraft/SteamPower/SteamClientProxy.java @@ -1,21 +1,14 @@ -package EUIClient.SteamPower; +package SteamPower; -import EUI.SteamPower.SteamProxy; -import EUI.SteamPower.TileEntityNuller; -import EUI.SteamPower.boiler.TileEntityBoiler; -import EUI.SteamPower.burner.TileEntityFireBox; -import EUI.SteamPower.turbine.TileEntityGenerator; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ModelBiped; -import net.minecraft.src.RenderBiped; -import net.minecraft.src.RenderBlocks; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; +import net.minecraft.src.RenderEngine; import net.minecraftforge.client.MinecraftForgeClient; +import SteamPower.boiler.TileEntityBoiler; +import SteamPower.burner.TileEntityFireBox; +import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntitytopGen; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.registry.GameRegistry; public class SteamClientProxy extends SteamProxy{ From 66fc0aee1bd552e701421105e241960544fd56be Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 09:11:16 -0400 Subject: [PATCH 051/115] git repo moved to project folder src will now upload strait from my MCP project location. Meaning the package names changed just in git. --- .gitignore | 37 ++ 1.2.5/eui/BlockMachine.java | 375 ------------- 1.2.5/eui/ItemCoalFuel.java | 60 -- 1.2.5/eui/ItemMachine.java | 38 -- 1.2.5/eui/ItemParts.java | 71 --- 1.2.5/eui/TileEntityMachine.java | 94 ---- 1.2.5/eui/TileEntityNuller.java | 28 - 1.2.5/eui/api/IHeatConsumer.java | 22 - 1.2.5/eui/api/IHeatProducer.java | 14 - 1.2.5/eui/api/ISteamConsumer.java | 30 - 1.2.5/eui/api/ISteamProducer.java | 20 - 1.2.5/eui/api/IWaterConsumer.java | 30 - 1.2.5/eui/api/IWaterProducer.java | 20 - 1.2.5/eui/boiler/ContainerBoiler.java | 59 -- 1.2.5/eui/boiler/GuiBoiler.java | 84 --- 1.2.5/eui/boiler/ModelTank.java | 155 ------ 1.2.5/eui/boiler/RenderBoiler.java | 27 - 1.2.5/eui/boiler/ShareResources.java | 15 - 1.2.5/eui/boiler/SlotBoiler.java | 60 -- 1.2.5/eui/boiler/TileEntityBoiler.java | 512 ------------------ 1.2.5/eui/burner/ContainerFireBox.java | 42 -- 1.2.5/eui/burner/FurnaceModel.java | 82 --- 1.2.5/eui/burner/GUIFireBox.java | 87 --- 1.2.5/eui/burner/RenderFurnace.java | 27 - 1.2.5/eui/burner/TileEntityFireBox.java | 265 --------- 1.2.5/eui/robotics/BlockComp.java | 62 --- 1.2.5/eui/robotics/BlockRail.java | 5 - 1.2.5/eui/robotics/EntityDigger.java | 12 - 1.2.5/eui/robotics/EntityRobot.java | 314 ----------- 1.2.5/eui/robotics/EntityShoeBot.java | 60 -- 1.2.5/eui/robotics/Entitycollector.java | 12 - 1.2.5/eui/robotics/ItemMachine.java | 24 - 1.2.5/eui/robotics/ItemSpawn.java | 58 -- 1.2.5/eui/robotics/ModelModelShoeBot.java | 45 -- 1.2.5/eui/robotics/RenderShoeBot.java | 101 ---- 1.2.5/eui/robotics/TileEntityComp.java | 302 ----------- 1.2.5/eui/turbine/ContainerGenerator.java | 41 -- 1.2.5/eui/turbine/EngineSmallModel.java | 242 --------- 1.2.5/eui/turbine/GUIGenerator.java | 75 --- 1.2.5/eui/turbine/RenderSteamEngine.java | 27 - 1.2.5/eui/turbine/TileEntityGenerator.java | 329 ----------- 1.2.5/mod_EUIndustry.java | 90 --- 1.2.5/mod_automation.java | 54 -- README.md | 4 - src/common/BasicPipes/BasicPipesMain.java | 125 +++++ src/common/BasicPipes/PipeProxy.java | 54 ++ src/common/BasicPipes/TradeHelper.java | 173 ++++++ src/common/BasicPipes/pipes/BlockPipe.java | 146 +++++ src/common/BasicPipes/pipes/BlockPump.java | 155 ++++++ src/common/BasicPipes/pipes/ItemGuage.java | 78 +++ src/common/BasicPipes/pipes/ItemParts.java | 58 ++ src/common/BasicPipes/pipes/ItemPipe.java | 128 +++++ .../BasicPipes/pipes/TileEntityCondenser.java | 98 ++++ .../BasicPipes/pipes/TileEntityPipe.java | 267 +++++++++ .../BasicPipes/pipes/TileEntityPump.java | 89 +++ .../BasicPipes/pipes/api/ILiquidConsumer.java | 35 ++ .../BasicPipes/pipes/api/ILiquidProducer.java | 30 + .../common/SteamPower/BlockMachine.java | 0 .../common/SteamPower/ItemCoalFuel.java | 0 .../common/SteamPower/ItemMachine.java | 0 {1.3 => src}/common/SteamPower/ItemParts.java | 0 .../common/SteamPower/SteamPowerMain.java | 0 .../common/SteamPower/SteamProxy.java | 0 .../common/SteamPower/TileEntityMachine.java | 0 .../common/SteamPower/TileEntityNuller.java | 0 .../common/SteamPower/ap/IHeatConsumer.java | 0 .../common/SteamPower/ap/IHeatProducer.java | 0 .../SteamPower/boiler/ContainerBoiler.java | 0 .../SteamPower/boiler/TileEntityBoiler.java | 0 .../SteamPower/burner/ContainerFireBox.java | 0 .../SteamPower/burner/TileEntityFireBox.java | 0 .../SteamPower/turbine/BlockEngine.java | 0 .../turbine/ContainerGenerator.java | 0 .../common/SteamPower/turbine/ItemEngine.java | 0 .../turbine/TileEntityGenerator.java | 0 .../SteamPower/turbine/TileEntitytopGen.java | 0 src/minecraft/BasicPipes/ModelPipe.java | 98 ++++ src/minecraft/BasicPipes/PipeClientProxy.java | 22 + src/minecraft/BasicPipes/RenderPipe.java | 57 ++ .../EUIClient/Textures/BoilerGui.png | Bin .../EUIClient/Textures/CopperWire.png | Bin .../EUIClient/Textures/CornerTank.png | Bin .../EUIClient/Textures/DefaultPipe.png | Bin .../minecraft/EUIClient/Textures/Engine.png | Bin .../minecraft/EUIClient/Textures/Furnace.png | Bin .../EUIClient/Textures/GrinderGUI.png | Bin .../minecraft/EUIClient/Textures/Items.png | Bin .../minecraft/EUIClient/Textures/SteamGUI.png | Bin .../EUIClient/Textures/SteamPipe.png | Bin .../EUIClient/Textures/WaterPipe.png | Bin .../minecraft/EUIClient/Textures/blocks.png | Bin .../EUIClient/Textures/tankBlock.png | Bin .../EUIClient/Textures/tankTexture.png | Bin .../minecraft/SteamPower/GUIFireBox.java | 0 .../minecraft/SteamPower/GUIGenerator.java | 0 .../minecraft/SteamPower/GuiBoiler.java | 0 .../minecraft/SteamPower/ModelCenterTank.java | 0 .../minecraft/SteamPower/ModelCornerTank.java | 0 .../minecraft/SteamPower/ModelEngine.java | 0 .../minecraft/SteamPower/ModelFurnace.java | 0 .../minecraft/SteamPower/ModelTank.java | 0 .../minecraft/SteamPower/ModelToyEngine.java | 0 .../minecraft/SteamPower/RenderBoiler.java | 0 .../minecraft/SteamPower/RenderFurnace.java | 0 .../SteamPower/RenderSteamEngine.java | 0 .../minecraft/SteamPower/RenderToyEngine.java | 0 .../SteamPower/SteamClientProxy.java | 0 textures/SteamPipe.png | Bin 3013 -> 0 bytes textures/WaterPipe.png | Bin 3192 -> 0 bytes textures/airPipe.png | Bin 3007 -> 0 bytes textures/fuelPipe.png | Bin 3021 -> 0 bytes textures/lavaPipe.png | Bin 3023 -> 0 bytes textures/oilPipe.png | Bin 3017 -> 0 bytes 113 files changed, 1650 insertions(+), 4074 deletions(-) delete mode 100644 1.2.5/eui/BlockMachine.java delete mode 100644 1.2.5/eui/ItemCoalFuel.java delete mode 100644 1.2.5/eui/ItemMachine.java delete mode 100644 1.2.5/eui/ItemParts.java delete mode 100644 1.2.5/eui/TileEntityMachine.java delete mode 100644 1.2.5/eui/TileEntityNuller.java delete mode 100644 1.2.5/eui/api/IHeatConsumer.java delete mode 100644 1.2.5/eui/api/IHeatProducer.java delete mode 100644 1.2.5/eui/api/ISteamConsumer.java delete mode 100644 1.2.5/eui/api/ISteamProducer.java delete mode 100644 1.2.5/eui/api/IWaterConsumer.java delete mode 100644 1.2.5/eui/api/IWaterProducer.java delete mode 100644 1.2.5/eui/boiler/ContainerBoiler.java delete mode 100644 1.2.5/eui/boiler/GuiBoiler.java delete mode 100644 1.2.5/eui/boiler/ModelTank.java delete mode 100644 1.2.5/eui/boiler/RenderBoiler.java delete mode 100644 1.2.5/eui/boiler/ShareResources.java delete mode 100644 1.2.5/eui/boiler/SlotBoiler.java delete mode 100644 1.2.5/eui/boiler/TileEntityBoiler.java delete mode 100644 1.2.5/eui/burner/ContainerFireBox.java delete mode 100644 1.2.5/eui/burner/FurnaceModel.java delete mode 100644 1.2.5/eui/burner/GUIFireBox.java delete mode 100644 1.2.5/eui/burner/RenderFurnace.java delete mode 100644 1.2.5/eui/burner/TileEntityFireBox.java delete mode 100644 1.2.5/eui/robotics/BlockComp.java delete mode 100644 1.2.5/eui/robotics/BlockRail.java delete mode 100644 1.2.5/eui/robotics/EntityDigger.java delete mode 100644 1.2.5/eui/robotics/EntityRobot.java delete mode 100644 1.2.5/eui/robotics/EntityShoeBot.java delete mode 100644 1.2.5/eui/robotics/Entitycollector.java delete mode 100644 1.2.5/eui/robotics/ItemMachine.java delete mode 100644 1.2.5/eui/robotics/ItemSpawn.java delete mode 100644 1.2.5/eui/robotics/ModelModelShoeBot.java delete mode 100644 1.2.5/eui/robotics/RenderShoeBot.java delete mode 100644 1.2.5/eui/robotics/TileEntityComp.java delete mode 100644 1.2.5/eui/turbine/ContainerGenerator.java delete mode 100644 1.2.5/eui/turbine/EngineSmallModel.java delete mode 100644 1.2.5/eui/turbine/GUIGenerator.java delete mode 100644 1.2.5/eui/turbine/RenderSteamEngine.java delete mode 100644 1.2.5/eui/turbine/TileEntityGenerator.java delete mode 100644 1.2.5/mod_EUIndustry.java delete mode 100644 1.2.5/mod_automation.java delete mode 100644 README.md create mode 100644 src/common/BasicPipes/BasicPipesMain.java create mode 100644 src/common/BasicPipes/PipeProxy.java create mode 100644 src/common/BasicPipes/TradeHelper.java create mode 100644 src/common/BasicPipes/pipes/BlockPipe.java create mode 100644 src/common/BasicPipes/pipes/BlockPump.java create mode 100644 src/common/BasicPipes/pipes/ItemGuage.java create mode 100644 src/common/BasicPipes/pipes/ItemParts.java create mode 100644 src/common/BasicPipes/pipes/ItemPipe.java create mode 100644 src/common/BasicPipes/pipes/TileEntityCondenser.java create mode 100644 src/common/BasicPipes/pipes/TileEntityPipe.java create mode 100644 src/common/BasicPipes/pipes/TileEntityPump.java create mode 100644 src/common/BasicPipes/pipes/api/ILiquidConsumer.java create mode 100644 src/common/BasicPipes/pipes/api/ILiquidProducer.java rename {1.3 => src}/common/SteamPower/BlockMachine.java (100%) rename {1.3 => src}/common/SteamPower/ItemCoalFuel.java (100%) rename {1.3 => src}/common/SteamPower/ItemMachine.java (100%) rename {1.3 => src}/common/SteamPower/ItemParts.java (100%) rename {1.3 => src}/common/SteamPower/SteamPowerMain.java (100%) rename {1.3 => src}/common/SteamPower/SteamProxy.java (100%) rename {1.3 => src}/common/SteamPower/TileEntityMachine.java (100%) rename {1.3 => src}/common/SteamPower/TileEntityNuller.java (100%) rename {1.3 => src}/common/SteamPower/ap/IHeatConsumer.java (100%) rename {1.3 => src}/common/SteamPower/ap/IHeatProducer.java (100%) rename {1.3 => src}/common/SteamPower/boiler/ContainerBoiler.java (100%) rename {1.3 => src}/common/SteamPower/boiler/TileEntityBoiler.java (100%) rename {1.3 => src}/common/SteamPower/burner/ContainerFireBox.java (100%) rename {1.3 => src}/common/SteamPower/burner/TileEntityFireBox.java (100%) rename {1.3 => src}/common/SteamPower/turbine/BlockEngine.java (100%) rename {1.3 => src}/common/SteamPower/turbine/ContainerGenerator.java (100%) rename {1.3 => src}/common/SteamPower/turbine/ItemEngine.java (100%) rename {1.3 => src}/common/SteamPower/turbine/TileEntityGenerator.java (100%) rename {1.3 => src}/common/SteamPower/turbine/TileEntitytopGen.java (100%) create mode 100644 src/minecraft/BasicPipes/ModelPipe.java create mode 100644 src/minecraft/BasicPipes/PipeClientProxy.java create mode 100644 src/minecraft/BasicPipes/RenderPipe.java rename {1.3 => src}/minecraft/EUIClient/Textures/BoilerGui.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/CopperWire.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/CornerTank.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/DefaultPipe.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/Engine.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/Furnace.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/GrinderGUI.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/Items.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/SteamGUI.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/SteamPipe.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/WaterPipe.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/blocks.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/tankBlock.png (100%) rename {1.3 => src}/minecraft/EUIClient/Textures/tankTexture.png (100%) rename {1.3 => src}/minecraft/SteamPower/GUIFireBox.java (100%) rename {1.3 => src}/minecraft/SteamPower/GUIGenerator.java (100%) rename {1.3 => src}/minecraft/SteamPower/GuiBoiler.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelCenterTank.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelCornerTank.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelEngine.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelFurnace.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelTank.java (100%) rename {1.3 => src}/minecraft/SteamPower/ModelToyEngine.java (100%) rename {1.3 => src}/minecraft/SteamPower/RenderBoiler.java (100%) rename {1.3 => src}/minecraft/SteamPower/RenderFurnace.java (100%) rename {1.3 => src}/minecraft/SteamPower/RenderSteamEngine.java (100%) rename {1.3 => src}/minecraft/SteamPower/RenderToyEngine.java (100%) rename {1.3 => src}/minecraft/SteamPower/SteamClientProxy.java (100%) delete mode 100644 textures/SteamPipe.png delete mode 100644 textures/WaterPipe.png delete mode 100644 textures/airPipe.png delete mode 100644 textures/fuelPipe.png delete mode 100644 textures/lavaPipe.png delete mode 100644 textures/oilPipe.png diff --git a/.gitignore b/.gitignore index 0f182a03..817e35eb 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,40 @@ *.jar *.war *.ear +*.bat +*.sh +*.txt +*.cfg +CHANGELOG +LICENSE +/src/minecraft_server/* +/src/minecraft/cpw/* +/src/minecraft/ibxm/* +/src/minecraft/net/* +/src/minecraft/paulscode/* +/src/minecraft/forge_logo.png +/src/minecraft/start.java +/src/minecraft/universalelectricity/* +/src/minecraft/basiccomponents/* +/src/minecraft/buildcraft/* +/src/common/cpw/* +/src/common/net/* +/src/common/org/* +/src/common/fml_at.cfg +/src/common/fml_marker.cfg +/src/common/fmlversion.properties +/src/common/forge_at.cfg +/src/common/universalelectricity/* +/src/common/basiccomponents/* +/src/common/buildcraft/* +/bin/ +/conf/ +/docs/ +/eclipse/ +/forge/ +/jars/ +/lib/ +/logs/ +/modsrc/ +/runtime/ +/temp/ diff --git a/1.2.5/eui/BlockMachine.java b/1.2.5/eui/BlockMachine.java deleted file mode 100644 index 6824fa44..00000000 --- a/1.2.5/eui/BlockMachine.java +++ /dev/null @@ -1,375 +0,0 @@ -package net.minecraft.src.eui; - -import java.util.ArrayList; -import java.util.Random; -import net.minecraft.client.Minecraft; -import net.minecraft.src.*; -import net.minecraft.src.basiccomponents.*; -import net.minecraft.src.eui.boiler.*; -import net.minecraft.src.eui.burner.GUIFireBox; -import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.turbine.GUIGenerator; -import net.minecraft.src.eui.turbine.TileEntityGenerator; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.*; - -public class BlockMachine extends net.minecraft.src.universalelectricity.extend.BlockMachine implements ITextureProvider -{ - - private Random furnaceRand = new Random(); - private static boolean keepFurnaceInventory = true; - - public BlockMachine(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - } - @Override - protected int damageDropped(int metadata) - { - return metadata; - } - @Override - public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) - { - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if(tileEntity instanceof TileEntityFireBox) - { - if(((TileEntityFireBox)tileEntity).generateRate > 0) - { - int var6 = (int)((TileEntityFireBox)tileEntity).getDirection(); - float var7 = (float)x + 0.5F; - float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; - float var9 = (float)z + 0.5F; - float var10 = 0.52F; - float var11 = par5Random.nextFloat() * 0.6F - 0.3F; - - if (var6 == 5) - { - par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 4) - { - par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 3) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 2) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - } - } - } - } - @Override - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - TileEntity tileEntity = par1iBlockAccess.getBlockTileEntity(x, y, z); - int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - if(metadata > -1 && tileEntity != null) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 6; - case 1: return 4; - case 2: return 7; - case 3: return 4; - } - } - //If it is the back side - else if(side == UniversalElectricity.getOrientationFromSide(((TileEntityMachine)tileEntity).getDirection(), (byte)2)) - { - switch(metadata) - { - case 0: return 5; - case 2: return 8; - case 3: return 4; - } - } - - - switch(metadata) - { - case 1: return 0; - case 2: return 2; - } - } - return 1; - - - } - @Override - public int getBlockTextureFromSideAndMetadata(int side, int metadata) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 6; - case 1: return 4; - case 2: return 7; - case 3: return 0; - } - } - else - { - //If it is the front side - if(side == 3) - { - switch(metadata) - { - case 0: return 5; - case 1: return 0; - case 2: return 8; - case 3: return 4; - } - } - //If it is the back side - else if(side == 2) - { - switch(metadata) - { - case 0: return this.blockIndexInTexture + 2; - case 1: return this.blockIndexInTexture + 3; - case 2: return this.blockIndexInTexture + 2; - } - } - - switch(metadata) - { - case 1: return 0; - case 2: return 2; - case 3: return 0; - } - } - return 1; - } - public boolean blockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - int metadata = par1World.getBlockMetadata(par2, par3, par4); - - /** - * Check if the player is holding a wrench or an electric item. If so, do not open the GUI. - */ - if(par5EntityPlayer.inventory.getCurrentItem() != null) - { - if(par5EntityPlayer.inventory.getCurrentItem().itemID == BasicComponents.ItemWrench.shiftedIndex) - { - if(onUseWrench(par1World, par2, par3, par4, par5EntityPlayer)) - { - par1World.notifyBlocksOfNeighborChange(par2, par3, par4, this.blockID); - return true; - } - } - else if(par5EntityPlayer.inventory.getCurrentItem().getItem() instanceof net.minecraft.src.universalelectricity.extend.ItemElectric) - { - if(onUseElectricItem(par1World, par2, par3, par4, par5EntityPlayer)) - { - return true; - } - } - } - - return machineActivated(par1World, par2, par3, par4, par5EntityPlayer); - } - public boolean onUseElectricItem(World par1World, int par2, int par3, - int par4, EntityPlayer par5EntityPlayer) { - // TODO Auto-generated method stub - return false; - } - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 2: tileEntity.setDirection((byte)5); break; - case 5: tileEntity.setDirection((byte)3); break; - case 3: tileEntity.setDirection((byte)4); break; - case 4: tileEntity.setDirection((byte)2); break; - } - - return true; - } - /** - * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the - * block. - */ - public boolean machineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntityBoiler) - { - TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); - ModLoader.openGUI(par5EntityPlayer, new GuiBoiler(par5EntityPlayer.inventory, (TileEntityBoiler) var6 )); ; - } - if(blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); - ModLoader.openGUI(par5EntityPlayer, new GUIFireBox(par5EntityPlayer.inventory, (TileEntityFireBox) var6 )); ; - } - if(blockEntity instanceof TileEntityGenerator) - { - TileEntity var6 = (TileEntityGenerator)par1World.getBlockTileEntity(x, y, z); - ModLoader.openGUI(par5EntityPlayer, new GUIGenerator(par5EntityPlayer.inventory, (TileEntityGenerator) var6 )); ; - } - } - - return true; - } - } - @Override - public TileEntity getBlockEntity(int meta) - { - switch(meta) - { - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 3: return new TileEntityGenerator(); - case 15: return new TileEntityNuller(); - } - return null; - } - - /** - * Called when the block is placed in the world. - */ - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - if(metadata == 0) - { - switch (angle) - { - case 0: tileEntity.setDirection((byte)5); break; - case 1: tileEntity.setDirection((byte)3); break; - case 2: tileEntity.setDirection((byte)4); break; - case 3: tileEntity.setDirection((byte)2); break; - } - } - else - { - switch (angle) - { - case 0: tileEntity.setDirection((byte)3); break; - case 1: tileEntity.setDirection((byte)4); break; - case 2: tileEntity.setDirection((byte)2); break; - case 3: tileEntity.setDirection((byte)5); break; - } - } - } - /** - * Called whenever the block is removed. - */ - public void onBlockRemoval(World par1World, int par2, int par3, int par4) - { - if (!keepFurnaceInventory) - { - TileEntityMachine var5 = null; - TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); -if(entityBox instanceof TileEntityFireBox) -{ - var5 = (TileEntityFireBox)entityBox; -} -else if(entityBox instanceof TileEntityBoiler) -{ - var5 = (TileEntityBoiler)entityBox; -} - if (var5 != null) - { - for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) - { - ItemStack var7 = var5.getStackInSlot(var6); - - if (var7 != null) - { - float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - - while (var7.stackSize > 0) - { - int var11 = this.furnaceRand.nextInt(21) + 10; - - if (var11 > var7.stackSize) - { - var11 = var7.stackSize; - } - - var7.stackSize -= var11; - EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); - - if (var7.hasTagCompound()) - { - var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); - } - - float var13 = 0.05F; - var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); - var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); - par1World.spawnEntityInWorld(var12); - } - } - } - } - } - - super.onBlockRemoval(par1World, par2, par3, par4); - } - @Override - public TileEntity getBlockEntity() { - // TODO Auto-generated method stub - return null; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return -1; - } -public void addCreativeItems(ArrayList itemList) { - itemList.add(new ItemStack(this, 1,1));//boiler - itemList.add(new ItemStack(this, 1,2));//firebox - itemList.add(new ItemStack(this, 1,3));//generator - itemList.add(new ItemStack(this, 1,15));//eu vamp -} -} diff --git a/1.2.5/eui/ItemCoalFuel.java b/1.2.5/eui/ItemCoalFuel.java deleted file mode 100644 index 8438a16f..00000000 --- a/1.2.5/eui/ItemCoalFuel.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.minecraft.src.eui; - -import java.util.ArrayList; - -import net.minecraft.src.*; -import net.minecraft.src.forge.*; - -public class ItemCoalFuel extends Item implements ITextureProvider -{ - - public ItemCoalFuel(int par1) - { - super(par1); - this.setItemName("CoalDust"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/Items.png"; - } - public String getItemName() - { - return "CoalDust"; - } - - - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalNuggets"; - case 1: return "CoalPellets"; - case 2: return "CoalDust"; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - - } -} diff --git a/1.2.5/eui/ItemMachine.java b/1.2.5/eui/ItemMachine.java deleted file mode 100644 index 7686ef20..00000000 --- a/1.2.5/eui/ItemMachine.java +++ /dev/null @@ -1,38 +0,0 @@ -package net.minecraft.src.eui; -import java.util.ArrayList; - -import net.minecraft.src.*; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - } - @Override - public int getMetadata(int metadata) - { - return metadata; - } - @Override - public String getItemName() - { - return "Machine"; - } - @Override - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalProcessor"; - case 1: return "Boiler"; - case 2: return "FireBox"; - case 3: return "SteamGen"; - case 15: return "EnergyNuller"; - } - return this.getItemName(); - } - } - diff --git a/1.2.5/eui/ItemParts.java b/1.2.5/eui/ItemParts.java deleted file mode 100644 index 6c91a348..00000000 --- a/1.2.5/eui/ItemParts.java +++ /dev/null @@ -1,71 +0,0 @@ -package net.minecraft.src.eui; - -import java.util.ArrayList; - -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.forge.ITextureProvider; - -public class ItemParts extends Item implements ITextureProvider{ - - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 3; - case 1: return 4; - case 2: return 5; - case 3: return 6; - case 4: return 7; - case 5: return 8; - case 6: return 9; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/Items.png"; - } - public String getItemName() - { - return "parts"; - } - - - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "Tank"; - case 3: return "Valve"; - case 4: return "Tube"; - case 5: return "Seal"; - case 6: return "Rivits"; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,4)); - itemList.add(new ItemStack(this, 1,5)); - itemList.add(new ItemStack(this, 1,6)); - - } -} - - - diff --git a/1.2.5/eui/TileEntityMachine.java b/1.2.5/eui/TileEntityMachine.java deleted file mode 100644 index 7554a54d..00000000 --- a/1.2.5/eui/TileEntityMachine.java +++ /dev/null @@ -1,94 +0,0 @@ -package net.minecraft.src.eui; - -import net.minecraft.src.*; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.forge.ITextureProvider; -import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; -import net.minecraft.src.universalelectricity.extend.IRotatable; - -public class TileEntityMachine extends TileEntityElectricUnit implements ITextureProvider, IRotatable -{ - private byte facing = 0; - - public TileEntity getSteamMachine(int i) - { - int x = this.xCoord; - int y = this.yCoord; - int z = this.zCoord; - - switch(i) - { - case 0: y = y - 1;break; - case 1: y = y + 1;break; - case 2: z = z + 1;break; - case 3: z = z - 1;break; - case 4: x = x + 1;break; - case 5: x = x - 1;break; - } - TileEntity aEntity = worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntityMachine) - { - return aEntity; - } - - return null; - } - - public byte getDirection() - { - return this.facing; - } - - public void setDirection(byte facingDirection) - { - this.facing = facingDirection; - } - - @Override - public String getTextureFile() - { - return "/eui/blocks.png"; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setByte("facing", (byte)this.facing); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.facing = par1NBTTagCompound.getByte("facing"); - } - - @Override - public float electricityRequest() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean canReceiveFromSide(byte side) { - // TODO Auto-generated method stub - return false; - } - - - public int getSizeInventory() { - // TODO Auto-generated method stub - return 0; - } - - public ItemStack getStackInSlot(int var6) { - // TODO Auto-generated method stub - return null; - } - @Override - public boolean canUpdate() - { - return true; - } -} \ No newline at end of file diff --git a/1.2.5/eui/TileEntityNuller.java b/1.2.5/eui/TileEntityNuller.java deleted file mode 100644 index 547dfc08..00000000 --- a/1.2.5/eui/TileEntityNuller.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.minecraft.src.eui; - -import net.minecraft.src.universalelectricity.electricity.IElectricUnit; - - -public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { - - public float electricityRequest() - { - return 100; - } - public boolean canReceiveFromSide(byte side) - { - return true; - } - public float getVoltage() - { - return 1000; - } - public int getTickInterval() - { - return 1; - } - public boolean canConnect(byte side) - { - return true; - } -} diff --git a/1.2.5/eui/api/IHeatConsumer.java b/1.2.5/eui/api/IHeatConsumer.java deleted file mode 100644 index a9049bc2..00000000 --- a/1.2.5/eui/api/IHeatConsumer.java +++ /dev/null @@ -1,22 +0,0 @@ -package net.minecraft.src.eui.api; - -/** - * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. - * @author Darkguardsman code sourced from Calclavia - * - */ -public interface IHeatConsumer -{ - /** - * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). - * @param vol - The amount of steam this block received - * @param side - The side of the block in which the electricity came from. - * @return vol - The amount of rejected steam to be sent to back - */ - public float onReceiveHeat(float jouls, int side); - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - public float getStoredHeat(); -} \ No newline at end of file diff --git a/1.2.5/eui/api/IHeatProducer.java b/1.2.5/eui/api/IHeatProducer.java deleted file mode 100644 index dc013e51..00000000 --- a/1.2.5/eui/api/IHeatProducer.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.minecraft.src.eui.api; - - -public interface IHeatProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param jouls - The maximum jouls can be transfered - * @param side - The side of block in which the conductor is on - * @return jouls - Return jouls to consumer - */ - public float onProduceHeat(float jouls, int side); -} \ No newline at end of file diff --git a/1.2.5/eui/api/ISteamConsumer.java b/1.2.5/eui/api/ISteamConsumer.java deleted file mode 100644 index 8be12412..00000000 --- a/1.2.5/eui/api/ISteamConsumer.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.minecraft.src.eui.api; - - -public interface ISteamConsumer -{ - /** - * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param watts - The amount of watts this block received. - * @param side - The side of the block in which the electricity came from. - * @return watt - The amount of rejected power to be sent back into the conductor - */ - public int onReceiveSteam(int watts, byte side); - // 1 unit of steam is = to 7132.6gal(27m^3) at 1ATM 424*F(200*C) - /** - * You can use this to check if a wire can connect to this UE consumer to properly render the graphics - * @param side - The side in which the electricity is coming from. - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveSteam(byte side); - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - public int getStoredSteam(); - - /** - * @return Return the maximum amount of stored electricity this consumer can get. - */ - public int getSteamCapacity(); -} diff --git a/1.2.5/eui/api/ISteamProducer.java b/1.2.5/eui/api/ISteamProducer.java deleted file mode 100644 index 8a67cdeb..00000000 --- a/1.2.5/eui/api/ISteamProducer.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.minecraft.src.eui.api; - -/** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia - * - */ -public interface ISteamProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param maxvol - The maximum vol the steam pipe can take - * @param side - The side of block in which the conductor is on - * @return vol - Return the amount of vol that cam be moved at one time - */ - public int onProduceSteam(float maxVol, int side); - - public boolean canProduceSteam(byte side); -} \ No newline at end of file diff --git a/1.2.5/eui/api/IWaterConsumer.java b/1.2.5/eui/api/IWaterConsumer.java deleted file mode 100644 index 95c7fb1a..00000000 --- a/1.2.5/eui/api/IWaterConsumer.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.minecraft.src.eui.api; - - -public interface IWaterConsumer -{ - /** - * onRecieveElectricity is called whenever a Universal Electric conductor sends a packet of electricity to the consumer (which is this block). - * @param watts - The amount of watts this block received. - * @param side - The side of the block in which the electricity came from. - * @return watt - The amount of rejected power to be sent back into the conductor - */ - public int onReceiveWater(int vol, byte side); - - /** - * You can use this to check if a wire can connect to this UE consumer to properly render the graphics - * @param side - The side in which the electricity is coming from. - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveWater(byte side); - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - public int getStoredWater(); - - /** - * @return Return the maximum amount of stored electricity this consumer can get. - */ - public int getWaterCapacity(); -} diff --git a/1.2.5/eui/api/IWaterProducer.java b/1.2.5/eui/api/IWaterProducer.java deleted file mode 100644 index fefa8eb8..00000000 --- a/1.2.5/eui/api/IWaterProducer.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.minecraft.src.eui.api; - -/** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia - * - */ -public interface IWaterProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param maxvol - The maximum vol the steam pipe can take - * @param side - The side of block in which the conductor is on - * @return vol - Return the amount of vol that cam be moved at one time - */ - public int onProduceWater(int maxVol, int side); - - public boolean canProduceWater(byte side); -} \ No newline at end of file diff --git a/1.2.5/eui/boiler/ContainerBoiler.java b/1.2.5/eui/boiler/ContainerBoiler.java deleted file mode 100644 index 539e1673..00000000 --- a/1.2.5/eui/boiler/ContainerBoiler.java +++ /dev/null @@ -1,59 +0,0 @@ -package net.minecraft.src.eui.boiler; -import net.minecraft.src.*; - -public class ContainerBoiler extends Container -{ - private TileEntityBoiler boiler; - private int lastCookTime = 0; - private int lastBurnTime = 0; - private int lastItemBurnTime = 0; - - public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) - { - this.boiler = par2TileEntityboiler; - this.addSlot(new Slot(par2TileEntityboiler, 0, 56, 17)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - - - public void updateProgressBar(int par1, int par2) - { - if (par1 == 0) - { - // this.boiler.furnaceCookTime = par2; - } - - if (par1 == 1) - { - //this.boiler.boilerRunTime = par2; - } - - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.boiler.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/1.2.5/eui/boiler/GuiBoiler.java b/1.2.5/eui/boiler/GuiBoiler.java deleted file mode 100644 index 96a36c05..00000000 --- a/1.2.5/eui/boiler/GuiBoiler.java +++ /dev/null @@ -1,84 +0,0 @@ -package net.minecraft.src.eui.boiler; -import java.text.DecimalFormat; - -import net.minecraft.src.*; - -import org.lwjgl.opengl.GL11; - -public class GuiBoiler extends GuiContainer -{ - private TileEntityBoiler boilerInventory; - - public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) - { - super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); - this.boilerInventory = par2TileEntityGrinder; - } - - /** - * Draw the foreground layer for the GuiContainer (everythin in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Boiler", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) - { - this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); - } - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/BoilerGui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - int var5 = (this.width - this.xSize) / 2; - int var6 = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); - int var7; - int var8; - int var9; - int var10; - if (this.boilerInventory.waterStored > 0) - { - var7 = boilerInventory.getStoredLiquid(1)*4 + 1; - this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); - } - if (this.boilerInventory.steamStored > 0) - { - var8 = boilerInventory.steamStored/14*4 + 1; - this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); - } - - float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); - var9 = (int) Math.min(precentH*3.0F,30); - this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); - float precentSH = this.boilerInventory.heatStored/1000; - var10 = (int) Math.round(precentSH*5.33); - this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); - - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" kJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/1.2.5/eui/boiler/ModelTank.java b/1.2.5/eui/boiler/ModelTank.java deleted file mode 100644 index 5ecc3dcf..00000000 --- a/1.2.5/eui/boiler/ModelTank.java +++ /dev/null @@ -1,155 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package net.minecraft.src.eui.boiler; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelTank extends ModelBase -{ - //fields - ModelRenderer TANK_WALL_1; - ModelRenderer TANK_WALL_2; - ModelRenderer TANK_WALL_3; - ModelRenderer TANK_WALL_4; - ModelRenderer TANK_SUPPORT_1; - ModelRenderer TANK_TOP_1; - ModelRenderer TANK_WALL_5; - ModelRenderer TANK_SUPPORT_2; - ModelRenderer TANK_SUPPORT_3; - ModelRenderer TANK_WALL_6; - ModelRenderer TANK_TOP_2; - ModelRenderer TANK_TOP_3; - ModelRenderer TANK_VALVE; - - public ModelTank() - { - textureWidth = 128; - textureHeight = 128; - - TANK_WALL_1 = new ModelRenderer(this, 0, 49); - TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8); - TANK_WALL_1.setRotationPoint(6F, 12F, -4F); - TANK_WALL_1.setTextureSize(128, 128); - TANK_WALL_1.mirror = true; - setRotation(TANK_WALL_1, 0F, 0F, 0F); - TANK_WALL_2 = new ModelRenderer(this, 0, 70); - TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7); - TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); - TANK_WALL_2.setTextureSize(128, 128); - TANK_WALL_2.mirror = true; - setRotation(TANK_WALL_2, 0F, 0F, 0F); - TANK_WALL_3 = new ModelRenderer(this, 0, 34); - TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1); - TANK_WALL_3.setRotationPoint(0F, 12F, 8F); - TANK_WALL_3.setTextureSize(128, 128); - TANK_WALL_3.mirror = true; - setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); - TANK_WALL_4 = new ModelRenderer(this, 0, 34); - TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1); - TANK_WALL_4.setRotationPoint(0F, 12F, -8F); - TANK_WALL_4.setTextureSize(128, 128); - TANK_WALL_4.mirror = true; - setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); - TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); - TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16); - TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_1.setTextureSize(128, 128); - TANK_SUPPORT_1.mirror = true; - setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); - TANK_TOP_1 = new ModelRenderer(this, 43, 11); - TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8); - TANK_TOP_1.setRotationPoint(0F, 10F, 0F); - TANK_TOP_1.setTextureSize(128, 128); - TANK_TOP_1.mirror = true; - setRotation(TANK_TOP_1, 0F, 0F, 0F); - TANK_WALL_5 = new ModelRenderer(this, 0, 34); - TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1); - TANK_WALL_5.setRotationPoint(0F, 12F, -7F); - TANK_WALL_5.setTextureSize(128, 128); - TANK_WALL_5.mirror = true; - setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); - TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18); - TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_2.setTextureSize(128, 128); - TANK_SUPPORT_2.mirror = true; - setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); - TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18); - TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_3.setTextureSize(128, 128); - TANK_SUPPORT_3.mirror = true; - setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); - TANK_WALL_6 = new ModelRenderer(this, 0, 34); - TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1); - TANK_WALL_6.setRotationPoint(0F, 12F, 7F); - TANK_WALL_6.setTextureSize(128, 128); - TANK_WALL_6.mirror = true; - setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); - TANK_TOP_2 = new ModelRenderer(this, 43, 0); - TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8); - TANK_TOP_2.setRotationPoint(0F, 10F, 0F); - TANK_TOP_2.setTextureSize(128, 128); - TANK_TOP_2.mirror = true; - setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); - TANK_TOP_3 = new ModelRenderer(this, 43, 0); - TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8); - TANK_TOP_3.setRotationPoint(0F, 10F, 0F); - TANK_TOP_3.setTextureSize(128, 128); - TANK_TOP_3.mirror = true; - setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); - TANK_VALVE = new ModelRenderer(this, 84, 0); - TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2); - TANK_VALVE.setRotationPoint(-1F, 9F, -1F); - TANK_VALVE.setTextureSize(128, 128); - TANK_VALVE.mirror = true; - setRotation(TANK_VALVE, 0F, 0F, 0F); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - generalRender(f5); - } - public void generalRender(float f5) - { - TANK_WALL_1.render(f5); - TANK_WALL_2.render(f5); - TANK_WALL_3.render(f5); - TANK_WALL_4.render(f5); - TANK_SUPPORT_1.render(f5); - TANK_TOP_1.render(f5); - TANK_WALL_5.render(f5); - TANK_SUPPORT_2.render(f5); - TANK_SUPPORT_3.render(f5); - TANK_WALL_6.render(f5); - TANK_TOP_2.render(f5); - TANK_TOP_3.render(f5); - TANK_VALVE.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/1.2.5/eui/boiler/RenderBoiler.java b/1.2.5/eui/boiler/RenderBoiler.java deleted file mode 100644 index 8a2e523a..00000000 --- a/1.2.5/eui/boiler/RenderBoiler.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minecraft.src.eui.boiler; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - - public RenderBoiler() - { - model = new ModelTank(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName("/eui/tankTexture.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.generalRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.2.5/eui/boiler/ShareResources.java b/1.2.5/eui/boiler/ShareResources.java deleted file mode 100644 index 7da50380..00000000 --- a/1.2.5/eui/boiler/ShareResources.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.minecraft.src.eui.boiler; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ShareResources { - - - - - - - - -} diff --git a/1.2.5/eui/boiler/SlotBoiler.java b/1.2.5/eui/boiler/SlotBoiler.java deleted file mode 100644 index 5f7709a4..00000000 --- a/1.2.5/eui/boiler/SlotBoiler.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.minecraft.src.eui.boiler; -import net.minecraft.src.*; - -public class SlotBoiler extends Slot -{ - /** The player that is using the GUI where this slot resides. */ - private EntityPlayer thePlayer; - private int field_48437_f; - - public SlotBoiler(EntityPlayer par1EntityPlayer, IInventory par2IInventory, int par3, int par4, int par5) - { - super(par2IInventory, par3, par4, par5); - this.thePlayer = par1EntityPlayer; - } - - /** - * Check if the stack is a valid item for this slot. Always true beside for the armor slots. - */ - public boolean isItemValid(ItemStack par1ItemStack) - { - return false; - } - - /** - * Decrease the size of the stack in slot (first int arg) by the amount of the second int arg. Returns the new - * stack. - */ - public ItemStack decrStackSize(int par1) - { - if (this.getHasStack()) - { - this.field_48437_f += Math.min(par1, this.getStack().stackSize); - } - - return super.decrStackSize(par1); - } - - /** - * Called when the player picks up an item from an inventory slot - */ - public void onPickupFromSlot(ItemStack par1ItemStack) - { - this.func_48434_c(par1ItemStack); - super.onPickupFromSlot(par1ItemStack); - } - - protected void func_48435_a(ItemStack par1ItemStack, int par2) - { - this.field_48437_f += par2; - this.func_48434_c(par1ItemStack); - } - - protected void func_48434_c(ItemStack par1ItemStack) - { - par1ItemStack.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_48437_f); - this.field_48437_f = 0; - ModLoader.takenFromFurnace(this.thePlayer, par1ItemStack); - - } -} diff --git a/1.2.5/eui/boiler/TileEntityBoiler.java b/1.2.5/eui/boiler/TileEntityBoiler.java deleted file mode 100644 index b094d897..00000000 --- a/1.2.5/eui/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,512 +0,0 @@ -package net.minecraft.src.eui.boiler; -import net.minecraft.src.*; -import net.minecraft.src.eui.BlockMachine; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.eui.api.*; -import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.forge.ISidedInventory; -import net.minecraft.src.pipes.api.ILiquidConsumer; -import net.minecraft.src.pipes.api.ILiquidProducer; -import net.minecraft.src.universalelectricity.UniversalElectricity; - -public class TileEntityBoiler extends TileEntityMachine implements IInventory, ISidedInventory,ILiquidProducer, ILiquidConsumer -{ - - /** - * The ItemStacks that hold the items currently being used in the furnace - */ - private ItemStack[] furnaceItemStacks = new ItemStack[1]; - - /** The number of ticks that the boiler will keep burning */ - public int RunTime = 0; - /** The ammount of energy stored before being add to run Timer */ - public int energyStore = 0; - /** The ammount of water stored */ - public int waterStored = 0; - /** The ammount of steam stored */ - public int steamStored = 0; - /** The ammount of heat stored */ - public int heatStored = 0; - public int heatMax = 10000; - /** The ammount of heat stored */ - public int hullHeat = 0; - public int hullHeatMax = 10000; - private int heatTick = 0; - int count = 0; - boolean hullHeated = false; - TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - int steamMax = 140; - public boolean isBeingHeated = false; - /** - * Returns the number of slots in the inventory. - */ - public int getSizeInventory() - { - return this.furnaceItemStacks.length; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.furnaceItemStacks[par1]; - } - - public ItemStack decrStackSize(int par1, int par2) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var3; - - if (this.furnaceItemStacks[par1].stackSize <= par2) - { - var3 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var3; - } - else - { - var3 = this.furnaceItemStacks[par1].splitStack(par2); - - if (this.furnaceItemStacks[par1].stackSize == 0) - { - this.furnaceItemStacks[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.furnaceItemStacks[par1] != null) - { - ItemStack var2 = this.furnaceItemStacks[par1]; - this.furnaceItemStacks[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.furnaceItemStacks[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - - /** - * Returns the name of the inventory. - */ - public String getInvName() - { - return "container.boiler"; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.furnaceItemStacks.length) - { - this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - - this.RunTime = par1NBTTagCompound.getShort("BurnTime"); - this.energyStore = par1NBTTagCompound.getInteger("energyStore"); - this.steamStored = par1NBTTagCompound.getInteger("steamStore"); - this.heatStored = par1NBTTagCompound.getInteger("heatStore"); - this.waterStored = par1NBTTagCompound.getInteger("waterStore"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); - par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); - par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); - par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); - par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); - par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) - { - if (this.furnaceItemStacks[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.furnaceItemStacks[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - private boolean getIsHeated() { - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); - if(blockEntity instanceof TileEntityFireBox) - { - return true; - } - else - { - return false; - } - } - @Override - public void updateEntity(){ - count++; - if(count >= 20){ - isBeingHeated = getIsHeated(); - addWater();//adds water from container slot - shareWater(); - count = 0; - } - - //changed hullHeat max depending on contents of boiler - if(waterStored > 0) - { - hullHeatMax = 4700; - if(hullHeat > hullHeatMax) - { - hullHeat = 4700; - } - } - else - { - hullHeatMax = 10000; - } - //Checks if the hull is heated - if(hullHeat >= hullHeatMax) - { - hullHeated = true; - } - else - { - hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); - } - //checks if heat level hit max - if(hullHeat >= 10000) - { - if(heatTick >= 1200) - { - // TODO remove block and set fire - heatTick = 0; - } - else - { - heatTick += 1; - } - } - - - int heatNeeded = mod_EUIndustry.boilerHeat; // kilo joules - //if hull heated do work - if(hullHeated) - { - if(heatStored > mod_EUIndustry.fireOutput) - { - if(waterStored >= 1){ - if(heatStored >= heatNeeded) - { - heatStored = Math.max(heatStored - heatNeeded, 0); - --waterStored; - steamStored = Math.min(steamStored + mod_EUIndustry.steamOutBoiler,this.steamMax); - } - } - else - { - heatStored = 0; - } - } - } - TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); - if(blockE instanceof TileEntityFireBox) - { - if(!hullHeated || waterStored > 0) - { - heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(mod_EUIndustry.fireOutput, 1)), heatMax); - } - } - - } - public void shareWater() - { - int wSum = getStoredLiquid(1); //pre-sets the sum to the first tanks current volume - int tankCount = 1; //amount of tanks around this tank, used to get avarage liquid ammount - boolean bottom = false; // whether or not this tanks need to worry about what is bellow it - TileEntity entityBellow = worldObj.getBlockTileEntity(this.xCoord,this.yCoord-1, this.zCoord); - TileEntity entityAbove = worldObj.getBlockTileEntity(this.xCoord,this.yCoord+1, this.zCoord); - //checks wether or not the block bellow it is a tank to move liquid too - if(entityBellow instanceof TileEntityBoiler) - { - int bWater = ((TileEntityBoiler) entityBellow).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) entityBellow).getLiquidCapacity(1); - //checks if that tank has room to get liquid. - - if(bWater < bMax) - { - int emptyVol = Math.max( bMax - bWater,0); - int tradeVol = Math.min(emptyVol, waterStored); - int rejected = ((TileEntityBoiler) entityBellow).onReceiveLiquid(1, tradeVol, (byte) 1); - waterStored = Math.max(waterStored - rejected,0); - wSum -= rejected; - } - else - { - bottom = true; - } - } - else - { - //there was no tank bellow this tank - bottom = true; - } - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - if(bottom) - { - //get average water around center tank - for(int i = 0; i<4;i++) - { - int x = this.xCoord; - int z = this.zCoord; - //switch to check each side TODO rewrite for side values - switch(i) - { - case 0: --x; - case 1: ++x; - case 2: --z; - case 3: ++z; - } - TileEntity entity = worldObj.getBlockTileEntity(x,this.yCoord, z); - if(entity instanceof TileEntityBoiler) - { - //if is a tank add to the sum - wSum += ((TileEntityBoiler) entity).getStoredLiquid(1); - tankCount += 1; - } - } - } - //transfers water - for(int i = 0; i<4;i++) - { - int average = wSum / tankCount;// takes the sum and makes it an average - int x2 = this.xCoord; - int z2 = this.zCoord; - int tradeSum = 0; - //switch to check each side TODO rewrite for side values - switch(i) - { - case 0: --x2; - case 1: ++x2; - case 2: --z2; - case 3: ++z2; - } - TileEntity entity = worldObj.getBlockTileEntity(x2,this.yCoord, z2); - if(entity instanceof TileEntityBoiler) - { - int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); - if(targetW < average) - { - tradeSum = Math.min(average, waterStored); //gets the ammount to give to the target tank - int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, (byte) i); //send that ammount with safty incase some comes back - waterStored =rejectedAm + waterStored - tradeSum; //counts up current water sum after trade - } - } - } - if(entityAbove instanceof TileEntityBoiler) - { - int bWater = ((TileEntityBoiler) entityAbove).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) entityAbove).getLiquidCapacity(1); - if(bottom && waterStored > 0) - { - if(bWater < bMax) - { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, steamStored); - int rejectedS = ((TileEntityBoiler) entityAbove).addSteam(tradeVolS); - waterStored = Math.max(waterStored - rejectedS,0); - wSum -= rejectedS; - } - } - } - - - - - - } - public int addSteam(int watt) { - int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); - this.steamStored += watt - rejectedElectricity; - return rejectedElectricity; - } - private void addWater() { - if (this.furnaceItemStacks[0] != null) - { - if(this.furnaceItemStacks[0].isItemEqual(new ItemStack(Item.bucketWater,1))) - { - if((int)waterStored < getLiquidCapacity(1)) - { - ++waterStored; - this.furnaceItemStacks[0] = new ItemStack(Item.bucketEmpty,1); - this.onInventoryChanged(); - } - } - } - - } - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - public void openChest() {} - - public void closeChest() {} - - @Override - public int getStartInventorySide(int side) - { - return 0; - } - - @Override - public int getSizeInventorySide(int side) - { - return 1; - } - public int precentHeated() { - int var1; - if(hullHeat < 100) - { - var1 = (int)(100 *(hullHeat/100)); - } - else - { - var1 = 100; - } - return var1; - } - @Override - public int onReceiveLiquid(int type, int vol, byte side) { - if(type == 1) - { - int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); - this.waterStored += vol - rejectedElectricity; - return rejectedElectricity; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type, byte side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 1) - { - return this.waterStored; - } - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type ==1) - { - return 14; - } - if(type == 0) - { - return steamMax; - } - return 0; - } - @Override - public int onProduceLiquid(int type, int maxVol, int side) { - if(type == 0) - { - if(steamStored > 1) - { - this.steamStored -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, byte side) { - if(type == 0) - { - return true; - } - return false; - } - - } diff --git a/1.2.5/eui/burner/ContainerFireBox.java b/1.2.5/eui/burner/ContainerFireBox.java deleted file mode 100644 index 1b0264bc..00000000 --- a/1.2.5/eui/burner/ContainerFireBox.java +++ /dev/null @@ -1,42 +0,0 @@ -package net.minecraft.src.eui.burner; - -import net.minecraft.src.*; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlot(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} diff --git a/1.2.5/eui/burner/FurnaceModel.java b/1.2.5/eui/burner/FurnaceModel.java deleted file mode 100644 index 517baee6..00000000 --- a/1.2.5/eui/burner/FurnaceModel.java +++ /dev/null @@ -1,82 +0,0 @@ -// Date: 8/14/2012 3:02:31 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package net.minecraft.src.eui.burner; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class FurnaceModel extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer top; - ModelRenderer bottom; - ModelRenderer Shape1; - - public FurnaceModel() - { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(256, 256); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(256, 256); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(256, 256); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(256, 256); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - genRender(f5); - } - public void genRender(float f5) - { - Body.render(f5); - top.render(f5); - bottom.render(f5); - Shape1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/1.2.5/eui/burner/GUIFireBox.java b/1.2.5/eui/burner/GUIFireBox.java deleted file mode 100644 index 82966aaf..00000000 --- a/1.2.5/eui/burner/GUIFireBox.java +++ /dev/null @@ -1,87 +0,0 @@ -package net.minecraft.src.eui.burner; - -import org.lwjgl.opengl.GL11; -import java.math.*; -import java.text.DecimalFormat; -import java.lang.Integer; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.UniversalElectricity; - -public class GUIFireBox extends GuiContainer -{ - private TileEntityFireBox tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("FireBox", 55, 6, 4210752); - this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); - String displayText = ""; - if(!tileEntity.isConnected) - { - displayText = "No Boiler"; - } - else if(tileEntity.containingItems[0] != null) - { - if(tileEntity.containingItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) - { - displayText = "No Coal"; - } - else{ - if(tileEntity.generateRate*20 < 20) - { - displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = getWattDisplay((tileEntity.generateRate*20)); - } - } - } - this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" KJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/1.2.5/eui/burner/RenderFurnace.java b/1.2.5/eui/burner/RenderFurnace.java deleted file mode 100644 index a5d83e84..00000000 --- a/1.2.5/eui/burner/RenderFurnace.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minecraft.src.eui.burner; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderFurnace extends TileEntitySpecialRenderer -{ - int type = 0; - private FurnaceModel model; - - public RenderFurnace() - { - model = new FurnaceModel(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName("/eui/Furnace.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.2.5/eui/burner/TileEntityFireBox.java b/1.2.5/eui/burner/TileEntityFireBox.java deleted file mode 100644 index 220750d4..00000000 --- a/1.2.5/eui/burner/TileEntityFireBox.java +++ /dev/null @@ -1,265 +0,0 @@ -package net.minecraft.src.eui.burner; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.eui.api.IHeatProducer; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.forge.ISidedInventory; - -public class TileEntityFireBox extends TileEntityMachine implements IInventory, ISidedInventory, IHeatProducer -{ - //max heat generated per second - private int connectedUnits = 0; - public static int maxGenerateRate = 0; - //Current generation rate based on hull heat. In TICKS. - public int generateRate = 0; - public boolean isConnected = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - int count = 0; - public int itemCookTime = 0; - public ItemStack[] containingItems = new ItemStack[1]; - public void updateEntity() - {if (!this.worldObj.isRemote){ - - if(count == 20) - { - addConnection(); - sharCoal(); - - count = 0; - } - count++; - maxGenerateRate = mod_EUIndustry.fireOutput + (connectedUnits*5); - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if(blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. - if (this.containingItems[0] != null && isConnected) - { - if (this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - if(isConnected) - { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); - } - } - //Loose heat when the generator is not connected or if there is no coal in the inventory. - if(this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate-5, 0); - } - } - - //gets all connected fireBoxes and shares its supply of coal - public void sharCoal(){ - for(int i =0; i<6;i++) - { - - if(connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if(this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.containingItems[0].stackSize > 0) - { - if(connectedConsumer.containingItems[0] != null) - { - if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(connectedConsumer.containingItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.containingItems[0].stackSize + connectedConsumer.containingItems[0].stackSize)/2; - if(this.containingItems[0].stackSize > connectedConsumer.containingItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.containingItems[0].stackSize); - connectedConsumer.containingItems[0].stackSize = connectedConsumer.containingItems[0].stackSize + transferC; - this.containingItems[0].stackSize = this.containingItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.containingItems[0] = new ItemStack(this.containingItems[0].getItem()); - this.containingItems[0].stackSize -= 1; - } - } - } - } - } - - - } - public void addConnection() - { - connectedUnits = 0; - for(int i = 0; i<6; i++) - { - - TileEntity aEntity = getSteamMachine(i); - if(aEntity instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(int side) - { - if (side == 0) - { - return 1; - } - if (side == 1) - { - return 0; - } - return 2; - } - @Override - public int getSizeInventorySide(int side) { return getSizeInventory(); } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "FireBox"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - @Override - public float onProduceHeat(float jouls, int side) { - // TODO Auto-generated method stub - return Math.min(generateRate,jouls); - } -} diff --git a/1.2.5/eui/robotics/BlockComp.java b/1.2.5/eui/robotics/BlockComp.java deleted file mode 100644 index 2caa052f..00000000 --- a/1.2.5/eui/robotics/BlockComp.java +++ /dev/null @@ -1,62 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import java.util.List; - -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.eui.TileEntityNuller; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.turbine.TileEntityGenerator; -import net.minecraft.src.universalelectricity.Vector3; -import net.minecraft.src.universalelectricity.extend.*; - -public class BlockComp extends BlockMachine { - - public BlockComp(int par1) { - super("RobotMachine", par1, Material.iron); - // TODO Auto-generated constructor stub - } - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - return 0; - } - public int getBlockTextureFromSideAndMetadata(int side, int metadata) - { - return 0; - } - @Override - public TileEntity getBlockEntity() { - // TODO Auto-generated method stub - return null; - } - @Override - public TileEntity getBlockEntity(int meta) - { - switch(meta) - { - case 0: return new TileEntityComp(); - case 1: return new TileEntityComp(); - case 2: return new TileEntityComp(); - case 3: return new TileEntityComp(); - } - return null; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - public int getRenderType() - { - return 0; - } - -} diff --git a/1.2.5/eui/robotics/BlockRail.java b/1.2.5/eui/robotics/BlockRail.java deleted file mode 100644 index 9795e877..00000000 --- a/1.2.5/eui/robotics/BlockRail.java +++ /dev/null @@ -1,5 +0,0 @@ -package net.minecraft.src.eui.robotics; - -public class BlockRail { - -} diff --git a/1.2.5/eui/robotics/EntityDigger.java b/1.2.5/eui/robotics/EntityDigger.java deleted file mode 100644 index 3065597a..00000000 --- a/1.2.5/eui/robotics/EntityDigger.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import net.minecraft.src.World; - -public class EntityDigger extends EntityRobot { - - public EntityDigger(World par1World) { - super(par1World); - // TODO Auto-generated constructor stub - } - -} diff --git a/1.2.5/eui/robotics/EntityRobot.java b/1.2.5/eui/robotics/EntityRobot.java deleted file mode 100644 index 729a2a44..00000000 --- a/1.2.5/eui/robotics/EntityRobot.java +++ /dev/null @@ -1,314 +0,0 @@ -package net.minecraft.src.eui.robotics; -import java.util.List; - -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.Vector3; - -public class EntityRobot extends EntityCreature { - public int attackStrength = 0; - public int battery = 0; //how long this but will run in, 2 = 20ticks - public int disabled = 0; //disabled timer - public int updateCount = 0; //used to control how fast the bot calls its updates - public boolean isDisabled = false;//is not updating - public boolean hasTask = false; //has a working task - public Vector3 taskLocation = null; //task location usual a block or item - int[] taskLoc = {0,0,0}; - public String currentTask = "none"; //type of task this bot can perform - public boolean isLinked = false; // is linked to a controller - public int[] linkFrq = {0,0,0}; //not so much a link number but controller location - public EntityRobot(World par1World) { - super(par1World); - } - @Override - public void onEntityUpdate() - { - super.onEntityUpdate(); - if(!worldObj.isRemote) - { - updateCount++; - //used for emping of bot or empty battery - isDisabled = true; - if(disabled <=0) - { - - isDisabled = false; - } - if(!isDisabled && updateCount >= 10) - { - updateCount =0; - battery += 2; //TODO remove after testing - --battery; - botUpdate(); - } - } - - } - //update function to control how fast the bot updates to reduce load - public void botUpdate() - { - if(taskLocation != null) - { - taskLoc[0] = taskLocation.intX(); - taskLoc[1] = taskLocation.intY(); - taskLoc[2] = taskLocation.intZ(); - } - //links the bot to a controler if it is not already linked - if(!isLinked) - { - this.setDead(); - /** - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("linking To Controler"); - TileEntityComp targetComp = this.getEmptyControler(this.posX,this.posY,this.posZ, 50); - if(targetComp != null){ - boolean added = targetComp.addBot(this); - if(added) - { - isLinked = true; - linkFrq[0] = targetComp.xCoord; - linkFrq[1] = targetComp.yCoord; - linkFrq[2] = targetComp.zCoord; - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("linked To Controler"); - } - } - **/ - } - else - { - //TODO add logic too tell controler this bot is alive, current task, hp, location,etc.... - TileEntity comp = worldObj.getBlockTileEntity(this.linkFrq[0], this.linkFrq[1], this.linkFrq[2]); - if(comp instanceof TileEntityComp) - { - Boolean linked = ((TileEntityComp) comp).addBot(this); - if(!linked) - { - this.isLinked = false; - } - } - else - { - this.isLinked = true; - } - } - } - /** - * used to find the closest controller - * @param par1 - x - * @param par3 - y - * @param par5 - z - * @param par7 - range in blocks - * @return the nearest controller - */ - public TileEntityComp getClosestControler(double par1, double par3, double par5, double par7) - { - double var9 = -1.0D; - TileEntityComp var11 = null; - List itemList = worldObj.getEntitiesWithinAABB(TileEntityComp.class, this.boundingBox.expand(par7, 4.0D, par7)); - for (int var12 = 0; var12 < itemList.size(); ++var12) - { - TileEntityComp var13 = (TileEntityComp)itemList.get(var12); - double var14 = var13.getDistanceFrom(par1, par3, par5); - - if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) - { - var9 = var14; - var11 = var13; - } - } - - return var11; - } - /** - * used to find the closest controller with an empty slot mainly used to find and add a robot to the controller - * @param par1 - x - * @param par3 - y - * @param par5 - z - * @param par7 - range in blocks - * @return the nearest controller block with an empty control slot - */ - public TileEntityComp getEmptyControler(double par1, double par3, double par5, double par7) - { - double var9 = -1.0D; - TileEntityComp var11 = null; - List itemList = worldObj.getEntitiesWithinAABB(TileEntityComp.class, this.boundingBox.expand(par7, 4.0D, par7)); - for (int var12 = 0; var12 < itemList.size(); ++var12) - { - TileEntityComp var13 = (TileEntityComp)itemList.get(var12); - double var14 = var13.getDistanceFrom(par1, par3, par5); - - if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) - { - for(int c = 0; c < 4; c++) - { - if(var13.BotList[c]==null) - { - var11 = var13; - } - } - var9 = var14; - } - } - - return var11; - } - public boolean isAIEnabled() - { - return false; - } - protected boolean canDespawn() - { - return false; - } - @Override - public void writeEntityToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeEntityToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("batt", this.battery); - par1NBTTagCompound.setIntArray("linkFrq", this.linkFrq); - par1NBTTagCompound.setBoolean("linked", isLinked); - par1NBTTagCompound.setBoolean("hasTask", hasTask); - par1NBTTagCompound.setIntArray("taskLoc", taskLoc); - } - - public void readEntityFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readEntityFromNBT(par1NBTTagCompound); - this.battery = par1NBTTagCompound.getInteger("batt"); - this.linkFrq = par1NBTTagCompound.getIntArray("linkFrq"); - this.isLinked = par1NBTTagCompound.getBoolean("linked"); - this.hasTask = par1NBTTagCompound.getBoolean("hasTask"); - taskLoc = par1NBTTagCompound.getIntArray("taskLoc"); - this.taskLocation = new Vector3(taskLoc[0],taskLoc[1],taskLoc[2]); - } - @Override - public int getMaxHealth() { - return 1; - } - public String getTaskType() { - return "n/a"; - - } - public boolean isIdle() { - // TODO Auto-generated method stub - return !hasTask; - } - public boolean setWorkTask(Vector3 taskLoc, String task) { - int x = taskLoc.intX(); - int y = taskLoc.intY(); - int z = taskLoc.intZ(); - Vector3 thisBot = new Vector3(this.posX,this.posY,this.posZ); - PathEntity PathToItem = this.worldObj.getEntityPathToXYZ(this, x, y, z, 30, true, false, false, true); - if(PathToItem != null){ - if(task.toLowerCase() == this.getTaskType().toLowerCase()) - { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("TaskSet"); - this.taskLocation = taskLoc; - this.currentTask = task; - hasTask = true; - return true; - } - } - - return false; - } -public boolean harvest(Vector3 BlockLoc) -{ - int x = BlockLoc.intX(); - int y = BlockLoc.intY(); - int z = BlockLoc.intZ(); - Vector3 thisBot = new Vector3(this.posX,this.posY,this.posZ); - PathEntity PathToItem = this.worldObj.getEntityPathToXYZ(this, x, y, z, 30, true, false, false, true); - if(PathToItem != null){ - this.setPathToEntity(PathToItem); - this.moveSpeed = 1.0F; - if(thisBot.distanceTo(BlockLoc) < 4) - { - int blockTargetc = worldObj.getBlockId(x, y, z); - boolean harvested = worldObj.setBlock(x, y, z, 0); - if(blockTargetc ==0) - { - harvested = true; - } - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Harvesting Block "+blockTargetc); - if(blockTargetc > 0 && harvested) - { - EntityItem dropedItem = new EntityItem(worldObj, x, y - 0.3D, z, new ItemStack(blockTargetc,1,1)); - worldObj.spawnEntityInWorld(dropedItem); - if(getController() != null) - { - getController().ClearFromList(BlockLoc); - } - } - return harvested; - } - } - return false; -} -public TileEntityComp getController() -{ - TileEntity comp = worldObj.getBlockTileEntity(this.linkFrq[0], this.linkFrq[1], this.linkFrq[2]); - if(comp instanceof TileEntityComp) - { - return (TileEntityComp) comp; - } - return null; -} -public EntityItem findClosestItem(double par1, double par3, double par5, double par7) -{ - double var9 = -1.0D; - EntityItem var11 = null; - List itemList = worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(par7, 4.0D, par7)); - for (int var12 = 0; var12 < itemList.size(); ++var12) - { - EntityItem var13 = (EntityItem)itemList.get(var12); - double var14 = var13.getDistanceSq(par1, par3, par5); - - if ((par7 < 0.0D || var14 < par7 * par7) && (var9 == -1.0D || var14 < var9)) - { - var9 = var14; - var11 = var13; - } - } - - return var11; -} -public boolean collectItem(EntityItem targetItem) -{ - if(targetItem == null) - { - targetItem = findClosestItem(this.posX, this.posY, this.posZ,30); - } - else - { - if(!targetItem.isEntityAlive()) - { - targetItem = null; - } - } - if(targetItem != null) - { - - PathEntity PathToItem = this.worldObj.getPathEntityToEntity(this, targetItem, 30, true, false, false, true); - if(hasPath()){ - this.setPathToEntity(PathToItem); - this.moveSpeed = 1.0F; - if(targetItem.getDistanceSq(this.posX,this.posY,this.posZ) < 2) - { - targetItem.setDead(); - //TODO add item to inventory - targetItem = null; - } - } - else - { - this.moveSpeed = 0.23F; - } - } - return false; -} -public void clearTask() { - this.taskLocation = null; - this.currentTask = "none"; - this.hasTask = false; - -} -} diff --git a/1.2.5/eui/robotics/EntityShoeBot.java b/1.2.5/eui/robotics/EntityShoeBot.java deleted file mode 100644 index 43de303c..00000000 --- a/1.2.5/eui/robotics/EntityShoeBot.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.minecraft.src.eui.robotics; -import java.util.List; - -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.Vector3; -public class EntityShoeBot extends EntityRobot { - - EntityItem targetItem = null; - public EntityShoeBot(World par1World) { - super(par1World); - this.setSize(0.6F, 0.5F); - this.moveSpeed = 0.23F; - this.texture = "/mobs/char.png"; - } - @Override - public void botUpdate() - { - super.botUpdate(); - EntityPlayer person = Modloader.getMinecraftInstance().thePlayer; - person.addChatMessage("CC"); - if(hasTask) - { - person.addChatMessage("resuming task"); - if(this.currentTask == this.getTaskType() && this.taskLocation != null) - { - boolean harDone = harvest(this.taskLocation); - if(harDone) - { - clearTask(); - } - } - else - { - clearTask(); - } - - } - else - { - //requestTask - } - - } - - - @Override - public int getMaxHealth() { - // TODO Auto-generated method stub - return 5; - } - - public String getRenderedName() { - // TODO Auto-generated method stub - return "Harvester Bot"; - } - public String getTaskType() { - return "harvest"; - - } -} diff --git a/1.2.5/eui/robotics/Entitycollector.java b/1.2.5/eui/robotics/Entitycollector.java deleted file mode 100644 index 9c494260..00000000 --- a/1.2.5/eui/robotics/Entitycollector.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import net.minecraft.src.World; - -public class Entitycollector extends EntityRobot { - - public Entitycollector(World par1World) { - super(par1World); - // TODO Auto-generated constructor stub - } - -} diff --git a/1.2.5/eui/robotics/ItemMachine.java b/1.2.5/eui/robotics/ItemMachine.java deleted file mode 100644 index 0731d868..00000000 --- a/1.2.5/eui/robotics/ItemMachine.java +++ /dev/null @@ -1,24 +0,0 @@ -package net.minecraft.src.eui.robotics; -import java.util.ArrayList; - -import net.minecraft.src.*; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - } - @Override - public int getMetadata(int metadata) - { - return metadata; - } - @Override - public String getItemName() - { - return "Machine"; - } - } - diff --git a/1.2.5/eui/robotics/ItemSpawn.java b/1.2.5/eui/robotics/ItemSpawn.java deleted file mode 100644 index d1fc39cc..00000000 --- a/1.2.5/eui/robotics/ItemSpawn.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.minecraft.src.eui.robotics; - - -import java.util.ArrayList; - -import net.minecraft.src.*; - - -public class ItemSpawn extends Item -{ - - - public ItemSpawn (int id) - { - super(id); - maxStackSize = 1; - setMaxDamage(0); - setHasSubtypes(true); - } -public void addCreativeItems(ArrayList itemList) -{ - - itemList.add(new ItemStack(this, 1,1)); - - } - - public String getItemNameIS(ItemStack itemstack) { - switch(itemstack.getItemDamage()) - { - case 1: return "Bot"; - } - - return "Blank"; - } - public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int l) - { - - if(!world.isRemote) - { - - i += Facing.offsetsXForSide[l]; - j += Facing.offsetsYForSide[l]; - k += Facing.offsetsZForSide[l]; - - EntityShoeBot Guard = new EntityShoeBot(world); - Guard.setLocationAndAngles((double)i + 0.5D, (double)j + 1.0D, (double)k + 0.5D, 0.0F, 0.0F); - world.spawnEntityInWorld(Guard); - - entityplayer.swingItem(); - --itemstack.stackSize; - } - - - - - return true; - } -} diff --git a/1.2.5/eui/robotics/ModelModelShoeBot.java b/1.2.5/eui/robotics/ModelModelShoeBot.java deleted file mode 100644 index 18eebace..00000000 --- a/1.2.5/eui/robotics/ModelModelShoeBot.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -//Model code generated by MCModeller. All animation, AI, -//and special features are yours to program. Also keep in -//mind that some of these class names may have changed since -//wrote this. Make sure to check for compatibility with the -//latest version of the Minecraft Coder Pack before attempting -//to use this code. -import net.minecraft.src.ModelRenderer; - -public class ModelModelShoeBot extends ModelBase -{ - public ModelRenderer body; - public ModelRenderer Head; - - public ModelModelShoeBot() - { - body = new ModelRenderer(this,0, 0); - body.addBox(-4.0F, -2.0F, -4.0F, 8, 4, 8, 0); - - Head = new ModelRenderer(this,0, 0); - Head.addBox(-2.0F, -2.0F, -2.0F, 4, 4, 4, 0); - - } - @Override - public void render(Entity par1Entity, float f, float f1, float f2, float f3, float f4, float f5) - { - this.setRotationAngles(f, f1, f2, f3, f4, f5); - body.render(f5); - Head.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/1.2.5/eui/robotics/RenderShoeBot.java b/1.2.5/eui/robotics/RenderShoeBot.java deleted file mode 100644 index 7e79df8c..00000000 --- a/1.2.5/eui/robotics/RenderShoeBot.java +++ /dev/null @@ -1,101 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import static net.minecraft.src.forge.IItemRenderer.ItemRenderType.EQUIPPED; -import static net.minecraft.src.forge.IItemRenderer.ItemRendererHelper.BLOCK_3D; -import net.minecraft.client.Minecraft; -import net.minecraft.src.Block; -import net.minecraft.src.Entity; -import net.minecraft.src.EntityBlaze; -import net.minecraft.src.EntityLiving; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.EntityPlayerSP; -import net.minecraft.src.EnumAction; -import net.minecraft.src.FontRenderer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.ModelBiped; -import net.minecraft.src.ModelBlaze; -import net.minecraft.src.ModelGhast; -import net.minecraft.src.RenderBlocks; -import net.minecraft.src.RenderLiving; -import net.minecraft.src.Tessellator; -import net.minecraft.src.forge.IItemRenderer; -import net.minecraft.src.forge.MinecraftForgeClient; - -import org.lwjgl.opengl.GL11; - -public class RenderShoeBot extends RenderLiving -{ - public RenderShoeBot() - { - super(new ModelModelShoeBot(), 0.5F); - } - - protected void renderName(EntityShoeBot par1EntityGuard, double par2, double par4, double par6) - { - if (Minecraft.isGuiEnabled()) - { - float var8 = 1.6F; - float var9 = 0.016666668F * var8; - float var10 = par1EntityGuard.getDistanceToEntity(this.renderManager.livingPlayer); - float var11 = par1EntityGuard.isSneaking() ? 4.0F : 32.0F; - - if (var10 < var11) - { - String var12 = par1EntityGuard.getRenderedName(); - - - FontRenderer var13 = this.getFontRendererFromRenderManager(); - GL11.glPushMatrix(); - GL11.glTranslatef((float)par2 + 0.0F, (float)par4 + 2.3F, (float)par6); - GL11.glNormal3f(0.0F, 1.0F, 0.0F); - GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); - GL11.glScalef(-var9, -var9, var9); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glTranslatef(0.0F, 0.25F / var9, 0.0F); - GL11.glDepthMask(false); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - Tessellator var14 = Tessellator.instance; - GL11.glDisable(GL11.GL_TEXTURE_2D); - var14.startDrawingQuads(); - int var15 = var13.getStringWidth(var12) / 2; - var14.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); - var14.addVertex((double)(-var15 - 1), -1.0D, 0.0D); - var14.addVertex((double)(-var15 - 1), 8.0D, 0.0D); - var14.addVertex((double)(var15 + 1), 8.0D, 0.0D); - var14.addVertex((double)(var15 + 1), -1.0D, 0.0D); - var14.draw(); - GL11.glEnable(GL11.GL_TEXTURE_2D); - GL11.glDepthMask(true); - var13.drawString(var12, -var13.getStringWidth(var12) / 2, 0, 553648127); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glPopMatrix(); - } - } - } - - public void renderBot(EntityShoeBot par1Entity, double par2, double par4, double par6, float par8, float par9) - { - double var13 = par4 - (double)par1Entity.yOffset - 1.2; - super.doRenderLiving(par1Entity, par2, var13, par6, par8, par9); - } - @Override - public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) - { - this.renderBot((EntityShoeBot)par1Entity, par2, par4, par6, par8, par9); - } - public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) - { - this.renderBot((EntityShoeBot)par1EntityLiving, par2, par4, par6, par8, par9); - } - @Override - protected void passSpecialRender(EntityLiving par1EntityLiving, double par2, double par4, double par6) - { - this.renderName((EntityShoeBot)par1EntityLiving, par2, par4, par6); - } - -} \ No newline at end of file diff --git a/1.2.5/eui/robotics/TileEntityComp.java b/1.2.5/eui/robotics/TileEntityComp.java deleted file mode 100644 index 5fb822d3..00000000 --- a/1.2.5/eui/robotics/TileEntityComp.java +++ /dev/null @@ -1,302 +0,0 @@ -package net.minecraft.src.eui.robotics; - -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.AxisAlignedBB; -import net.minecraft.src.Block; -import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.ModLoader; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.TileEntity; -import net.minecraft.src.universalelectricity.Vector3; -import net.minecraft.src.universalelectricity.electricity.TileEntityElectricUnit; - -public class TileEntityComp extends TileEntityElectricUnit { - public EntityRobot[] BotList = {null,null,null,null}; - - int updateCount = 0; - int scanCount = 0; - boolean hasScanned = false; - int lastScanXDif=0; - int lastScanYDif=0; - int lastScanZDif=0; - Vector3[] harvestList={null,null,null,null,null,null,null,null,null,null}; - public void onUpdate(float watts, float voltage, byte side) - { - if(!worldObj.isRemote) - { - ++updateCount; - cleanList(); - for(int b =0;b<4;b++) - { - if(BotList[b] ==null) - { - //spawn bot for testing - EntityShoeBot bot = new EntityShoeBot(worldObj); - bot.setLocationAndAngles(this.xCoord, this.yCoord+1, this.zCoord, 10, 10); - bot.linkFrq[0]=this.xCoord; - bot.linkFrq[1]=this.yCoord; - bot.linkFrq[2]=this.zCoord; - bot.isLinked = true; - worldObj.spawnEntityInWorld(bot); - BotList[b]=bot; - } - } - if(updateCount >= 50 && worldObj.checkChunksExist(xCoord, yCoord, zCoord, xCoord+1, yCoord+1, zCoord+1)) - { - ++scanCount; - if(scanCount < 10){hasScanned = true;}else{scanCount = 0;hasScanned=false;} - Vector3 thisBlock = new Vector3(this.xCoord,this.yCoord,this.zCoord); - updateCount = 0; - Vector3 targetVec = findBlock(thisBlock,Block.leaves,20,hasScanned); - if(targetVec == null) - { - targetVec = findBlock(thisBlock,Block.wood,20,hasScanned); - } - if(targetVec != null) - { - int Targetx = targetVec.intX(); - int Targety = targetVec.intY(); - int Targetz = targetVec.intZ(); - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("rb:"+Targetx+"X:"+Targety+"Y:"+Targetz+"Z"); - int blockTargetc = worldObj.getBlockId(Targetx, Targety, Targetz); - boolean taskreceived = sendTask(targetVec,"harvest"); - if(taskreceived) - { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Harvest Task sent to robot"); - } - else - { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Task not sent"); - } - } - else - { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("N/A");//nothing found from scan - scanCount = 0; - } - } - } - } - /** - * - * @param taskLoc - location of the task - * @param task - what is the task harvest, replace, mine, build - * @param bot - bot being given the task - * @return whether or not the task was received - */ - public boolean sendTask(Vector3 taskLoc,String task) - { - for(int i = 0;i < BotList.length;i++) - { - if(BotList[i] instanceof EntityRobot) - { - String botTaskMain = BotList[i].getTaskType(); - if(botTaskMain.toLowerCase() == task.toLowerCase()) - { - if(BotList[i].isIdle()) - { - return BotList[i].setWorkTask(taskLoc,task); - } - } - } - } - return false; - } -/** - * - * @param startSpot - center of the scan radius - * @param block - block being looked for - * @param range - block count from center to scan - * @param resume - whether or not to resume scan from returned block - * @return location vector3 of the block equaling scan args - */ - public Vector3 findBlock(Vector3 startSpot,Block block,int range,boolean resume) - { - - - int Startx = startSpot.intX(); - int Starty = startSpot.intY(); - int Startz = startSpot.intZ(); - int distanceX = (range * 2) + 1; - int distanceZ = (range * 2) + 1; - int distanceY = (range * 2) + 1; - Boolean negX = Startx < 0; - Boolean negZ = Startz < 0; - int xChange = -1; - int zChange = -1; - int yChange = -1; - Startx += range; - Startz += range; - Starty += range; - int pauseCount = 0; - //ModLoader.getMinecraftInstance().thePlayer.addChatMessage("starting Scan For " + block.getBlockName()); - int y = Starty; - for(int iY=0;iY < (distanceY*2);iY++) - { - - pauseCount++; - if(pauseCount >= 2) - { - int x = Startx; - int z = Startz; - - for(int iX=0;iX < distanceY;iX++) - { - for(int iZ=0;iZ < distanceZ;iZ++) - { - - int blockTargetID = worldObj.getBlockId(x, y, z); - //System.out.println("BlockAt:"+x+"x:"+y+"y:"+z+"z:"+blockTargetID+"ID"); - if(blockTargetID == block.blockID) - { - Vector3 targetBlock = new Vector3(x,y,z); - if(!onHarvestList(targetBlock)) - { - //ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Target Block Found"); - boolean taskAdded = addHarvest(targetBlock); - if(taskAdded) - { - return targetBlock; - } - } - - } - - z += zChange; - } - x += xChange; - z = Startz; - } - pauseCount =0; - y += yChange; - } - - - } - return null; - - } - private boolean addHarvest(Vector3 targetBlock) { - for(int i = 0;i < 10;i++) - { - if(harvestList[i] != targetBlock) - { - harvestList[i]=targetBlock; - return true; - } - } - return false; - -} - private boolean onHarvestList(Vector3 targetBlock) { - for(int i = 0;i < 10;i++) - { - if(harvestList[i] == targetBlock) - { - return true; - } - } - return false; - } - public boolean ClearFromList(Vector3 targetBlock) { - for(int i = 0;i < 10;i++) - { - if(harvestList[i] == targetBlock) - { - harvestList[i] = null; - return true; - } - - } - return false; - } - - - - public EntityRobot[] getControlList() - { - return BotList; - - } - public boolean addBot(EntityRobot bot) - { - for(int i = 0; i < 4; i++) - { - if(BotList[i] == bot) - { - return true; - } - } - for(int i = 0; i < 4; i++) - { - if(BotList[i] == null) - { - ModLoader.getMinecraftInstance().thePlayer.addChatMessage("Bot Added"); - BotList[i] = bot; - return true; - } - } - return false; - } - /**will be used to update the bot list on restart or reload of the world. - This way entity ids that are not bots are not stored in the list. - Generally the bots themselves will send the controller there ids when they load - into the world. The controller will then tell the bot its linked to the controller. - **/ - public void cleanList() - { - for(int i = 0;i<4;i++) - { - if(BotList[i] instanceof EntityRobot) - { - EntityRobot Bot = BotList[i]; - Vector3 thisLoc = new Vector3(this.xCoord,this.yCoord,this.zCoord); - Vector3 botFrq = new Vector3(Bot.linkFrq[0],Bot.linkFrq[1],Bot.linkFrq[2]); - if(!botFrq.isEqual(thisLoc)) - { - BotList[i] = null; - } - } - else - { - BotList[i] = null; - } - } - - } - @Override - public float electricityRequest() { - // TODO Auto-generated method stub - return 0; - } - @Override - public boolean canReceiveFromSide(byte side) { - // TODO Auto-generated method stub - return true; - } - public boolean canUpdate() - { - return true; - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - } -} diff --git a/1.2.5/eui/turbine/ContainerGenerator.java b/1.2.5/eui/turbine/ContainerGenerator.java deleted file mode 100644 index dea1a8bc..00000000 --- a/1.2.5/eui/turbine/ContainerGenerator.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.minecraft.src.eui.turbine; - -import net.minecraft.src.*; - -public class ContainerGenerator extends Container -{ - private TileEntityGenerator tileEntity; - - public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) - { - this.tileEntity = tileEntity; - this.addSlot(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlot(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlot(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/1.2.5/eui/turbine/EngineSmallModel.java b/1.2.5/eui/turbine/EngineSmallModel.java deleted file mode 100644 index 93274802..00000000 --- a/1.2.5/eui/turbine/EngineSmallModel.java +++ /dev/null @@ -1,242 +0,0 @@ -// Date: 8/14/2012 3:20:15 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package net.minecraft.src.eui.turbine; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class EngineSmallModel extends ModelBase -{ - //fields - ModelRenderer BASE; - ModelRenderer PISTON_WALL_1; - ModelRenderer PISTON_HEAD_MOVES; - ModelRenderer PISTON_TURNER_MOVES; - ModelRenderer PISTON_ARM_MOVES; - ModelRenderer GEAR_A_NECK; - ModelRenderer PISTON_WALL_2; - ModelRenderer PISTON_WALL_3; - ModelRenderer PISTON_WALL_4; - ModelRenderer PISTON_SUPPORT_1; - ModelRenderer PISTON_SUPPORT_2; - ModelRenderer FORCE_CONDUCTOR_BOX; - ModelRenderer GEAR_A_TEETH_1_ROTATES; - ModelRenderer GEAR_A_TEETH_2_ROTATES; - ModelRenderer GEAR_A_TEETH_3_ROTATES; - ModelRenderer FORCE_TRANSMITTER_ROTATES; - ModelRenderer GEAR_B_TEETH_1_ROTATES; - ModelRenderer GEAR_B_TEETH_2_ROTATES; - ModelRenderer GEAR_B_TEETH_3_ROTATES; - ModelRenderer SUPPORT_PLATE; - ModelRenderer ORNAMENT_1; - ModelRenderer ORNAMENT_2; - ModelRenderer LEVER_1_CAN_BE_TURNED; - ModelRenderer LEVER_2_CAN_BE_TURNED; - - public EngineSmallModel() - { - textureWidth = 128; - textureHeight = 128; - - BASE = new ModelRenderer(this, 0, 0); - BASE.addBox(0F, 0F, 0F, 16, 1, 16); - BASE.setRotationPoint(-8F, 23F, -8F); - BASE.setTextureSize(128, 128); - BASE.mirror = true; - setRotation(BASE, 0F, 0F, 0F); - PISTON_WALL_1 = new ModelRenderer(this, 0, 18); - PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); - PISTON_WALL_1.setTextureSize(128, 128); - PISTON_WALL_1.mirror = true; - setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); - PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); - PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); - PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); - PISTON_HEAD_MOVES.setTextureSize(128, 128); - PISTON_HEAD_MOVES.mirror = true; - setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); - PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); - PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); - PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); - PISTON_TURNER_MOVES.setTextureSize(128, 128); - PISTON_TURNER_MOVES.mirror = true; - setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); - PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); - PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); - PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); - PISTON_ARM_MOVES.setTextureSize(128, 128); - PISTON_ARM_MOVES.mirror = true; - setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); - GEAR_A_NECK = new ModelRenderer(this, 65, 25); - GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); - GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); - GEAR_A_NECK.setTextureSize(128, 128); - GEAR_A_NECK.mirror = true; - setRotation(GEAR_A_NECK, 0F, 0F, 0F); - PISTON_WALL_2 = new ModelRenderer(this, 0, 18); - PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); - PISTON_WALL_2.setTextureSize(128, 128); - PISTON_WALL_2.mirror = true; - setRotation(PISTON_WALL_2, 0F, 0F, 0F); - PISTON_WALL_3 = new ModelRenderer(this, 0, 18); - PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); - PISTON_WALL_3.setTextureSize(128, 128); - PISTON_WALL_3.mirror = true; - setRotation(PISTON_WALL_3, 0F, 0F, 0F); - PISTON_WALL_4 = new ModelRenderer(this, 0, 18); - PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); - PISTON_WALL_4.setTextureSize(128, 128); - PISTON_WALL_4.mirror = true; - setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); - PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); - PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); - PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); - PISTON_SUPPORT_1.setTextureSize(128, 128); - PISTON_SUPPORT_1.mirror = true; - setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); - PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); - PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); - PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); - PISTON_SUPPORT_2.setTextureSize(128, 128); - PISTON_SUPPORT_2.mirror = true; - setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); - FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); - FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); - FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); - FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); - FORCE_CONDUCTOR_BOX.mirror = true; - setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); - GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); - FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); - FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); - FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); - FORCE_TRANSMITTER_ROTATES.mirror = true; - setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - SUPPORT_PLATE = new ModelRenderer(this, 65, 12); - SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); - SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); - SUPPORT_PLATE.setTextureSize(128, 128); - SUPPORT_PLATE.mirror = true; - setRotation(SUPPORT_PLATE, 0F, 0F, 0F); - ORNAMENT_1 = new ModelRenderer(this, 86, 0); - ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_1.setRotationPoint(6F, 19F, -5F); - ORNAMENT_1.setTextureSize(128, 128); - ORNAMENT_1.mirror = true; - setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); - ORNAMENT_2 = new ModelRenderer(this, 86, 0); - ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_2.setRotationPoint(4F, 19F, -5F); - ORNAMENT_2.setTextureSize(128, 128); - ORNAMENT_2.mirror = true; - setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); - LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); - LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_1_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); - LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); - LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_2_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - genRender(f5); - } - public void genRender(float f5) - { - BASE.render(f5); - PISTON_WALL_1.render(f5); - PISTON_HEAD_MOVES.render(f5); - PISTON_TURNER_MOVES.render(f5); - PISTON_ARM_MOVES.render(f5); - GEAR_A_NECK.render(f5); - PISTON_WALL_2.render(f5); - PISTON_WALL_3.render(f5); - PISTON_WALL_4.render(f5); - PISTON_SUPPORT_1.render(f5); - PISTON_SUPPORT_2.render(f5); - FORCE_CONDUCTOR_BOX.render(f5); - GEAR_A_TEETH_1_ROTATES.render(f5); - GEAR_A_TEETH_2_ROTATES.render(f5); - GEAR_A_TEETH_3_ROTATES.render(f5); - FORCE_TRANSMITTER_ROTATES.render(f5); - GEAR_B_TEETH_1_ROTATES.render(f5); - GEAR_B_TEETH_2_ROTATES.render(f5); - GEAR_B_TEETH_3_ROTATES.render(f5); - SUPPORT_PLATE.render(f5); - ORNAMENT_1.render(f5); - ORNAMENT_2.render(f5); - LEVER_1_CAN_BE_TURNED.render(f5); - LEVER_2_CAN_BE_TURNED.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/1.2.5/eui/turbine/GUIGenerator.java b/1.2.5/eui/turbine/GUIGenerator.java deleted file mode 100644 index c5bbdc67..00000000 --- a/1.2.5/eui/turbine/GUIGenerator.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.minecraft.src.eui.turbine; - -import org.lwjgl.opengl.GL11; -import java.math.*; -import java.lang.Integer; -import net.minecraft.src.*; -import net.minecraft.src.universalelectricity.UniversalElectricity; - - public class GUIGenerator extends GuiContainer - { - private TileEntityGenerator tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) - { - super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - if(tileEntity.connectedElectricUnit == null) - { - displayText = "Not Connected"; - } - else if(tileEntity.generateRate*20 <= 0) - { - if(tileEntity.steamStored> 0) - { - displayText = "Power Full"; - } - if(tileEntity.steamStored<= 0) - { - displayText = "No Steam"; - } - } - else if(tileEntity.generateRate*20 < 20) - { - displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); - } - displayText2 = "water" + "-" + tileEntity.waterStored; - displayText3 = "steam" + "-" + tileEntity.steamStored; - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture("/eui/SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } diff --git a/1.2.5/eui/turbine/RenderSteamEngine.java b/1.2.5/eui/turbine/RenderSteamEngine.java deleted file mode 100644 index e827e520..00000000 --- a/1.2.5/eui/turbine/RenderSteamEngine.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.minecraft.src.eui.turbine; - -import org.lwjgl.opengl.GL11; -import net.minecraft.src.*; - -public class RenderSteamEngine extends TileEntitySpecialRenderer -{ - int type = 0; - private EngineSmallModel model; - - public RenderSteamEngine() - { - model = new EngineSmallModel(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName("/eui/tankTexture.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.2.5/eui/turbine/TileEntityGenerator.java b/1.2.5/eui/turbine/TileEntityGenerator.java deleted file mode 100644 index 942f08d7..00000000 --- a/1.2.5/eui/turbine/TileEntityGenerator.java +++ /dev/null @@ -1,329 +0,0 @@ -package net.minecraft.src.eui.turbine; -import net.minecraft.src.eui.TileEntityMachine; -import net.minecraft.src.eui.api.*; -import net.minecraft.src.forge.ForgeHooks; -import net.minecraft.src.*; -import net.minecraft.src.pipes.api.ILiquidConsumer; -import net.minecraft.src.pipes.api.ILiquidProducer; -import net.minecraft.src.universalelectricity.*; -import net.minecraft.src.universalelectricity.electricity.ElectricityManager; -import net.minecraft.src.universalelectricity.electricity.IElectricUnit; -import net.minecraft.src.universalelectricity.extend.BlockConductor; -import net.minecraft.src.universalelectricity.extend.TileEntityConductor; -import net.minecraft.src.forge.ISidedInventory; - -public class TileEntityGenerator extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory -{ - //Maximum possible generation rate of watts in SECONDS - public int maxGenerateRate = 1000; - public int waterStored = 0; - public int steamStored = 0; - public int steamConsumed = 0; - //Current generation rate based on hull heat. In TICKS. - public float generateRate = 0; - //public TileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int itemCookTime = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - public TileEntityConductor connectedElectricUnit = null; - @Override - public boolean canConnect(byte side) - { - return true; - } - - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void onUpdate(float watts, float voltage, byte side) - { if(!this.worldObj.isRemote) - { - super.onUpdate(watts, voltage, side); - - //Check nearby blocks and see if the conductor is full. If so, then it is connected - TileEntity tileEntity = UniversalElectricity.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), UniversalElectricity.getOrientationFromSide((byte)this.getBlockMetadata(), (byte)3)); - - if(tileEntity instanceof TileEntityConductor) - { - if(ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) - { - this.connectedElectricUnit = (TileEntityConductor)tileEntity; - } - else - { - this.connectedElectricUnit = null; - } - } - else - { - this.connectedElectricUnit = null; - } - - - if(!this.isDisabled()) - { - //Adds time to runTime by consuming steam - if(this.itemCookTime <= 0) - { - if(steamStored > 0) - { - --steamStored; - ++steamConsumed; - if(steamConsumed == mod_EUIndustry.steamOutBoiler) - { - ++waterStored; - steamConsumed = 0; - } - itemCookTime += 65; - } - } - - //Empties water from tank to buckets - if (this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) - { - if(this.waterStored > 0) - { - this.containingItems[0] = new ItemStack(Item.bucketWater,1); - --waterStored; - } - } - } - - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - - if(this.connectedElectricUnit != null) - { - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.001+0.0015, 0.05F), this.maxGenerateRate/20); - } - } - - if(this.connectedElectricUnit == null || this.itemCookTime <= 0) - { - this.generateRate = (float)Math.max(this.generateRate-0.05, 0); - } - - if(this.generateRate > 1) - { - ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); - } - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); - this.steamStored = par1NBTTagCompound.getInteger("steamStored"); - this.generateRate = par1NBTTagCompound.getFloat("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); - par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); - par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(int side) - { - if (side == 0) - { - return 1; - } - if (side == 1) - { - return 0; - } - return 2; - } - @Override - public int getSizeInventorySide(int side) { return getSizeInventory(); } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - - @Override - public int onProduceLiquid(int type, int maxVol, int side) { - if(type == 1) - { - if(this.waterStored > 0) - { - --waterStored; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, byte side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int onReceiveLiquid(int type, int vol, byte side) { - if(type == 0) - { - int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type, byte side) { - if(type == 0) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type == 0) - { - return 100; - } - return 0; - } -} diff --git a/1.2.5/mod_EUIndustry.java b/1.2.5/mod_EUIndustry.java deleted file mode 100644 index d9613c49..00000000 --- a/1.2.5/mod_EUIndustry.java +++ /dev/null @@ -1,90 +0,0 @@ -package net.minecraft.src; -import net.minecraft.client.Minecraft; -import net.minecraft.src.basiccomponents.BasicComponents; -import net.minecraft.src.eui.*; -import net.minecraft.src.eui.boiler.RenderBoiler; -import net.minecraft.src.eui.boiler.TileEntityBoiler; -import net.minecraft.src.eui.burner.RenderFurnace; -import net.minecraft.src.eui.burner.TileEntityFireBox; -import net.minecraft.src.eui.turbine.EngineSmallModel; -import net.minecraft.src.eui.turbine.RenderSteamEngine; -import net.minecraft.src.eui.turbine.TileEntityGenerator; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.*; - -import java.util.ArrayList; -import java.util.Map; -import java.io.*; -public class mod_EUIndustry extends NetworkMod { - static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); - private static int BlockID= configurationProperties(); - public static int genOutput; - public static int steamOutBoiler; - public static int pipeLoss; - public static int boilerHeat; - public static int fireOutput; - public static Block machine = new net.minecraft.src.eui.BlockMachine(BlockID).setBlockName("machine"); - @Override - public String getVersion() { - // TODO change version on each update ;/ - return "0.0.7"; - } - public static int configurationProperties() - { - config.load(); - BlockID = Integer.parseInt(config.getOrCreateIntProperty("Machines", Configuration.CATEGORY_BLOCK, 129).value); - genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWatts", Configuration.CATEGORY_GENERAL, 1000).value); - steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutBoiler", Configuration.CATEGORY_GENERAL, 10).value); - boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJ", Configuration.CATEGORY_GENERAL, 4500).value); - fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJ", Configuration.CATEGORY_GENERAL,50).value); - config.save(); - return BlockID; - } - @Override - public void modsLoaded() - { - UniversalElectricity.registerAddon(this, "0.4.5"); - } - @Override - public void load() { - //register - ModLoader.registerBlock(machine, net.minecraft.src.eui.ItemMachine.class); - MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); - MinecraftForgeClient.preloadTexture("/eui/Items.png"); - //TileEntities.................................. - ModLoader.registerTileEntity(net.minecraft.src.eui.boiler.TileEntityBoiler.class, "boiler", new RenderBoiler()); - ModLoader.registerTileEntity(net.minecraft.src.eui.burner.TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ModLoader.registerTileEntity(net.minecraft.src.eui.turbine.TileEntityGenerator.class, "generator", new RenderSteamEngine()); - ModLoader.registerTileEntity(net.minecraft.src.eui.TileEntityNuller.class, "EUNuller"); - //Names............... - ModLoader.addName((new ItemStack(machine, 1, 1)), "Boiler"); - ModLoader.addName((new ItemStack(machine, 1, 2)), "FireBox"); - ModLoader.addName((new ItemStack(machine, 1, 3)), "SteamGen"); - ModLoader.addName((new ItemStack(machine, 1, 15)), "EUVampire"); - //Crafting -/** - * case 0: return new TileEntityGrinder(); <-Removed - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 3: return new TileEntityGenerator(); - case 14: return new TileEntityCondenser();<-Removed - case 15: return new TileEntityNuller();<-Just for testing Not craftable - */ - ModLoader.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(mod_BasicPipes.parts, 1,5), - '@',new ItemStack(BasicComponents.ItemSteelPlate), - 'O',new ItemStack(mod_BasicPipes.parts, 1,1), - 'V',new ItemStack(mod_BasicPipes.parts, 1,6)}); - ModLoader.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", - 'F',Block.stoneOvenIdle, - '@',new ItemStack(BasicComponents.ItemSteelPlate)}); - ModLoader.addRecipe(new ItemStack(machine, 1, 3), new Object [] {"@T@", "PMP", "@T@", - 'T',new ItemStack(mod_BasicPipes.parts, 1,0), - '@',new ItemStack(BasicComponents.ItemSteelPlate), - 'P',Block.pistonBase, - 'M',new ItemStack(BasicComponents.ItemMotor)}); - - } - - -} diff --git a/1.2.5/mod_automation.java b/1.2.5/mod_automation.java deleted file mode 100644 index 26708ecb..00000000 --- a/1.2.5/mod_automation.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.minecraft.src; -import net.minecraft.client.Minecraft; -import net.minecraft.src.basiccomponents.BasicComponents; -import net.minecraft.src.eui.*; -import net.minecraft.src.eui.robotics.ModelModelShoeBot; -import net.minecraft.src.eui.robotics.RenderShoeBot; -import net.minecraft.src.forge.*; -import net.minecraft.src.universalelectricity.*; - -import java.util.ArrayList; -import java.util.Map; -import java.io.*; -public class mod_automation extends NetworkMod { - static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); - public static int spawnItemId = configurationProperties(); - public static Item spawnItem = (new net.minecraft.src.eui.robotics.ItemSpawn(spawnItemId)).setItemName("Bot"); - private static int BlockID = 3454; - public static Block machine = new net.minecraft.src.eui.robotics.BlockComp(BlockID).setBlockName("machine"); - @Override - public String getVersion() { - // TODO change version on each update ;/ - return "0.0.1"; - } - public static int configurationProperties() - { - config.load(); - spawnItemId = Integer.parseInt(config.getOrCreateIntProperty("BotItem", Configuration.CATEGORY_ITEM, 31356).value); - config.save(); - return spawnItemId; - } - @Override - public void load() { - MinecraftForgeClient.preloadTexture("/eui/Blocks.png"); - MinecraftForgeClient.preloadTexture("/eui/Items.png"); - //register - UniversalElectricity.registerAddon(this, "0.4.5"); - ModLoader.registerBlock(machine, net.minecraft.src.eui.robotics.ItemMachine.class); - //names................................................ - ModLoader.addName((new ItemStack(spawnItem, 1, 0)), "Bot"); - ModLoader.addName((new ItemStack(machine, 1, 0)), "Controller"); - //TileEntities.................................. - ModLoader.registerTileEntity(net.minecraft.src.eui.robotics.TileEntityComp.class, "controller"); - //Entities................... - ModLoader.registerEntityID(net.minecraft.src.eui.robotics.EntityShoeBot.class, "Bot", 101);//collector - - } - @Override - public void addRenderer(Map map) - { - map.put(net.minecraft.src.eui.robotics.EntityShoeBot.class, new RenderShoeBot()); - } - - -} diff --git a/README.md b/README.md deleted file mode 100644 index d3e3f890..00000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Dark-sIndustry -============== - -My Version of the leading Industry minecraft mods using the UE electricty API \ No newline at end of file diff --git a/src/common/BasicPipes/BasicPipesMain.java b/src/common/BasicPipes/BasicPipesMain.java new file mode 100644 index 00000000..e1af2706 --- /dev/null +++ b/src/common/BasicPipes/BasicPipesMain.java @@ -0,0 +1,125 @@ +package BasicPipes; +import java.io.File; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraftforge.common.Configuration; +import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.network.PacketManager; +import BasicPipes.pipes.BlockPipe; +import BasicPipes.pipes.BlockPump; +import BasicPipes.pipes.ItemGuage; +import BasicPipes.pipes.ItemParts; +import BasicPipes.pipes.ItemPipe; +import BasicPipes.pipes.TileEntityPump; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.Mod.PostInit; +import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.SidedProxy; +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 = "basicPipes", name = "Basic Pipes", version = "V4") +@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) + +public class BasicPipesMain{ + @Instance + public static BasicPipesMain instance; + + @SidedProxy(clientSide = "BasicPipes.PipeClientProxy", serverSide = "BasicPipes.PipeProxy") + public static PipeProxy proxy; + static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/BasicPipes.cfg"))); + public static int pipeID = configurationProperties(); + private static int partID; + private static int ppipeID; + private static int machineID; + public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); + public static Block machine = new BlockPump(machineID).setBlockName("pump"); + public static Item parts = new ItemParts(partID); + public static Item itemPipes = new ItemPipe(ppipeID); + public static Item gauge = new ItemGuage(ppipeID+1); + + public static String channel = "Pipes"; + + public static int configurationProperties() + { + config.load(); + pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); + machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); + partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); + ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); + config.save(); + return pipeID; + } + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + proxy.preInit(); + GameRegistry.registerBlock(pipe); + GameRegistry.registerBlock(machine); + } + @Init + public void load(FMLInitializationEvent evt) + { + //register + proxy.init(); + GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + //Names + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "guage"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 6)), "MethainPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 7)), "BioFuelPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 8)), "coolentPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 9)), "NukeWastePipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 10)), "Pipe"); + LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); + LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); + //crafting parts + } + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + proxy.postInit(); + GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube + GameRegistry.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@',Item.ingotIron});//iron tube + GameRegistry.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@@", '@',Block.obsidian});//obby Tube + GameRegistry.addRecipe(new ItemStack(parts, 2,3), new Object[] { "N@N", 'N',Block.netherrack,'@',new ItemStack(parts, 2,2)});//nether tube + GameRegistry.addRecipe(new ItemStack(parts, 2,4), new Object[] { "@@","@@", '@',Item.leather});//seal + GameRegistry.addShapelessRecipe(new ItemStack(parts, 1,5), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Item.slimeBall, 1)});//stick seal + GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank + GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve + //crafting pipes + //{"black", "red", "green", "brown", "blue", "purple", "cyan", + //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; + //steam + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,4)}); + //water + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); + //lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,1)}); + //oil + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); + //fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + + } + +} diff --git a/src/common/BasicPipes/PipeProxy.java b/src/common/BasicPipes/PipeProxy.java new file mode 100644 index 00000000..5cf81c84 --- /dev/null +++ b/src/common/BasicPipes/PipeProxy.java @@ -0,0 +1,54 @@ +package BasicPipes; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import BasicPipes.pipes.TileEntityPipe; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; + +public class PipeProxy implements IGuiHandler +{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); + } + 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; + } +} diff --git a/src/common/BasicPipes/TradeHelper.java b/src/common/BasicPipes/TradeHelper.java new file mode 100644 index 00000000..9ce2e266 --- /dev/null +++ b/src/common/BasicPipes/TradeHelper.java @@ -0,0 +1,173 @@ +package BasicPipes; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import BasicPipes.pipes.api.ILiquidConsumer; +import SteamPower.TileEntityMachine; +import SteamPower.boiler.TileEntityBoiler; + +public class TradeHelper { +/** + * + * @param entity - entity at center of search + * @return an Array containing found entities and nulls of nonEntities + */ + public static TileEntity[] getSourounding(TileEntity entity) + { + TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; + for(int i =0; i< 6;i++) + { + int x = entity.xCoord; + int y = entity.yCoord; + int z = entity.zCoord; + + switch(i) + { + case 0: y = y - 1;break;//down + case 1: y = y + 1;break;//up + case 2: z = z + 1;break;//north + case 3: z = z - 1;break;//south + case 4: x = x + 1;break;//east + case 5: x = x - 1;break;//west + } + TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntity) + { + list[i] = aEntity; + } + } + return list; + } + /** + * + * @param blockEntity - tile entity trading the liquid + * @param type - liquid type see chart for info + * @param rise - does the liquid rise up like a gas + * @return the remaining untraded liquid + */ + public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) + { + TileEntity[] connectedBlocks = getSourounding(blockEntity); + ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; + int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); + int ammountStored = blockMachine.getStoredLiquid(type); + int tankCount = 1; + boolean bottom = false; + TileEntity firstEntity = null; + TileEntity secondEntity = null; + if(rise) + { + firstEntity = connectedBlocks[1]; + secondEntity = connectedBlocks[0]; + } + else + { + firstEntity = connectedBlocks[0]; + secondEntity = connectedBlocks[1]; + } + //checks wether or not the block bellow it is a tank to move liquid too + if(firstEntity instanceof TileEntityBoiler) + { + int bWater = ((TileEntityBoiler) firstEntity).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) firstEntity).getLiquidCapacity(1); + //checks if that tank has room to get liquid. + + if(bWater < bMax) + { + int emptyVol = Math.max( bMax - bWater,0); + int tradeVol = Math.min(emptyVol, ammountStored); + int rejected = ((TileEntityBoiler) firstEntity).onReceiveLiquid(1, tradeVol, ForgeDirection.getOrientation(1)); + ammountStored = ammountStored + rejected - tradeVol; + wSum -= tradeVol; + } + else + { + bottom = true; + } + } + else + { + //there was no tank bellow this tank + bottom = true; + } + //if this is the bottom tank or bottom tank is full. Update average water ammount. + if(bottom) + { + //get average water around center tank + for(int i = 2; i<6;i++) + { + TileEntity entityA = connectedBlocks[i]; + if(entityA instanceof TileEntityBoiler) + { + //if is a tank add to the sum + wSum += ((TileEntityBoiler) entityA).getStoredLiquid(1); + tankCount += 1; + } + } + } + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + for(int i = 2; i<6;i++) + { + int average = wSum / tankCount;// takes the sum and makes it an average + int tradeSum = 0; + TileEntity entity = connectedBlocks[i]; + if(entity instanceof TileEntityBoiler) + { + int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); + if(targetW < average) + { + tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank + int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back + ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade + } + } + } + if(secondEntity instanceof TileEntityBoiler) + { + int bWater = ((TileEntityBoiler) secondEntity).getStoredLiquid(1); + int bMax = ((TileEntityBoiler) secondEntity).getLiquidCapacity(1); + if(bottom && ammountStored > 0) + { + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, ammountStored); + int rejectedS = ((TileEntityBoiler) secondEntity).addSteam(tradeVolS); + ammountStored =rejectedS + ammountStored - tradeVolS; + wSum -= tradeVolS; + } + } + } + return ammountStored; + } + /** + * + * @param entity - entity in question + * @return 1-4 if corner 0 if not a corner + * you have to figure out which is which depending on what your using this for + * 1 should be north east 2 south east + */ + public static int corner(TileEntity entity) + { + TileEntity[] en = getSourounding(entity); + if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) + { + return 1; + } + if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) + { + return 2; + } + if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) + { + return 3; + } + if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) + { + return 4; + } + + return 0; + + } +} diff --git a/src/common/BasicPipes/pipes/BlockPipe.java b/src/common/BasicPipes/pipes/BlockPipe.java new file mode 100644 index 00000000..6d670a30 --- /dev/null +++ b/src/common/BasicPipes/pipes/BlockPipe.java @@ -0,0 +1,146 @@ +package BasicPipes.pipes; + +import java.util.Random; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; + +public class BlockPipe extends BlockContainer +{ + + public BlockPipe(int id) + { + super(id, Material.iron); + this.setBlockName("Pipe"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return 0; + } + //Per tick + public int conductorCapacity() + { + return 5; + } + + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + this.updateConductorTileEntity(world, x, y, z); + } + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) + { + switch(side) + { + case 0: y -= 1; break; + case 1: y += 1; break; + case 2: z += 1; break; + case 3: z -= 1; break; + case 4: x += 1; break; + case 5: x -= 1; break; + } + + //Check if the designated block is a UE Unit - producer, consumer or a conductor + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity returnValue = null; + + if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,ForgeDirection.getOrientation(side))) + { + returnValue = tileEntity; + } + } + + if (tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(type,ForgeDirection.getOrientation(side))) + { + returnValue = tileEntity; + } + } + + return returnValue; + } + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + this.updateConductorTileEntity(world, x, y, z); + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); + } + @Override + public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) + { + return true; + } + public static void updateConductorTileEntity(World world, int x, int y, int z) + { + + for(byte i = 0; i < 6; i++) + { + //Update the tile entity on neighboring blocks + TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); + int type = conductorTileEntity.getType(); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i));; + } + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return new TileEntityPipe(); + } + } + + diff --git a/src/common/BasicPipes/pipes/BlockPump.java b/src/common/BasicPipes/pipes/BlockPump.java new file mode 100644 index 00000000..a5c2680a --- /dev/null +++ b/src/common/BasicPipes/pipes/BlockPump.java @@ -0,0 +1,155 @@ +package BasicPipes.pipes; + +import java.util.ArrayList; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockPump extends BlockContainer +{ + + public BlockPump(int id) + { + super(id, Material.iron); + this.setBlockName("Pump"); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + @Override + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); + + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + + + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + return 0; + + + } + @Override + public int getBlockTextureFromSideAndMetadata(int side, int metadata) + { + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + else + { + //If it is the front side + if(side == 3) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + //If it is the back side + else if(side == 2) + { + switch(metadata) + { + case 0: return this.blockIndexInTexture + 2; + case 1: return this.blockIndexInTexture + 3; + case 2: return this.blockIndexInTexture + 2; + } + } + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + } + return 0; + } + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * 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; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/blocks.png"; + } + //Per tick + public int conductorCapacity() + { + return 10; + } + 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 + switch(meta) + { + case 0: return new TileEntityPump(); + } + return null; + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return null; + } + } + + diff --git a/src/common/BasicPipes/pipes/ItemGuage.java b/src/common/BasicPipes/pipes/ItemGuage.java new file mode 100644 index 00000000..0e932049 --- /dev/null +++ b/src/common/BasicPipes/pipes/ItemGuage.java @@ -0,0 +1,78 @@ +package BasicPipes.pipes; + +import java.util.ArrayList; +import net.minecraft.src.*; + +public class ItemGuage extends Item +{ + private int spawnID; + + public ItemGuage(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("guage"); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 11; + } + return this.iconIndex; + } + @Override + public String getItemName() + { + return "guage"; + } + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + { + + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int steam = pipeEntity.getStoredLiquid(0); + int type = pipeEntity.getType(); + String typeName = getType(type); + par2EntityPlayer.addChatMessage(typeName +" " + steam); + return true; + } + + + + + return false; + } + public String getType(int type) + { + switch(type) + { + case 0: return "Steam"; + case 1: return "Water"; + case 2: return "Lava"; + case 3: return "Oil"; + case 4: return "Fuel"; + case 5: return "Air"; + default: return "unknow"; + } + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "PipeGuage"; + } + return this.getItemName(); + } + @Override + public String getTextureFile() { + return "/eui/Items.png"; + } + +} diff --git a/src/common/BasicPipes/pipes/ItemParts.java b/src/common/BasicPipes/pipes/ItemParts.java new file mode 100644 index 00000000..da871ae6 --- /dev/null +++ b/src/common/BasicPipes/pipes/ItemParts.java @@ -0,0 +1,58 @@ +package BasicPipes.pipes; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; + +public class ItemParts extends Item{ + String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; + int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + this.setTabToDisplayOn(CreativeTabs.tabMaterials); + } + @Override + public int getIconFromDamage(int par1) + { + if(par1 < iconID.length) + { + return iconID[par1]; + } + return par1; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return names[itemstack.getItemDamage()]; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < names.length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return "/EUIClient/Textures/Items.png"; + } + @Override + public String getItemName() + { + return "parts"; + } +} + + + + + + diff --git a/src/common/BasicPipes/pipes/ItemPipe.java b/src/common/BasicPipes/pipes/ItemPipe.java new file mode 100644 index 00000000..f6bbb4b8 --- /dev/null +++ b/src/common/BasicPipes/pipes/ItemPipe.java @@ -0,0 +1,128 @@ +package BasicPipes.pipes; + +import java.util.List; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import BasicPipes.BasicPipesMain; + +public class ItemPipe extends Item +{ + int index = 32;//32 + 4 rows alloted to pipes + String[] names = new String[]{"Steam","Water","Lava","Oil","Fuel","Air","Methain","BioFuel","coolent","NukeWaste"}; + private int spawnID; + + public ItemPipe(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("pipe"); + this.setTabToDisplayOn(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() < names.length ? names[itemstack.getItemDamage()] +" Pipe2" : "EmptyPipe"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < names.length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return "/EUIClient/Textures/Items.png"; + } + @Override + public String getItemName() + { + return "Pipes"; + } + @Override + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.pipeID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int dm = par1ItemStack.getItemDamage(); + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + +} \ No newline at end of file diff --git a/src/common/BasicPipes/pipes/TileEntityCondenser.java b/src/common/BasicPipes/pipes/TileEntityCondenser.java new file mode 100644 index 00000000..81710298 --- /dev/null +++ b/src/common/BasicPipes/pipes/TileEntityCondenser.java @@ -0,0 +1,98 @@ +package BasicPipes.pipes; + +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.extend.IElectricUnit; +import BasicPipes.pipes.api.ILiquidProducer; + +public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricUnit { + int tickCount = 0; + int waterStored = 0; + int energyStored = 0; + @Override + public int onProduceLiquid(int type,int maxVol, ForgeDirection side) { + if(type == 1) + { + int tradeW = Math.min(maxVol, waterStored); + waterStored -= tradeW; + return tradeW; + } + return 0; + } + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + } + + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.energyStored = par1NBTTagCompound.getInteger("energyStored"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + } + public void updateEntity() + { + if(energyStored > 100 && tickCount > 200 && waterStored < 10) + { + energyStored -= 100; + waterStored += 1; + tickCount = 0; + } + tickCount++; + } + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + @Override + public void onUpdate(float amps, float voltage, ForgeDirection side) { + // TODO Auto-generated method stub + + } + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + @Override + public boolean canConnect(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public float getVoltage() { + // TODO Auto-generated method stub + return 0; + } + @Override + public int getTickInterval() { + // TODO Auto-generated method stub + return 0; + } + + + + +} diff --git a/src/common/BasicPipes/pipes/TileEntityPipe.java b/src/common/BasicPipes/pipes/TileEntityPipe.java new file mode 100644 index 00000000..7e60ed93 --- /dev/null +++ b/src/common/BasicPipes/pipes/TileEntityPipe.java @@ -0,0 +1,267 @@ +package BasicPipes.pipes; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.Vector3; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import BasicPipes.BasicPipesMain; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; + +import com.google.common.io.ByteArrayDataInput; +public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver +{ + //The amount stored in the conductor + protected int liquidStored = 0; + //the current set type of the pipe 0-5 + protected int type = 0; + //The maximum amount of electricity this conductor can take + protected int capacity = 5; + private int count = 0; + private boolean intiUpdate = true; + //Stores information on all connected blocks around this tile entity + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + + //Checks if this is the first the tile entity updates + protected boolean firstUpdate = true; + /** + * This function adds a connection between this pipe and other blocks + * @param tileEntity - Must be either a producer, consumer or a conductor + * @param side - side in which the connection is coming from + */ + public void addConnection(TileEntity tileEntity, ForgeDirection side) + { + int sideN = getNumSide(side); + this.connectedBlocks[sideN] = null; + if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) + { + this.connectedBlocks[sideN] = tileEntity; + } + } + if(tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) + { + this.connectedBlocks[sideN] = tileEntity; + } + } + } + + + + private int getNumSide(ForgeDirection side) { + +if(side == ForgeDirection.DOWN) +{ + return 0; +} +if(side == ForgeDirection.UP) +{ + return 1; +} +if(side == ForgeDirection.NORTH) +{ + return 2; +} +if(side == ForgeDirection.SOUTH) +{ + return 3; +} +if(side == ForgeDirection.WEST) +{ + return 4; +} +if(side == ForgeDirection.EAST) +{ + return 5; +} + + + return 0; + } + + + + /** + * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). + * @param vols - The amount of vol source is trying to give to this pipe + * @param side - The side of the block in which the liquid came from + * @return vol - The amount of rejected liquid that can't enter the pipe + */ + @Override + public int onReceiveLiquid(int type,int vol, ForgeDirection side) + { + if(type == this.type) + { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); + this.liquidStored += vol - rejectedVolume; + return rejectedVolume; + } + return vol; + } + @Override + public void updateEntity() + { + //cause the block to update itself every tick needs to be change to .5 seconds to reduce load + ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + count++; + if(count >= 30 || intiUpdate) + { + PacketManager.sendTileEntityPacket(this, BasicPipesMain.channel, new Object[]{this.type}); + count = 0; + intiUpdate = false; + } + if(!this.worldObj.isRemote) + { + byte connectedUnits = 0; + byte connectedConductors = 1; + int averageVolume = this.liquidStored; + + Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); + + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + { + connectedUnits ++; + + if(connectedBlocks[i] instanceof TileEntityPipe) + { + averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + + connectedConductors ++; + } + } + } + } + //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty + averageVolume = Math.max(averageVolume/connectedConductors,0); + if(connectedUnits > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the liquid among the different blocks + if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) + { + if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) + { + int transferVolumeAmount = 0; //amount to be moved + ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); + + if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) + { + transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); + } + else if(!(connectedConsumer instanceof TileEntityPipe)) + { + transferVolumeAmount = this.liquidStored; + } + + int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); + } + } + + if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) + { + if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) + { + int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, ForgeDirection.getOrientation(i)); + this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); + } + } + } + } + } + } + } + + /** + * @return Return the stored volume in this pipe. + */ + @Override + public int getStoredLiquid(int type) + { + return this.liquidStored; + } + + + @Override + public int getLiquidCapacity(int type) + { + return 5; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = par1NBTTagCompound.getInteger("type"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type); + } +//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + if(type == this.type) + { + return true; + } + return false; + } + //returns liquid type + public int getType() { + return this.type; + } + + //used by the item to set the liquid type on spawn + public void setType(int rType) { + this.type = rType; + + } + + + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + try + { + int type = data.readInt(); + if(worldObj.isRemote) + { + this.type = type; + } + } + catch(Exception e) + { + e.printStackTrace(); + } + + + } + +} + diff --git a/src/common/BasicPipes/pipes/TileEntityPump.java b/src/common/BasicPipes/pipes/TileEntityPump.java new file mode 100644 index 00000000..0d843865 --- /dev/null +++ b/src/common/BasicPipes/pipes/TileEntityPump.java @@ -0,0 +1,89 @@ +package BasicPipes.pipes; + +import net.minecraft.src.Block; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.electricity.TileEntityElectricUnit; +import universalelectricity.extend.IElectricUnit; +import BasicPipes.pipes.api.ILiquidProducer; + +public class TileEntityPump extends TileEntityElectricUnit implements ILiquidProducer,IElectricUnit { + int dCount = 0; + float eStored = 0; + float eMax = 2000; + int wStored = 0; + int wMax = 10; + @Override + public void onDisable(int duration) { + dCount = duration; + } + + @Override + public boolean isDisabled() { + if(dCount <= 0) + { + return false; + } + return true; + } + + @Override + public void onUpdate(float watts, float voltage, ForgeDirection side) { + super.onUpdate(watts, voltage, side); + if (electricityRequest() > 0 && canConnect(side)) + { + float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); + this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); + } + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + if(bBlock == Block.waterStill.blockID && this.eStored > 1000 && this.wStored < this.wMax) + { + eStored -= 1000; + wStored += 1; + worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + } + + } + + @Override + public float electricityRequest() { + return Math.max(eMax - eStored,0); + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + if(side != ForgeDirection.DOWN) + { + return true; + } + return false; + } + + @Override + public float getVoltage() { + return 240; + } + + @Override + public int getTickInterval() { + return 40; + } + + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 1 && wStored > 0) + { + int tradeW = Math.min(maxVol, wStored); + wStored -= tradeW; + return tradeW; + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1 && side != ForgeDirection.DOWN) + { + return true; + } + return false; + } +} diff --git a/src/common/BasicPipes/pipes/api/ILiquidConsumer.java b/src/common/BasicPipes/pipes/api/ILiquidConsumer.java new file mode 100644 index 00000000..8189772b --- /dev/null +++ b/src/common/BasicPipes/pipes/api/ILiquidConsumer.java @@ -0,0 +1,35 @@ +package BasicPipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + + +public interface ILiquidConsumer +{ + /** + * onRecieveLiquid + * @param vol - The amount this block received. + * @param side - The side of the block in which the liquid came from. + * @parm type - The type of liquid being received + * @return vol - The amount liquid that can't be recieved + */ + public int onReceiveLiquid(int type, int vol, ForgeDirection side); + + /** + * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics + * @param forgeDirection - The side in which the electricity is coming from. + * @parm type - The type of liquid + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection); + + /** + * @return Return the stored liquid of type in this consumer. + */ + public int getStoredLiquid(int type); + + /** + * @return Return the maximum amount of stored liquid this consumer can get. + */ + public int getLiquidCapacity(int type); + +} diff --git a/src/common/BasicPipes/pipes/api/ILiquidProducer.java b/src/common/BasicPipes/pipes/api/ILiquidProducer.java new file mode 100644 index 00000000..764b1a20 --- /dev/null +++ b/src/common/BasicPipes/pipes/api/ILiquidProducer.java @@ -0,0 +1,30 @@ +package BasicPipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface ILiquidProducer +{ + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param maxvol - The maximum vol or requested volume + * @param side - The side + * @return vol - Return a vol of liquid type that is produced + */ + public int onProduceLiquid(int type, int maxVol, ForgeDirection side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canProduceLiquid(int type, ForgeDirection side); +} \ No newline at end of file diff --git a/1.3/common/SteamPower/BlockMachine.java b/src/common/SteamPower/BlockMachine.java similarity index 100% rename from 1.3/common/SteamPower/BlockMachine.java rename to src/common/SteamPower/BlockMachine.java diff --git a/1.3/common/SteamPower/ItemCoalFuel.java b/src/common/SteamPower/ItemCoalFuel.java similarity index 100% rename from 1.3/common/SteamPower/ItemCoalFuel.java rename to src/common/SteamPower/ItemCoalFuel.java diff --git a/1.3/common/SteamPower/ItemMachine.java b/src/common/SteamPower/ItemMachine.java similarity index 100% rename from 1.3/common/SteamPower/ItemMachine.java rename to src/common/SteamPower/ItemMachine.java diff --git a/1.3/common/SteamPower/ItemParts.java b/src/common/SteamPower/ItemParts.java similarity index 100% rename from 1.3/common/SteamPower/ItemParts.java rename to src/common/SteamPower/ItemParts.java diff --git a/1.3/common/SteamPower/SteamPowerMain.java b/src/common/SteamPower/SteamPowerMain.java similarity index 100% rename from 1.3/common/SteamPower/SteamPowerMain.java rename to src/common/SteamPower/SteamPowerMain.java diff --git a/1.3/common/SteamPower/SteamProxy.java b/src/common/SteamPower/SteamProxy.java similarity index 100% rename from 1.3/common/SteamPower/SteamProxy.java rename to src/common/SteamPower/SteamProxy.java diff --git a/1.3/common/SteamPower/TileEntityMachine.java b/src/common/SteamPower/TileEntityMachine.java similarity index 100% rename from 1.3/common/SteamPower/TileEntityMachine.java rename to src/common/SteamPower/TileEntityMachine.java diff --git a/1.3/common/SteamPower/TileEntityNuller.java b/src/common/SteamPower/TileEntityNuller.java similarity index 100% rename from 1.3/common/SteamPower/TileEntityNuller.java rename to src/common/SteamPower/TileEntityNuller.java diff --git a/1.3/common/SteamPower/ap/IHeatConsumer.java b/src/common/SteamPower/ap/IHeatConsumer.java similarity index 100% rename from 1.3/common/SteamPower/ap/IHeatConsumer.java rename to src/common/SteamPower/ap/IHeatConsumer.java diff --git a/1.3/common/SteamPower/ap/IHeatProducer.java b/src/common/SteamPower/ap/IHeatProducer.java similarity index 100% rename from 1.3/common/SteamPower/ap/IHeatProducer.java rename to src/common/SteamPower/ap/IHeatProducer.java diff --git a/1.3/common/SteamPower/boiler/ContainerBoiler.java b/src/common/SteamPower/boiler/ContainerBoiler.java similarity index 100% rename from 1.3/common/SteamPower/boiler/ContainerBoiler.java rename to src/common/SteamPower/boiler/ContainerBoiler.java diff --git a/1.3/common/SteamPower/boiler/TileEntityBoiler.java b/src/common/SteamPower/boiler/TileEntityBoiler.java similarity index 100% rename from 1.3/common/SteamPower/boiler/TileEntityBoiler.java rename to src/common/SteamPower/boiler/TileEntityBoiler.java diff --git a/1.3/common/SteamPower/burner/ContainerFireBox.java b/src/common/SteamPower/burner/ContainerFireBox.java similarity index 100% rename from 1.3/common/SteamPower/burner/ContainerFireBox.java rename to src/common/SteamPower/burner/ContainerFireBox.java diff --git a/1.3/common/SteamPower/burner/TileEntityFireBox.java b/src/common/SteamPower/burner/TileEntityFireBox.java similarity index 100% rename from 1.3/common/SteamPower/burner/TileEntityFireBox.java rename to src/common/SteamPower/burner/TileEntityFireBox.java diff --git a/1.3/common/SteamPower/turbine/BlockEngine.java b/src/common/SteamPower/turbine/BlockEngine.java similarity index 100% rename from 1.3/common/SteamPower/turbine/BlockEngine.java rename to src/common/SteamPower/turbine/BlockEngine.java diff --git a/1.3/common/SteamPower/turbine/ContainerGenerator.java b/src/common/SteamPower/turbine/ContainerGenerator.java similarity index 100% rename from 1.3/common/SteamPower/turbine/ContainerGenerator.java rename to src/common/SteamPower/turbine/ContainerGenerator.java diff --git a/1.3/common/SteamPower/turbine/ItemEngine.java b/src/common/SteamPower/turbine/ItemEngine.java similarity index 100% rename from 1.3/common/SteamPower/turbine/ItemEngine.java rename to src/common/SteamPower/turbine/ItemEngine.java diff --git a/1.3/common/SteamPower/turbine/TileEntityGenerator.java b/src/common/SteamPower/turbine/TileEntityGenerator.java similarity index 100% rename from 1.3/common/SteamPower/turbine/TileEntityGenerator.java rename to src/common/SteamPower/turbine/TileEntityGenerator.java diff --git a/1.3/common/SteamPower/turbine/TileEntitytopGen.java b/src/common/SteamPower/turbine/TileEntitytopGen.java similarity index 100% rename from 1.3/common/SteamPower/turbine/TileEntitytopGen.java rename to src/common/SteamPower/turbine/TileEntitytopGen.java diff --git a/src/minecraft/BasicPipes/ModelPipe.java b/src/minecraft/BasicPipes/ModelPipe.java new file mode 100644 index 00000000..f36a5199 --- /dev/null +++ b/src/minecraft/BasicPipes/ModelPipe.java @@ -0,0 +1,98 @@ +package BasicPipes; + +import net.minecraft.src.*; + +public class ModelPipe extends ModelBase +{ + //fields + ModelRenderer Middle; + ModelRenderer Right; + ModelRenderer Left; + ModelRenderer Back; + ModelRenderer Front; + ModelRenderer Top; + ModelRenderer Bottom; + + public ModelPipe() + { + textureWidth = 64; + textureHeight = 32; + + Middle = new ModelRenderer(this, 0, 0); + Middle.addBox(-1F, -1F, -1F, 4, 4, 4); + Middle.setRotationPoint(-1F, 15F, -1F); + Middle.setTextureSize(64, 32); + Middle.mirror = true; + setRotation(Middle, 0F, 0F, 0F); + Right = new ModelRenderer(this, 21, 0); + Right.addBox(0F, 0F, 0F, 6, 4, 4); + Right.setRotationPoint(2F, 14F, -2F); + Right.setTextureSize(64, 32); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + Left = new ModelRenderer(this, 21, 0); + Left.addBox(0F, 0F, 0F, 6, 4, 4); + Left.setRotationPoint(-8F, 14F, -2F); + Left.setTextureSize(64, 32); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + Back = new ModelRenderer(this, 0, 11); + Back.addBox(0F, 0F, 0F, 4, 4, 6); + Back.setRotationPoint(-2F, 14F, 2F); + Back.setTextureSize(64, 32); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + Front = new ModelRenderer(this, 0, 11); + Front.addBox(0F, 0F, 0F, 4, 4, 6); + Front.setRotationPoint(-2F, 14F, -8F); + Front.setTextureSize(64, 32); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + Top = new ModelRenderer(this, 21, 11); + Top.addBox(0F, 0F, 0F, 4, 6, 4); + Top.setRotationPoint(-2F, 8F, -2F); + Top.setTextureSize(64, 32); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Bottom = new ModelRenderer(this, 21, 11); + Bottom.addBox(0F, 0F, 0F, 4, 6, 4); + Bottom.setRotationPoint(-2F, 18F, -2F); + Bottom.setTextureSize(64, 32); + Bottom.mirror = true; + setRotation(Bottom, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() { Middle.render(0.0625F); } + public void renderBottom() { Bottom.render(0.0625F); } + public void renderTop() { Top.render(0.0625F); } + public void renderLeft() { Left.render(0.0625F); } + public void renderRight() { Right.render(0.0625F); } + public void renderBack() { Back.render(0.0625F); } + public void renderFront() { Front.render(0.0625F);} + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/BasicPipes/PipeClientProxy.java b/src/minecraft/BasicPipes/PipeClientProxy.java new file mode 100644 index 00000000..509b14c0 --- /dev/null +++ b/src/minecraft/BasicPipes/PipeClientProxy.java @@ -0,0 +1,22 @@ +package BasicPipes; + +import net.minecraftforge.client.MinecraftForgeClient; +import BasicPipes.pipes.TileEntityPipe; +import cpw.mods.fml.client.registry.ClientRegistry; + +public class PipeClientProxy extends PipeProxy +{ + @Override + public void preInit() + { + //Preload textures + MinecraftForgeClient.preloadTexture("/EUIClient/Textures/Items.png"); + MinecraftForgeClient.preloadTexture("/EUIClient/Textures/blocks.png"); + } + + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); + } +} diff --git a/src/minecraft/BasicPipes/RenderPipe.java b/src/minecraft/BasicPipes/RenderPipe.java new file mode 100644 index 00000000..759fad5f --- /dev/null +++ b/src/minecraft/BasicPipes/RenderPipe.java @@ -0,0 +1,57 @@ +package BasicPipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import BasicPipes.pipes.TileEntityPipe; + +public class RenderPipe extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelPipe model; + + public RenderPipe() + { + model = new ModelPipe(); + } + + public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) + { + //Texture file + + type = tileEntity.getType(); + switch(type) + { + case 0: bindTextureByName("/EUIClient/Textures/SteamPipe.png");break; + case 1: bindTextureByName("/EUIClient/Textures/WaterPipe.png");break; + //case 2: bindTextureByName("/eui/lavaPipe.png");break; + //case 3: bindTextureByName("/eui/oilPipe.png");break; + //case 4: bindTextureByName("/eui/fuelPipe.png");break; + //case 5: bindTextureByName("/eui/airPipe.png");break; + default:bindTextureByName("/EUIClient/Textures/DefaultPipe.png"); break; + } + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) model.renderTop(); + if(tileEntity.connectedBlocks[2] != null) model.renderFront(); + if(tileEntity.connectedBlocks[3] != null) model.renderBack(); + if(tileEntity.connectedBlocks[4] != null) model.renderRight(); + if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); + + model.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/1.3/minecraft/EUIClient/Textures/BoilerGui.png b/src/minecraft/EUIClient/Textures/BoilerGui.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/BoilerGui.png rename to src/minecraft/EUIClient/Textures/BoilerGui.png diff --git a/1.3/minecraft/EUIClient/Textures/CopperWire.png b/src/minecraft/EUIClient/Textures/CopperWire.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/CopperWire.png rename to src/minecraft/EUIClient/Textures/CopperWire.png diff --git a/1.3/minecraft/EUIClient/Textures/CornerTank.png b/src/minecraft/EUIClient/Textures/CornerTank.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/CornerTank.png rename to src/minecraft/EUIClient/Textures/CornerTank.png diff --git a/1.3/minecraft/EUIClient/Textures/DefaultPipe.png b/src/minecraft/EUIClient/Textures/DefaultPipe.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/DefaultPipe.png rename to src/minecraft/EUIClient/Textures/DefaultPipe.png diff --git a/1.3/minecraft/EUIClient/Textures/Engine.png b/src/minecraft/EUIClient/Textures/Engine.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/Engine.png rename to src/minecraft/EUIClient/Textures/Engine.png diff --git a/1.3/minecraft/EUIClient/Textures/Furnace.png b/src/minecraft/EUIClient/Textures/Furnace.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/Furnace.png rename to src/minecraft/EUIClient/Textures/Furnace.png diff --git a/1.3/minecraft/EUIClient/Textures/GrinderGUI.png b/src/minecraft/EUIClient/Textures/GrinderGUI.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/GrinderGUI.png rename to src/minecraft/EUIClient/Textures/GrinderGUI.png diff --git a/1.3/minecraft/EUIClient/Textures/Items.png b/src/minecraft/EUIClient/Textures/Items.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/Items.png rename to src/minecraft/EUIClient/Textures/Items.png diff --git a/1.3/minecraft/EUIClient/Textures/SteamGUI.png b/src/minecraft/EUIClient/Textures/SteamGUI.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/SteamGUI.png rename to src/minecraft/EUIClient/Textures/SteamGUI.png diff --git a/1.3/minecraft/EUIClient/Textures/SteamPipe.png b/src/minecraft/EUIClient/Textures/SteamPipe.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/SteamPipe.png rename to src/minecraft/EUIClient/Textures/SteamPipe.png diff --git a/1.3/minecraft/EUIClient/Textures/WaterPipe.png b/src/minecraft/EUIClient/Textures/WaterPipe.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/WaterPipe.png rename to src/minecraft/EUIClient/Textures/WaterPipe.png diff --git a/1.3/minecraft/EUIClient/Textures/blocks.png b/src/minecraft/EUIClient/Textures/blocks.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/blocks.png rename to src/minecraft/EUIClient/Textures/blocks.png diff --git a/1.3/minecraft/EUIClient/Textures/tankBlock.png b/src/minecraft/EUIClient/Textures/tankBlock.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/tankBlock.png rename to src/minecraft/EUIClient/Textures/tankBlock.png diff --git a/1.3/minecraft/EUIClient/Textures/tankTexture.png b/src/minecraft/EUIClient/Textures/tankTexture.png similarity index 100% rename from 1.3/minecraft/EUIClient/Textures/tankTexture.png rename to src/minecraft/EUIClient/Textures/tankTexture.png diff --git a/1.3/minecraft/SteamPower/GUIFireBox.java b/src/minecraft/SteamPower/GUIFireBox.java similarity index 100% rename from 1.3/minecraft/SteamPower/GUIFireBox.java rename to src/minecraft/SteamPower/GUIFireBox.java diff --git a/1.3/minecraft/SteamPower/GUIGenerator.java b/src/minecraft/SteamPower/GUIGenerator.java similarity index 100% rename from 1.3/minecraft/SteamPower/GUIGenerator.java rename to src/minecraft/SteamPower/GUIGenerator.java diff --git a/1.3/minecraft/SteamPower/GuiBoiler.java b/src/minecraft/SteamPower/GuiBoiler.java similarity index 100% rename from 1.3/minecraft/SteamPower/GuiBoiler.java rename to src/minecraft/SteamPower/GuiBoiler.java diff --git a/1.3/minecraft/SteamPower/ModelCenterTank.java b/src/minecraft/SteamPower/ModelCenterTank.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelCenterTank.java rename to src/minecraft/SteamPower/ModelCenterTank.java diff --git a/1.3/minecraft/SteamPower/ModelCornerTank.java b/src/minecraft/SteamPower/ModelCornerTank.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelCornerTank.java rename to src/minecraft/SteamPower/ModelCornerTank.java diff --git a/1.3/minecraft/SteamPower/ModelEngine.java b/src/minecraft/SteamPower/ModelEngine.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelEngine.java rename to src/minecraft/SteamPower/ModelEngine.java diff --git a/1.3/minecraft/SteamPower/ModelFurnace.java b/src/minecraft/SteamPower/ModelFurnace.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelFurnace.java rename to src/minecraft/SteamPower/ModelFurnace.java diff --git a/1.3/minecraft/SteamPower/ModelTank.java b/src/minecraft/SteamPower/ModelTank.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelTank.java rename to src/minecraft/SteamPower/ModelTank.java diff --git a/1.3/minecraft/SteamPower/ModelToyEngine.java b/src/minecraft/SteamPower/ModelToyEngine.java similarity index 100% rename from 1.3/minecraft/SteamPower/ModelToyEngine.java rename to src/minecraft/SteamPower/ModelToyEngine.java diff --git a/1.3/minecraft/SteamPower/RenderBoiler.java b/src/minecraft/SteamPower/RenderBoiler.java similarity index 100% rename from 1.3/minecraft/SteamPower/RenderBoiler.java rename to src/minecraft/SteamPower/RenderBoiler.java diff --git a/1.3/minecraft/SteamPower/RenderFurnace.java b/src/minecraft/SteamPower/RenderFurnace.java similarity index 100% rename from 1.3/minecraft/SteamPower/RenderFurnace.java rename to src/minecraft/SteamPower/RenderFurnace.java diff --git a/1.3/minecraft/SteamPower/RenderSteamEngine.java b/src/minecraft/SteamPower/RenderSteamEngine.java similarity index 100% rename from 1.3/minecraft/SteamPower/RenderSteamEngine.java rename to src/minecraft/SteamPower/RenderSteamEngine.java diff --git a/1.3/minecraft/SteamPower/RenderToyEngine.java b/src/minecraft/SteamPower/RenderToyEngine.java similarity index 100% rename from 1.3/minecraft/SteamPower/RenderToyEngine.java rename to src/minecraft/SteamPower/RenderToyEngine.java diff --git a/1.3/minecraft/SteamPower/SteamClientProxy.java b/src/minecraft/SteamPower/SteamClientProxy.java similarity index 100% rename from 1.3/minecraft/SteamPower/SteamClientProxy.java rename to src/minecraft/SteamPower/SteamClientProxy.java diff --git a/textures/SteamPipe.png b/textures/SteamPipe.png deleted file mode 100644 index a3dc6a0d5ff727efa5de7de40d8e017924649a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3013 zcmV;$3p(_PP)|D^_ww@lRz|vCuzLs)$;-`! zo*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!& zC1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2hoGcOF60t^# zFqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTXa!E_i;d2ub z1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqKG_|(0G&D0Z z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl z*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY_n(^h55xYX z#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^bXThc7C4-yr zInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qjZ=)yBuQ3=5 z4Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK%>{;v(b^`kb zN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<)0>40zCTJ7v z2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01)S~6}jY?%U? zgEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j*2tcg9i<^O zEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfK zTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761jmyXF)a;mc z^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQqHZJR2&bcD4 z9Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^TY0bZ?)4%0 z1p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK8LKk71XR(_ zRKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS<&CX#T35dw zS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@qL5!WvekBL z-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW%ue3U;av{9 z4wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#o zSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%oZ=0JGnu?n~ z9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8No_-(u{qS+0 z<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-UsyQuty7Ua; zOu?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimkUAw*F_TX^n z@STz9kDQ$NC=!KfXWC z8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgUAAWQEt$#LR zcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6?<+s(e(3(_ z^YOu_)K8!O1p}D#{JO;G(*OVf24YJ`L;(K){{a7>y{D4^000SaNLh0L01mpFr}$Y=`s}fR$ZlCn}Mhw4MJ1v0)cM{Rc=wgzF5rF zX3=Dqp-1iNTXSd|q-~H0AOeU0B7g{x)0buM6*LHu1ct{QLwSE7Q$csl00000NkvXX Hu0mjfxJIJr diff --git a/textures/WaterPipe.png b/textures/WaterPipe.png deleted file mode 100644 index eab6d097647a27f9ef1692c48cb3b6c63a02d15f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3192 zcmV-;42ScHP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 Br;Y#s diff --git a/textures/fuelPipe.png b/textures/fuelPipe.png deleted file mode 100644 index 38b79d5f26806249c955fbff60c71d277172f792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3021 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 P00000NkvXXu0mjfat^GO diff --git a/textures/lavaPipe.png b/textures/lavaPipe.png deleted file mode 100644 index df10a3a963c548b920da2566d1f57f335a71cc93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3023 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 LNkvXXu0mjf#_*}m From 93d020863c3a515d097b63c25ce1c0259781e396 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 19:37:32 -0400 Subject: [PATCH 052/115] Clean up and bugs fixes --- src/common/BasicPipes/TradeHelper.java | 73 ++-- src/common/SteamPower/BlockMachine.java | 10 +- src/common/SteamPower/ItemCoalFuel.java | 59 --- src/common/SteamPower/ItemMachine.java | 18 +- src/common/SteamPower/ItemParts.java | 2 +- src/common/SteamPower/SteamPowerMain.java | 12 +- src/common/SteamPower/SteamProxy.java | 11 +- src/common/SteamPower/TileEntityMachine.java | 7 +- src/common/SteamPower/TileEntityNuller.java | 2 +- .../SteamPower/boiler/TileEntityBoiler.java | 166 +++---- .../SteamPower/burner/TileEntityFireBox.java | 2 +- .../SteamPower/turbine/BlockEngine.java | 185 -------- .../turbine/ContainerGenerator.java | 4 +- src/common/SteamPower/turbine/ItemEngine.java | 25 +- .../turbine/TileEntityGenerator.java | 405 ------------------ .../SteamPower/turbine/TileEntitytopGen.java | 6 +- .../EUIClient/Textures/CornerTank.png | Bin 2686 -> 2658 bytes src/minecraft/EUIClient/Textures/Items.png | Bin 29993 -> 30321 bytes src/minecraft/SteamPower/GUIGenerator.java | 6 +- .../SteamPower/RenderSteamEngine.java | 6 +- .../SteamPower/SteamClientProxy.java | 6 +- 21 files changed, 155 insertions(+), 850 deletions(-) delete mode 100644 src/common/SteamPower/ItemCoalFuel.java delete mode 100644 src/common/SteamPower/turbine/BlockEngine.java delete mode 100644 src/common/SteamPower/turbine/TileEntityGenerator.java diff --git a/src/common/BasicPipes/TradeHelper.java b/src/common/BasicPipes/TradeHelper.java index 9ce2e266..cc39cf00 100644 --- a/src/common/BasicPipes/TradeHelper.java +++ b/src/common/BasicPipes/TradeHelper.java @@ -3,8 +3,6 @@ package BasicPipes; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import BasicPipes.pipes.api.ILiquidConsumer; -import SteamPower.TileEntityMachine; -import SteamPower.boiler.TileEntityBoiler; public class TradeHelper { /** @@ -39,7 +37,7 @@ public class TradeHelper { return list; } /** - * + * Only works for steam Power's boiler. Still needs recode to work for all things * @param blockEntity - tile entity trading the liquid * @param type - liquid type see chart for info * @param rise - does the liquid rise up like a gas @@ -66,17 +64,18 @@ public class TradeHelper { secondEntity = connectedBlocks[1]; } //checks wether or not the block bellow it is a tank to move liquid too - if(firstEntity instanceof TileEntityBoiler) + if(firstEntity instanceof ILiquidConsumer) { - int bWater = ((TileEntityBoiler) firstEntity).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) firstEntity).getLiquidCapacity(1); + int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); //checks if that tank has room to get liquid. if(bWater < bMax) { + int tradeVol = 0; int emptyVol = Math.max( bMax - bWater,0); - int tradeVol = Math.min(emptyVol, ammountStored); - int rejected = ((TileEntityBoiler) firstEntity).onReceiveLiquid(1, tradeVol, ForgeDirection.getOrientation(1)); + tradeVol = Math.min(emptyVol, ammountStored); + int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); ammountStored = ammountStored + rejected - tradeVol; wSum -= tradeVol; } @@ -97,45 +96,47 @@ public class TradeHelper { for(int i = 2; i<6;i++) { TileEntity entityA = connectedBlocks[i]; - if(entityA instanceof TileEntityBoiler) + if(entityA instanceof ILiquidConsumer) { //if is a tank add to the sum - wSum += ((TileEntityBoiler) entityA).getStoredLiquid(1); + wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); tankCount += 1; } } - } - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - for(int i = 2; i<6;i++) - { - int average = wSum / tankCount;// takes the sum and makes it an average - int tradeSum = 0; - TileEntity entity = connectedBlocks[i]; - if(entity instanceof TileEntityBoiler) + + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + for(int i = 2; i<6;i++) { - int targetW = ((TileEntityBoiler) entity).getStoredLiquid(1); - if(targetW < average) + int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average + int tradeSum = 0; + TileEntity entity = connectedBlocks[i]; + if(entity instanceof ILiquidConsumer) { - tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank - int rejectedAm = ((TileEntityBoiler) entity).onReceiveLiquid(1, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back - ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade + int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); + if(targetW < average) + { + tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank + int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back + ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade + } } } - } - if(secondEntity instanceof TileEntityBoiler) - { - int bWater = ((TileEntityBoiler) secondEntity).getStoredLiquid(1); - int bMax = ((TileEntityBoiler) secondEntity).getLiquidCapacity(1); - if(bottom && ammountStored > 0) + + if(secondEntity instanceof ILiquidConsumer) { - if(bWater < bMax) + int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); + if(bottom && ammountStored > 0) { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, ammountStored); - int rejectedS = ((TileEntityBoiler) secondEntity).addSteam(tradeVolS); - ammountStored =rejectedS + ammountStored - tradeVolS; - wSum -= tradeVolS; - } + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, ammountStored); + int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; + ammountStored =rejectedS + ammountStored - tradeVolS; + wSum -= tradeVolS; + } + } } } return ammountStored; diff --git a/src/common/SteamPower/BlockMachine.java b/src/common/SteamPower/BlockMachine.java index 61391e62..781e8ea6 100644 --- a/src/common/SteamPower/BlockMachine.java +++ b/src/common/SteamPower/BlockMachine.java @@ -15,7 +15,7 @@ import net.minecraft.src.TileEntity; import net.minecraft.src.World; import SteamPower.boiler.TileEntityBoiler; import SteamPower.burner.TileEntityFireBox; -import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntitySteamPiston; public class BlockMachine extends universalelectricity.extend.BlockMachine { @@ -29,14 +29,6 @@ public class BlockMachine extends universalelectricity.extend.BlockMachine this.setRequiresSelfNotify(); this.setCreativeTab(CreativeTabs.tabBlock); - } - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 1)); - par3List.add(new ItemStack(this, 1, 2)); - par3List.add(new ItemStack(this, 1, 15)); } @Override protected int damageDropped(int metadata) diff --git a/src/common/SteamPower/ItemCoalFuel.java b/src/common/SteamPower/ItemCoalFuel.java deleted file mode 100644 index 19036e6a..00000000 --- a/src/common/SteamPower/ItemCoalFuel.java +++ /dev/null @@ -1,59 +0,0 @@ -package SteamPower; - -import java.util.ArrayList; - -import net.minecraft.src.*; - -public class ItemCoalFuel extends Item -{ - - public ItemCoalFuel(int par1) - { - super(par1); - this.setItemName("CoalDust"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 0; - case 1: return 1; - case 2: return 2; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/Items.png"; - } - public String getItemName() - { - return "CoalDust"; - } - - - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalNuggets"; - case 1: return "CoalPellets"; - case 2: return "CoalDust"; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) { - - itemList.add(new ItemStack(this, 1,0)); - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,2)); - - } -} diff --git a/src/common/SteamPower/ItemMachine.java b/src/common/SteamPower/ItemMachine.java index b25de352..4945da39 100644 --- a/src/common/SteamPower/ItemMachine.java +++ b/src/common/SteamPower/ItemMachine.java @@ -10,6 +10,7 @@ public class ItemMachine extends ItemBlock { super(id); setMaxDamage(0); setHasSubtypes(true); + this.setIconIndex(21); this.setTabToDisplayOn(CreativeTabs.tabBlock); } @Override @@ -18,10 +19,25 @@ public class ItemMachine extends ItemBlock { par3List.add(new ItemStack(this, 1, 1)); par3List.add(new ItemStack(this, 1, 2)); - par3List.add(new ItemStack(this, 1, 3)); par3List.add(new ItemStack(this, 1, 15)); } @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/EUIClient/Textures/Items.png"; + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 1: return 23; + case 2: return 22; + case 15: return 22; + } + return this.iconIndex+par1; + } + @Override public int getMetadata(int metadata) { return metadata; diff --git a/src/common/SteamPower/ItemParts.java b/src/common/SteamPower/ItemParts.java index 4274bf2d..2d759604 100644 --- a/src/common/SteamPower/ItemParts.java +++ b/src/common/SteamPower/ItemParts.java @@ -33,7 +33,7 @@ public class ItemParts extends Item{ @Override public String getTextureFile() { // TODO Auto-generated method stub - return "/eui/Items.png"; + return "/EUIClient/Textures/Items.png"; } public String getItemName() { diff --git a/src/common/SteamPower/SteamPowerMain.java b/src/common/SteamPower/SteamPowerMain.java index d79b7bf6..65134fc9 100644 --- a/src/common/SteamPower/SteamPowerMain.java +++ b/src/common/SteamPower/SteamPowerMain.java @@ -1,7 +1,8 @@ package SteamPower; import java.io.File; -import SteamPower.turbine.BlockEngine; +import SteamPower.turbine.BlockGenerator; +import SteamPower.turbine.BlockSteamPiston; import SteamPower.turbine.ItemEngine; import SteamPower.turbine.TileEntitytopGen; @@ -35,6 +36,7 @@ public class SteamPowerMain{ private static int BlockID= configurationProperties(); public static int EngineItemID; public static int EngineID; + public static int genID; public static int genOutput; public static int steamOutBoiler; public static int pipeLoss; @@ -42,7 +44,8 @@ public class SteamPowerMain{ public static int fireOutput; public static final String channel = "SPpack"; public static Block machine = new BlockMachine(BlockID).setBlockName("machine"); - public static Block engine = new BlockEngine(EngineID).setBlockName("SteamEngien"); + public static Block engine = new BlockSteamPiston(EngineID).setBlockName("SteamEngien"); + public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); @Instance public static SteamPowerMain instance; @@ -55,7 +58,8 @@ public class SteamPowerMain{ config.load(); BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); EngineItemID = Integer.parseInt(config.getOrCreateIntProperty("EngineItem", Configuration.CATEGORY_ITEM, 30308).value); - EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); + EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); + genID = Integer.parseInt(config.getOrCreateIntProperty("ElecGenID", Configuration.CATEGORY_BLOCK, 3032).value); genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); @@ -71,6 +75,7 @@ public class SteamPowerMain{ proxy.preInit(); GameRegistry.registerBlock(machine, ItemMachine.class); GameRegistry.registerBlock(engine); + GameRegistry.registerBlock(gen); } @Init public void load(FMLInitializationEvent evt) @@ -80,6 +85,7 @@ public class SteamPowerMain{ GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); //Names............... LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); + LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); LanguageRegistry.addName((new ItemStack(machine, 1, 15)), "EUVampire"); diff --git a/src/common/SteamPower/SteamProxy.java b/src/common/SteamPower/SteamProxy.java index ca53eb48..b649f4d8 100644 --- a/src/common/SteamPower/SteamProxy.java +++ b/src/common/SteamPower/SteamProxy.java @@ -8,7 +8,8 @@ import SteamPower.boiler.TileEntityBoiler; import SteamPower.burner.ContainerFireBox; import SteamPower.burner.TileEntityFireBox; import SteamPower.turbine.ContainerGenerator; -import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntityGen; +import SteamPower.turbine.TileEntitySteamPiston; import SteamPower.turbine.TileEntitytopGen; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; @@ -23,8 +24,8 @@ public class SteamProxy implements IGuiHandler{ { GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); - GameRegistry.registerTileEntity(TileEntityGenerator.class, "generator"); - + GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); + GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); } public void postInit() @@ -42,7 +43,7 @@ public class SteamProxy implements IGuiHandler{ { case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new GUIGenerator(player.inventory, ((TileEntityGenerator)tileEntity)); + case 2: return new GUIGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); } } @@ -60,7 +61,7 @@ public class SteamProxy implements IGuiHandler{ { case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); case 1: return new ContainerBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new ContainerGenerator(player.inventory, ((TileEntityGenerator)tileEntity)); + case 2: return new ContainerGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); } } diff --git a/src/common/SteamPower/TileEntityMachine.java b/src/common/SteamPower/TileEntityMachine.java index 081562a8..7bbca045 100644 --- a/src/common/SteamPower/TileEntityMachine.java +++ b/src/common/SteamPower/TileEntityMachine.java @@ -16,7 +16,7 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; public int getTickInterval() { - return 10; + return 5; } private int getInvSize() { @@ -128,14 +128,11 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven public void onUpdate(float watts, float voltage, ForgeDirection side) { super.onUpdate(watts, voltage, side); - count++; if(!worldObj.isRemote) { - PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); + PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); } - count = 0; - } diff --git a/src/common/SteamPower/TileEntityNuller.java b/src/common/SteamPower/TileEntityNuller.java index 00c1af36..74a5f572 100644 --- a/src/common/SteamPower/TileEntityNuller.java +++ b/src/common/SteamPower/TileEntityNuller.java @@ -20,7 +20,7 @@ public class TileEntityNuller extends TileEntityMachine implements IElectricUnit } public int getTickInterval() { - return 1; + return 10; } public boolean canConnect(ForgeDirection side) { diff --git a/src/common/SteamPower/boiler/TileEntityBoiler.java b/src/common/SteamPower/boiler/TileEntityBoiler.java index bd70d7f1..f7cf2fda 100644 --- a/src/common/SteamPower/boiler/TileEntityBoiler.java +++ b/src/common/SteamPower/boiler/TileEntityBoiler.java @@ -38,7 +38,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv public int heatMax = 10000; /** The ammount of heat stored */ public int hullHeat = 0; - public int hullHeatMax = 10000; + public int hullHeatMax = 4700; private int heatTick = 0; public int tankCount = 0; private int heatNeeded = SteamPowerMain.boilerHeat; // kilo joules @@ -61,19 +61,20 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv public void handlePacketData(NetworkManager network, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { - try{ - facing = dataStream.readInt(); - RunTime = dataStream.readInt(); - energyStore = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - heatStored = dataStream.readInt(); - hullHeat = dataStream.readInt(); - heatTick = dataStream.readInt(); + try + { + facing = dataStream.readInt(); + RunTime = dataStream.readInt(); + energyStore = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + heatStored = dataStream.readInt(); + hullHeat = dataStream.readInt(); + heatTick = dataStream.readInt(); } catch(Exception e) { - e.printStackTrace(); + e.printStackTrace(); } } @@ -105,19 +106,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); } - - - private boolean getIsHeated() { - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord - 1, this.zCoord); - if(blockEntity instanceof TileEntityFireBox) - { - return true; - } - else - { - return false; - } - } /** * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. @@ -125,23 +113,18 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv @Override public void onUpdate(float watts, float voltage, ForgeDirection side) { - super.onUpdate(watts, voltage, side); - //update connection list + + //update/resets connection list TileEntity[] entityList = TradeHelper.getSourounding(this); tankCount = 0; for(int c = 0; c< 6; c++) { - if(entityList[c] instanceof TileEntityBoiler) { - connectedBlocks[c] = entityList[c]; - if(entityList[c] == connectedBlocks[0] || entityList[c] == connectedBlocks[1]) + connectedBlocks[c] = entityList[c]; + if(c != 0 && c != 1) { - - } - else - { - tankCount++; + tankCount++; } } else @@ -149,89 +132,42 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv connectedBlocks[c] = null; } } - isBeingHeated = getIsHeated(); + + hullHeated = false; + if(hullHeat >= hullHeatMax) + { + hullHeated = true; + } + else + { + if(!worldObj.isRemote) + { + hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); + } + } if(!worldObj.isRemote) { - addWater();//adds water from container slot + emptyBuckets();//adds water from container slot this.waterStored = TradeHelper.shareLiquid(this, 1, false); this.steamStored = TradeHelper.shareLiquid(this, 0, true); - - //changed hullHeat max depending on contents of boiler - if(waterStored > 0) - { - hullHeatMax = 4700; - if(hullHeat > hullHeatMax) - { - hullHeat = 4700; - } - } - else - { - hullHeatMax = 10000; - } - - //Checks if the hull is heated - if(hullHeat >= hullHeatMax) - { - hullHeated = true; - } - else - { - hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); - } - - //checks if heat level hit max - if(hullHeat >= 10000) + if(waterStored > 0 && hullHeated && heatStored > heatNeeded) { - if(heatTick >= 1200) - { - // TODO remove block and set fire - heatTick = 0; - } - else - { - heatTick += 1; - } - } - - - - //hull heated ? (do work) : move on - if(hullHeated) - { - if(heatStored > SteamPowerMain.fireOutput) - { - if(waterStored >= 1){ - if(heatStored >= heatNeeded) - { - heatStored = Math.max(heatStored - heatNeeded, 0); - --waterStored; - steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); - } - } - else - { - heatStored = 0; - } - } + heatStored = Math.max(heatStored - heatNeeded, 0); + --waterStored; + steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); } TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); + this.isBeingHeated = false; if(blockE instanceof TileEntityFireBox) { - if(!hullHeated || waterStored > 0) - { - heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput, 1)), heatMax); - } + this.isBeingHeated = true; + heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); } } + super.onUpdate(watts, voltage, side); } - - public int addSteam(int watt) { - int rejectedElectricity = Math.max((this.steamStored + watt) - steamMax, 0); - this.steamStored += watt - rejectedElectricity; - return rejectedElectricity; - } - private void addWater() { + private void emptyBuckets() + { if (storedItems[0] != null) { if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) @@ -239,18 +175,18 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv if((int)waterStored < getLiquidCapacity(1)) { ++waterStored; - this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); - this.onInventoryChanged(); + this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); + this.onInventoryChanged(); } } } } public int precentHeated() { - int var1; + int var1 = 0; if(hullHeat < 100) { - var1 = (int)(100 *(hullHeat/100)); + var1 = (int)(100 *(hullHeat/hullHeatMax)); } else { @@ -260,11 +196,17 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(0), 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; + } if(type == 1) { - int rejectedElectricity = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); - this.waterStored += vol - rejectedElectricity; - return rejectedElectricity; + int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); + this.waterStored += vol - rejectedWater; + return rejectedWater; } return vol; } diff --git a/src/common/SteamPower/burner/TileEntityFireBox.java b/src/common/SteamPower/burner/TileEntityFireBox.java index 2badf0a5..9d5e914b 100644 --- a/src/common/SteamPower/burner/TileEntityFireBox.java +++ b/src/common/SteamPower/burner/TileEntityFireBox.java @@ -175,7 +175,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } public float onProduceHeat(float jouls, int side) { // TODO Auto-generated method stub - return Math.min(generateRate,jouls); + return Math.min(generateRate*getTickInterval(),jouls); } @Override public Object[] getSendData() diff --git a/src/common/SteamPower/turbine/BlockEngine.java b/src/common/SteamPower/turbine/BlockEngine.java deleted file mode 100644 index 0a1c3d78..00000000 --- a/src/common/SteamPower/turbine/BlockEngine.java +++ /dev/null @@ -1,185 +0,0 @@ -package SteamPower.turbine; - -import java.util.List; -import java.util.Random; - -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 SteamPower.SteamPowerMain; -import SteamPower.TileEntityMachine; - -public class BlockEngine extends universalelectricity.extend.BlockMachine{ - - public BlockEngine(int par1) { - super("SteamEngine", par1, Material.iron); - - } - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(this, 1, 0)); - } - @Override - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - case 4: tileEntity.setDirection(1); break; - } - - return true; - } - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) - { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - } - } - public TileEntity createNewTileEntity(World var1) - { - return null; - } - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntityGenerator) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); - } - if(blockEntity instanceof TileEntitytopGen) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); - } - } - - return true; - } - } - public void breakBlock(World world, int x, int y, int z,int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - if(world.getBlockId(x, y+1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)> 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - else - if(meta > 4) - { - if(world.getBlockId(x, y-1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)< 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return -1; - } - @Override - public TileEntity createNewTileEntity(World world, int metadata) - { - if(metadata < 4) - { - return new TileEntityGenerator(); - } - if(metadata == 14) - { - return new TileEntitytopGen(); - } - if(metadata == 15) - { - return null; - } - return null; - } - public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) - { - int meta = par1World.getBlockMetadata(par2, par3, par4); - boolean var7 = false; - if (meta < 4) - { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - var7 = true; - } - } - else - { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - if (var7) - { - if (!par1World.isRemote) - { - this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); - } - } - } - @Override - public int idDropped(int par1, Random par2Random, int par3) - { - return SteamPowerMain.itemEngine.shiftedIndex; - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3+1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); - } -} diff --git a/src/common/SteamPower/turbine/ContainerGenerator.java b/src/common/SteamPower/turbine/ContainerGenerator.java index d6eb883e..0bc3ceee 100644 --- a/src/common/SteamPower/turbine/ContainerGenerator.java +++ b/src/common/SteamPower/turbine/ContainerGenerator.java @@ -4,9 +4,9 @@ import net.minecraft.src.*; public class ContainerGenerator extends Container { - private TileEntityGenerator tileEntity; + private TileEntitySteamPiston tileEntity; - public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) { this.tileEntity = tileEntity; this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); diff --git a/src/common/SteamPower/turbine/ItemEngine.java b/src/common/SteamPower/turbine/ItemEngine.java index 1385251b..8fe13df8 100644 --- a/src/common/SteamPower/turbine/ItemEngine.java +++ b/src/common/SteamPower/turbine/ItemEngine.java @@ -18,12 +18,19 @@ public class ItemEngine extends Item super(par1); this.maxStackSize = 5; this.setTabToDisplayOn(CreativeTabs.tabBlock); + this.setIconIndex(21); } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { par3List.add(new ItemStack(this, 1, 0)); } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/EUIClient/Textures/Items.png"; + } + @Override public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { if (par3World.isRemote) @@ -33,24 +40,14 @@ public class ItemEngine extends Item Block var11 = SteamPowerMain.engine; int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if(par3World.getBlockId(par4, par5, par6) == var11.blockID && par3World.getBlockMetadata(par4, par5, par6) == 15) - { - par3World.editingBlocks = true; - par3World.setBlockAndMetadataWithUpdate(par4, par5, par6, var11.blockID, 14,true); - par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); - par3World.editingBlocks = false; - } - else - { + if (ePlayer.canPlayerEdit(par4, par5, par6)) - { + { ++par5; - if (var11.canPlaceBlockAt(par3World, par4, par5, par6)) { par3World.editingBlocks = true; - par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, angle); + par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, 1); par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); @@ -60,7 +57,7 @@ public class ItemEngine extends Item return true; } } - } + return false; } } diff --git a/src/common/SteamPower/turbine/TileEntityGenerator.java b/src/common/SteamPower/turbine/TileEntityGenerator.java deleted file mode 100644 index 30fe63d7..00000000 --- a/src/common/SteamPower/turbine/TileEntityGenerator.java +++ /dev/null @@ -1,405 +0,0 @@ -package SteamPower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.Vector3; -import universalelectricity.electricity.ElectricityManager; -import universalelectricity.extend.IElectricUnit; -import universalelectricity.extend.TileEntityConductor; -import universalelectricity.network.IPacketReceiver; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; -import SteamPower.SteamPowerMain; -import SteamPower.TileEntityMachine; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityGenerator extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory -{ - //Maximum possible generation rate of watts in SECONDS - public int maxGenerateRate = 1000; - public int waterStored = 0; - public int steamStored = 0; - public int steamConsumed = 0; - public float position = 0; - public int count = 0; - //Current generation rate based on hull heat. In TICKS. - public float generateRate = 0; - //public TileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int genTime = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - public TileEntityConductor connectedElectricUnit = null; - public boolean isConnected = false; - private boolean posT = true; - @Override - public boolean canConnect(ForgeDirection side) - { - return true; - } - public int getTickInterval() - { - return 10; - - } - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - count++; - float cPercent = (generateRate/10); - int cCount = 1; - if(cPercent > 25f) - { - cCount = 2; - } - if(cPercent > 50f) - { - cCount = 3; - } - if(cPercent > 75f) - { - cCount = 4; - } - if(generateRate > 0) - { - - if(position < 9f && posT ) - { - position+= cCount; - } - else - { - posT = false; - } - if(position > 1f && !posT ) - { - position-= cCount; - } - else - { - posT = true; - } - count =0; - } - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if(ent instanceof TileEntitytopGen) - { - isConnected = true; - } - - this.connectedElectricUnit = null; - //Check nearby blocks and see if the conductor is full. If so, then it is connected - for(int i = 0;i<6;i++) - { - TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), - ForgeDirection.getOrientation(i)); - if (tileEntity instanceof TileEntityConductor) - { - if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) - { - this.connectedElectricUnit = (TileEntityConductor)tileEntity; - } - } - } - - if(!this.worldObj.isRemote) - { - - - if(!this.isDisabled()) - { - //Adds time to runTime by consuming steam - if(this.genTime <= 0) - { - if(steamStored > 0) - { - --steamStored; - ++steamConsumed; - if(steamConsumed >= SteamPowerMain.steamOutBoiler) - { - ++waterStored; - steamConsumed = 0; - } - genTime += 65; - } - } - - //Empties water from tank to buckets - if (this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) - { - if(this.waterStored > 0) - { - this.containingItems[0] = new ItemStack(Item.bucketWater,1); - --waterStored; - } - } - } - - //Starts generating electricity if the device is heated up - if (this.genTime > 0) - { - this.genTime --; - - if(this.connectedElectricUnit != null) - { - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); - } - } - - if(this.connectedElectricUnit == null || this.genTime <= 0) - { - this.generateRate = (float)Math.max(this.generateRate-0.05, 0); - } - - if(this.generateRate > 1) - { - ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); - } - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); - this.steamStored = par1NBTTagCompound.getInteger("steamStored"); - this.generateRate = par1NBTTagCompound.getFloat("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); - par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); - par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(ForgeDirection side) - { - return 0; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { return 0; } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - - @Override - public int onProduceLiquid(int type, int Vol, ForgeDirection side) { - if(type == 1) - { - if(this.waterStored > 0) - { - int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); - this.waterStored += waterStored - rejectedSteam; - return rejectedSteam; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 0) - { - int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - if(type == 0) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type == 0) - { - return 100; - } - return 0; - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - steamConsumed = dataStream.readInt(); - generateRate = dataStream.readFloat(); - genTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} diff --git a/src/common/SteamPower/turbine/TileEntitytopGen.java b/src/common/SteamPower/turbine/TileEntitytopGen.java index aaf15d88..918d3ca3 100644 --- a/src/common/SteamPower/turbine/TileEntitytopGen.java +++ b/src/common/SteamPower/turbine/TileEntitytopGen.java @@ -17,16 +17,16 @@ import BasicPipes.pipes.api.ILiquidProducer; import SteamPower.TileEntityMachine; public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { -public TileEntityGenerator genB = null; +public TileEntitySteamPiston genB = null; public void onUpdate(float watts, float voltage, ForgeDirection side) { if(!this.worldObj.isRemote) { super.onUpdate(watts, voltage, side); TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); - if(ent instanceof TileEntityGenerator) + if(ent instanceof TileEntitySteamPiston) { - genB = (TileEntityGenerator)ent; + genB = (TileEntitySteamPiston)ent; } } } diff --git a/src/minecraft/EUIClient/Textures/CornerTank.png b/src/minecraft/EUIClient/Textures/CornerTank.png index 1477442fc608a221711478243884f7abf6ee93f4..43e1ddefa731bd31873530ed97455fc68aa1b1e2 100644 GIT binary patch delta 2589 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 diff --git a/src/minecraft/EUIClient/Textures/Items.png b/src/minecraft/EUIClient/Textures/Items.png index 2ac4a810f40f2f56bef731001ca478c627d4e8a1..d95d605693ea1a96d168b89631b0714c8e002222 100644 GIT binary patch literal 30321 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 IYZm&y09jKa^#A|> literal 29993 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 EFXfgrNdN!< diff --git a/src/minecraft/SteamPower/GUIGenerator.java b/src/minecraft/SteamPower/GUIGenerator.java index 0c62371e..d0200665 100644 --- a/src/minecraft/SteamPower/GUIGenerator.java +++ b/src/minecraft/SteamPower/GUIGenerator.java @@ -7,16 +7,16 @@ import net.minecraft.src.StatCollector; import org.lwjgl.opengl.GL11; import SteamPower.turbine.ContainerGenerator; -import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntitySteamPiston; public class GUIGenerator extends GuiContainer { - private TileEntityGenerator tileEntity; + private TileEntitySteamPiston tileEntity; private int containerWidth; private int containerHeight; - public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntityGenerator tileEntity) + public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) { super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); this.tileEntity = tileEntity; diff --git a/src/minecraft/SteamPower/RenderSteamEngine.java b/src/minecraft/SteamPower/RenderSteamEngine.java index ce9ffdbb..5fdb2747 100644 --- a/src/minecraft/SteamPower/RenderSteamEngine.java +++ b/src/minecraft/SteamPower/RenderSteamEngine.java @@ -5,7 +5,7 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; -import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntitySteamPiston; public class RenderSteamEngine extends TileEntitySpecialRenderer { @@ -25,8 +25,8 @@ public class RenderSteamEngine extends TileEntitySpecialRenderer GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - float p = ((TileEntityGenerator)tileEntity).position; - boolean cc = ((TileEntityGenerator)tileEntity).isConnected; + float p = ((TileEntitySteamPiston)tileEntity).position; + boolean cc = ((TileEntitySteamPiston)tileEntity).isConnected; int meta = ((TileEntityMachine) tileEntity).getDirection(); switch(meta) { diff --git a/src/minecraft/SteamPower/SteamClientProxy.java b/src/minecraft/SteamPower/SteamClientProxy.java index efc104e9..a514f546 100644 --- a/src/minecraft/SteamPower/SteamClientProxy.java +++ b/src/minecraft/SteamPower/SteamClientProxy.java @@ -5,7 +5,8 @@ import net.minecraft.src.RenderEngine; import net.minecraftforge.client.MinecraftForgeClient; import SteamPower.boiler.TileEntityBoiler; import SteamPower.burner.TileEntityFireBox; -import SteamPower.turbine.TileEntityGenerator; +import SteamPower.turbine.TileEntityGen; +import SteamPower.turbine.TileEntitySteamPiston; import SteamPower.turbine.TileEntitytopGen; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.registry.GameRegistry; @@ -22,7 +23,8 @@ public class SteamClientProxy extends SteamProxy{ { ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntityGenerator.class, "generator", new RenderSteamEngine()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderSteamEngine()); + ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); } public void postInit() { From bac2723c4327c57655ffbeb536f2e92e13930b7a Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 19:37:45 -0400 Subject: [PATCH 053/115] Added the start of a generator block --- .../SteamPower/turbine/BlockGenerator.java | 42 ++ .../SteamPower/turbine/BlockSteamPiston.java | 161 +++++++ .../SteamPower/turbine/TileEntityGen.java | 63 +++ .../turbine/TileEntitySteamPiston.java | 405 ++++++++++++++++++ .../EUIClient/Textures/Generator.png | Bin 0 -> 1423 bytes src/minecraft/SteamPower/ModelGenerator.java | 136 ++++++ src/minecraft/SteamPower/RenderGenerator.java | 29 ++ 7 files changed, 836 insertions(+) create mode 100644 src/common/SteamPower/turbine/BlockGenerator.java create mode 100644 src/common/SteamPower/turbine/BlockSteamPiston.java create mode 100644 src/common/SteamPower/turbine/TileEntityGen.java create mode 100644 src/common/SteamPower/turbine/TileEntitySteamPiston.java create mode 100644 src/minecraft/EUIClient/Textures/Generator.png create mode 100644 src/minecraft/SteamPower/ModelGenerator.java create mode 100644 src/minecraft/SteamPower/RenderGenerator.java diff --git a/src/common/SteamPower/turbine/BlockGenerator.java b/src/common/SteamPower/turbine/BlockGenerator.java new file mode 100644 index 00000000..47e9c385 --- /dev/null +++ b/src/common/SteamPower/turbine/BlockGenerator.java @@ -0,0 +1,42 @@ +package SteamPower.turbine; + +import java.util.ArrayList; + +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 BlockGenerator extends universalelectricity.extend.BlockMachine { + + public BlockGenerator(int id) { + super("Generator", id, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + } + @Override + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,0)); + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + @Override + public TileEntity createNewTileEntity(World world) + { + return new TileEntityGen(); + } +} diff --git a/src/common/SteamPower/turbine/BlockSteamPiston.java b/src/common/SteamPower/turbine/BlockSteamPiston.java new file mode 100644 index 00000000..f30cee94 --- /dev/null +++ b/src/common/SteamPower/turbine/BlockSteamPiston.java @@ -0,0 +1,161 @@ +package SteamPower.turbine; + +import java.util.List; +import java.util.Random; + +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 SteamPower.SteamPowerMain; +import SteamPower.TileEntityMachine; + +public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ + + public BlockSteamPiston(int par1) { + super("SteamEngine", par1, Material.iron); + + } + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntitySteamPiston) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); + } + if(blockEntity instanceof TileEntitytopGen) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); + } + } + return true; + } + } + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + } + } + public TileEntity createNewTileEntity(World var1) + { + return null; + } + public void breakBlock(World world, int x, int y, int z,int par5, int par6) + { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + if(world.getBlockId(x, y+1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)> 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + else + if(meta > 4) + { + if(world.getBlockId(x, y-1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)< 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if(metadata < 4) + { + return new TileEntitySteamPiston(); + } + if(metadata == 14) + { + return new TileEntitytopGen(); + } + return null; + } + public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) + { + int meta = par1World.getBlockMetadata(par2, par3, par4); + boolean var7 = false; + if (meta == 1) + { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + var7 = true; + } + } + else + { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + if (var7) + { + if (!par1World.isRemote) + { + this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); + } + } + } + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return SteamPowerMain.itemEngine.shiftedIndex; + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3+1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); + } +} diff --git a/src/common/SteamPower/turbine/TileEntityGen.java b/src/common/SteamPower/turbine/TileEntityGen.java new file mode 100644 index 00000000..4e5b5da4 --- /dev/null +++ b/src/common/SteamPower/turbine/TileEntityGen.java @@ -0,0 +1,63 @@ +package SteamPower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraftforge.common.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.extend.IElectricUnit; +import universalelectricity.network.IPacketReceiver; +import SteamPower.TileEntityMachine; + +public class TileEntityGen extends TileEntityMachine implements IPacketReceiver,IElectricUnit +{ + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + // TODO Auto-generated method stub + + } + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + if(!worldObj.isRemote) + { + + } + } + + + public float electricityRequest() + { + return 0; + + } + public boolean canConnect(ForgeDirection side) + { + int face = this.facing; + if(side != ForgeDirection.UP && side != ForgeDirection.DOWN) + { + return true; + } + return false; + + } + public boolean canReceiveFromSide(ForgeDirection side) + { + return false; + } + public float getVoltage() + { + return 120; + } + + public int getTickInterval() + { + return 10; + } + +} diff --git a/src/common/SteamPower/turbine/TileEntitySteamPiston.java b/src/common/SteamPower/turbine/TileEntitySteamPiston.java new file mode 100644 index 00000000..a056964e --- /dev/null +++ b/src/common/SteamPower/turbine/TileEntitySteamPiston.java @@ -0,0 +1,405 @@ +package SteamPower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.Vector3; +import universalelectricity.electricity.ElectricityManager; +import universalelectricity.extend.IElectricUnit; +import universalelectricity.extend.TileEntityConductor; +import universalelectricity.network.IPacketReceiver; +import BasicPipes.pipes.api.ILiquidConsumer; +import BasicPipes.pipes.api.ILiquidProducer; +import SteamPower.SteamPowerMain; +import SteamPower.TileEntityMachine; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public int maxGenerateRate = 1000; + public int waterStored = 0; + public int steamStored = 0; + public int steamConsumed = 0; + public float position = 0; + public int count = 0; + //Current generation rate based on hull heat. In TICKS. + public float generateRate = 0; + //public TileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int genTime = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + public TileEntityConductor connectedElectricUnit = null; + public boolean isConnected = false; + private boolean posT = true; + @Override + public boolean canConnect(ForgeDirection side) + { + return true; + } + public int getTickInterval() + { + return 10; + + } + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + count++; + float cPercent = (generateRate/10); + int cCount = 1; + if(cPercent > 25f) + { + cCount = 2; + } + if(cPercent > 50f) + { + cCount = 3; + } + if(cPercent > 75f) + { + cCount = 4; + } + if(generateRate > 0) + { + + if(position < 9f && posT ) + { + position+= cCount; + } + else + { + posT = false; + } + if(position > 1f && !posT ) + { + position-= cCount; + } + else + { + posT = true; + } + count =0; + } + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if(ent instanceof TileEntitytopGen) + { + isConnected = true; + } + + this.connectedElectricUnit = null; + //Check nearby blocks and see if the conductor is full. If so, then it is connected + for(int i = 0;i<6;i++) + { + TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), + ForgeDirection.getOrientation(i)); + if (tileEntity instanceof TileEntityConductor) + { + if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + { + this.connectedElectricUnit = (TileEntityConductor)tileEntity; + } + } + } + + if(!this.worldObj.isRemote) + { + + + if(!this.isDisabled()) + { + //Adds time to runTime by consuming steam + if(this.genTime <= 0) + { + if(steamStored > 0) + { + --steamStored; + ++steamConsumed; + if(steamConsumed >= SteamPowerMain.steamOutBoiler) + { + ++waterStored; + steamConsumed = 0; + } + genTime += 65; + } + } + + //Empties water from tank to buckets + if (this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) + { + if(this.waterStored > 0) + { + this.containingItems[0] = new ItemStack(Item.bucketWater,1); + --waterStored; + } + } + } + + //Starts generating electricity if the device is heated up + if (this.genTime > 0) + { + this.genTime --; + + if(this.connectedElectricUnit != null) + { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); + } + } + + if(this.connectedElectricUnit == null || this.genTime <= 0) + { + this.generateRate = (float)Math.max(this.generateRate-0.05, 0); + } + + if(this.generateRate > 1) + { + ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + } + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); + this.steamStored = par1NBTTagCompound.getInteger("steamStored"); + this.generateRate = par1NBTTagCompound.getFloat("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); + par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); + par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(ForgeDirection side) + { + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { return 0; } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int onProduceLiquid(int type, int Vol, ForgeDirection side) { + if(type == 1) + { + if(this.waterStored > 0) + { + int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); + this.waterStored += waterStored - rejectedSteam; + return rejectedSteam; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type == 0) + { + return 100; + } + return 0; + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + steamConsumed = dataStream.readInt(); + generateRate = dataStream.readFloat(); + genTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/src/minecraft/EUIClient/Textures/Generator.png b/src/minecraft/EUIClient/Textures/Generator.png new file mode 100644 index 0000000000000000000000000000000000000000..3d52662b4363867c2de6b1000143900a1f2fffc5 GIT binary patch literal 1423 zcmZ`(eKgYx82$~}FBC_7<;la~Sh8*NzzJbJ`z z3jGcQ0yZ?Knru9;G>uyND^jluRN~gQc$snlwSRDjd2ES(WP;V=#ty@uFtDp0Uo5a?flVJf)xZxv%#HLsc@V_h_7qT$ zQ1_4YifQ{~)DaghbJs8YMCGhgIae*40&W)z>dG;fh#TJX(?QI&Rj-%1qS-k3s;lF* z{t&(BhIgsEXlQu#!!evyAu_gP*t&{-A#_MK2I0eltT?WSseKrOX90+C@V7;UeNNCT zK~Zj_tJN(TOmygz{UV^ynyl~VQ@UN{B%wdI07jL(Aqgl9gm^M~%`al2wfP&DO2aH) zEd;vNDV|&OP+>IRqXMBES9E%fqt0q=p6ixV$-s3kue^McQS&1?0AyG0qEyfcteZ1w zp{3t8H(eaGO4uFznwkd^MGmSd9;7}emSKaweiM3q6O~>(Kks**e)CtJ3u9`f(b<;h z>gaQ=w8&m%W*ogveO6?zI=j->a#+rv?mQuB*n^UL;3Mu!cDSrlMqsduoX^e#KMSV> zBV+%R^RRhYw4At@aF6hmQXd4*RXnfN-NBZ3Y8d#%%(6;nq~y~bBlV+;#t7UcY^BI^ zm;NFP$x~1~ON-Hfa%oVY%=O%_X@d16YsvZ7o>m?deXkT=f$Hw&+f^X1D98H!Bqo8) z{3N18R&u{I847HmcfG)U8q5F9z->{wvG z$Fyi*RAFgYj^}j{mPlab9QS~Zg26T8VMj7yByBtz38%Y!Q{vX$=PnRDja~c8;!i)%uB?r*?(*~yeN-gw3zB)-}9kt%p#LI(yrm2&- zJrDI=KNWK_48_K_XN}SMgX+yj!5HKCWKg_dxXd4;ud)V+n+XF60_G`68;Y2qg%}th z_AhwCGd_&iXkM|Hp$I?A|JI%S`<2A71G8<`68E-#anETkhIz{su~^(yc&BPN{|^+`uS_=)UVT{nb^~Q%g5tE=WP_*w8tB zBuJ6^(iW7<+W&3!M7C&*IuJAud0t$D_&7DmXgoZhVxwu6!tBaM_*tUyoR3o~NTg4C zaa?Oiwe_0Wz?P)TB9shZvok~R10_@H%{-)vE>^8@3mOMmF>PIi;&%?h<7}}Nr%AW| E28)4(K>z>% literal 0 HcmV?d00001 diff --git a/src/minecraft/SteamPower/ModelGenerator.java b/src/minecraft/SteamPower/ModelGenerator.java new file mode 100644 index 00000000..dc7419a8 --- /dev/null +++ b/src/minecraft/SteamPower/ModelGenerator.java @@ -0,0 +1,136 @@ +// Date: 8/27/2012 3:20:21 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package SteamPower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGenerator extends ModelBase +{ + //fields + ModelRenderer BasePlate; + ModelRenderer LeftConnection; + ModelRenderer RightConnection; + ModelRenderer Mid; + ModelRenderer Mid2; + ModelRenderer front; + ModelRenderer front2; + ModelRenderer front3; + ModelRenderer Mid3; + ModelRenderer FrontConnector; + + public ModelGenerator() + { + textureWidth = 128; + textureHeight = 128; + + BasePlate = new ModelRenderer(this, 0, 0); + BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); + BasePlate.setRotationPoint(0F, 23F, 0F); + BasePlate.setTextureSize(128, 128); + BasePlate.mirror = true; + setRotation(BasePlate, 0F, 0F, 0F); + LeftConnection = new ModelRenderer(this, 0, 112); + LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); + LeftConnection.setRotationPoint(-6F, 16F, 0F); + LeftConnection.setTextureSize(128, 128); + LeftConnection.mirror = true; + setRotation(LeftConnection, 0F, 0F, 0F); + RightConnection = new ModelRenderer(this, 12, 112); + RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); + RightConnection.setRotationPoint(6F, 16F, 0F); + RightConnection.setTextureSize(128, 128); + RightConnection.mirror = true; + setRotation(RightConnection, 0F, 0F, 0F); + Mid = new ModelRenderer(this, 0, 29); + Mid.addBox(-4F, 0F, -6F, 8, 12, 12); + Mid.setRotationPoint(0F, 10F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Mid2 = new ModelRenderer(this, 0, 53); + Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); + Mid2.setRotationPoint(0F, 12F, 0F); + Mid2.setTextureSize(128, 128); + Mid2.mirror = true; + setRotation(Mid2, 0F, 0F, 0F); + front = new ModelRenderer(this, 20, 15); + front.addBox(-2F, -4F, 0F, 4, 8, 1); + front.setRotationPoint(0F, 16F, -7F); + front.setTextureSize(128, 128); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + front2 = new ModelRenderer(this, 0, 24); + front2.addBox(-4F, -2F, 0F, 8, 4, 1); + front2.setRotationPoint(0F, 16F, -7F); + front2.setTextureSize(128, 128); + front2.mirror = true; + setRotation(front2, 0F, 0F, 0F); + front3 = new ModelRenderer(this, 0, 16); + front3.addBox(-3F, -3F, 0F, 6, 6, 1); + front3.setRotationPoint(0F, 16F, -7F); + front3.setTextureSize(128, 128); + front3.mirror = true; + setRotation(front3, 0F, 0F, 0F); + Mid3 = new ModelRenderer(this, 40, 29); + Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); + Mid3.setRotationPoint(0F, 12F, 0F); + Mid3.setTextureSize(128, 128); + Mid3.mirror = true; + setRotation(Mid3, 0F, 0F, 0F); + FrontConnector = new ModelRenderer(this, 0, 120); + FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); + FrontConnector.setRotationPoint(0F, 14F, -6F); + FrontConnector.setTextureSize(128, 128); + FrontConnector.mirror = true; + setRotation(FrontConnector, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + + } + public void RenderMain(float f5) + { + BasePlate.render(f5); + Mid.render(f5); + Mid2.render(f5); + front.render(f5); + front2.render(f5); + front3.render(f5); + Mid3.render(f5); + FrontConnector.render(f5); + } + public void RenderLeft(float f5) + { + LeftConnection.render(f5); + } + public void RenderRight(float f5) + { + RightConnection.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/SteamPower/RenderGenerator.java b/src/minecraft/SteamPower/RenderGenerator.java new file mode 100644 index 00000000..b15b7e82 --- /dev/null +++ b/src/minecraft/SteamPower/RenderGenerator.java @@ -0,0 +1,29 @@ +package SteamPower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderGenerator extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGenerator model; + + public RenderGenerator() + { + model = new ModelGenerator(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.RenderMain(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file From 21afceb5ed5c9fe76328c81033379edc4d641f21 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 20:11:03 -0400 Subject: [PATCH 054/115] Config file fix --- src/common/BasicPipes/BasicPipesMain.java | 2 +- src/common/SteamPower/SteamPowerMain.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/BasicPipes/BasicPipesMain.java b/src/common/BasicPipes/BasicPipesMain.java index e1af2706..898b13d7 100644 --- a/src/common/BasicPipes/BasicPipesMain.java +++ b/src/common/BasicPipes/BasicPipesMain.java @@ -35,7 +35,7 @@ public class BasicPipesMain{ @SidedProxy(clientSide = "BasicPipes.PipeClientProxy", serverSide = "BasicPipes.PipeProxy") public static PipeProxy proxy; - static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/BasicPipes.cfg"))); + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/BasicPipes.cfg"))); public static int pipeID = configurationProperties(); private static int partID; private static int ppipeID; diff --git a/src/common/SteamPower/SteamPowerMain.java b/src/common/SteamPower/SteamPowerMain.java index 65134fc9..b7e38712 100644 --- a/src/common/SteamPower/SteamPowerMain.java +++ b/src/common/SteamPower/SteamPowerMain.java @@ -32,7 +32,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ - static Configuration config = new Configuration((new File(Minecraft.getMinecraftDir(), "config/EUIndustry/SteamPower.cfg"))); + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/SteamPower.cfg"))); private static int BlockID= configurationProperties(); public static int EngineItemID; public static int EngineID; From 45ed6f0d7f3308a0d00f9060baf671ef4d42a601 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 27 Aug 2012 21:26:46 -0400 Subject: [PATCH 055/115] fixed a server side bug not sure why i got a method not found error for this but it looks like its fixed --- src/common/BasicPipes/pipes/TileEntityPipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/BasicPipes/pipes/TileEntityPipe.java b/src/common/BasicPipes/pipes/TileEntityPipe.java index 7e60ed93..cd93001f 100644 --- a/src/common/BasicPipes/pipes/TileEntityPipe.java +++ b/src/common/BasicPipes/pipes/TileEntityPipe.java @@ -109,7 +109,7 @@ if(side == ForgeDirection.EAST) public void updateEntity() { //cause the block to update itself every tick needs to be change to .5 seconds to reduce load - ((BlockPipe)this.getBlockType()).updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); count++; if(count >= 30 || intiUpdate) { From bd35ad9a565fda78a0f5ac6e41446ce574b39ba0 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 08:59:21 -0400 Subject: [PATCH 056/115] Setting up for jenkins --- .gitignore | 2 +- LICENSE.txt | 0 Textures/EUIClient/Textures/BoilerGui.png | Bin 0 -> 1876 bytes Textures/EUIClient/Textures/CopperWire.png | Bin 0 -> 3196 bytes Textures/EUIClient/Textures/CornerTank.png | Bin 0 -> 2658 bytes Textures/EUIClient/Textures/DefaultPipe.png | Bin 0 -> 770 bytes Textures/EUIClient/Textures/Engine.png | Bin 0 -> 2686 bytes Textures/EUIClient/Textures/Furnace.png | Bin 0 -> 2426 bytes Textures/EUIClient/Textures/Generator.png | Bin 0 -> 1423 bytes Textures/EUIClient/Textures/GrinderGUI.png | Bin 0 -> 1284 bytes Textures/EUIClient/Textures/Items.png | Bin 0 -> 30321 bytes Textures/EUIClient/Textures/SteamGUI.png | Bin 0 -> 3762 bytes Textures/EUIClient/Textures/SteamPipe.png | Bin 0 -> 3196 bytes Textures/EUIClient/Textures/WaterPipe.png | Bin 0 -> 3192 bytes Textures/EUIClient/Textures/blocks.png | Bin 0 -> 22475 bytes Textures/EUIClient/Textures/tankBlock.png | Bin 0 -> 2478 bytes Textures/EUIClient/Textures/tankTexture.png | Bin 0 -> 658 bytes modversion.txt | 1 + 18 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 LICENSE.txt create mode 100644 Textures/EUIClient/Textures/BoilerGui.png create mode 100644 Textures/EUIClient/Textures/CopperWire.png create mode 100644 Textures/EUIClient/Textures/CornerTank.png create mode 100644 Textures/EUIClient/Textures/DefaultPipe.png create mode 100644 Textures/EUIClient/Textures/Engine.png create mode 100644 Textures/EUIClient/Textures/Furnace.png create mode 100644 Textures/EUIClient/Textures/Generator.png create mode 100644 Textures/EUIClient/Textures/GrinderGUI.png create mode 100644 Textures/EUIClient/Textures/Items.png create mode 100644 Textures/EUIClient/Textures/SteamGUI.png create mode 100644 Textures/EUIClient/Textures/SteamPipe.png create mode 100644 Textures/EUIClient/Textures/WaterPipe.png create mode 100644 Textures/EUIClient/Textures/blocks.png create mode 100644 Textures/EUIClient/Textures/tankBlock.png create mode 100644 Textures/EUIClient/Textures/tankTexture.png create mode 100644 modversion.txt diff --git a/.gitignore b/.gitignore index 817e35eb..109ec420 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,6 @@ *.ear *.bat *.sh -*.txt *.cfg CHANGELOG LICENSE @@ -20,6 +19,7 @@ LICENSE /src/minecraft/universalelectricity/* /src/minecraft/basiccomponents/* /src/minecraft/buildcraft/* +/src/minecraft/EUIClient/* /src/common/cpw/* /src/common/net/* /src/common/org/* diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..e69de29b diff --git a/Textures/EUIClient/Textures/BoilerGui.png b/Textures/EUIClient/Textures/BoilerGui.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25 GIT binary patch literal 1876 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 ig|t)N0U^=M(bfh2XR}B$G=L!h0000 zLEKQrc?k%KIEKeThM+rCH1*TzltoF{_%W>AiRgjZ(#~wSr!v=;zYM4S<}Y7E@p4h$p z9lh-S3`z@$6LE5@2RKc?AB(jK%Of{HPHnNv%xOD60PH21N9B=o0KnbENnZmtT;iJT z+q~CME2TW`=kX)7Ezc)(hhvps4(}4Rv>pcqp3TkAz2zlyI#QAZxToiIT$!a8cvhRk zzz?h7Gp`m$EXcS)J{zR$CZ#ezF_^mtn!gpJi_4_aP{(g-Yh@e+pqsTVrYhxt%3(v| z)*aK8cWQ!*Ixc{YkU!xY;fY%Qi!q#ui&dK+yD@-l*;8Ko@BB6;d$lK@Y7X-CP{q&>? z=r2J}mGul^z!9PGrWCfPI9t{VW7Fb7}~&XWWpYqYM?X}8O5!i*WahLCUsrF zrqm(>Z^;sLIITp~x5iMCb@oAbM|rwEliB=Xjk_}OclBS6AclcRJRAD=-coz)A4(vE^jRC8e?S1eE3hx4vY2Yg7;=25 z(o}BHKR9^KdY2Rinpkloo^E)*InWF{*lj_WO{lD37~K6rV=@~e6l0pOgtbV!u?Q1>-5{00%2P8#dJk&~O1=UJJ^WVv3^Wu3Gx8aj$x_9X2i;maluaPGJLdbZ zx?LQlSbq0x6aa$#5H|$pBPUdcBdzA|h0@6C>sQ~ep-@j1mhaRQ!C>bqkaE~s0Q;?l zNIF6IobfiCwooX=*bQY83)WUx%zXbgiX|{MasJbb$bzp7<`!k#0rpypTH`ka)*2Fh z2h3omx1G=R9Hbm|+@`b({uK{y6aT8bmU1JjG|x__Xt5}E8QftsrzAURA3kwAxoByV zf7u>C3%vAvyJj}mX*}#CJr!nYZH*xmIqN#>dZbsJYUN4ccJOi9x8J;Tui35TT(t@# zn-?FxbbT&IKnzkO;I?P_^d9^!PnWvR-Algzc{5sF5fb;o@O_0(OwY>|9==%p?JG6Y z9jFAO^onILfnenS!_UTnS`qAARcAih+VFFU+pj=DQ#k92j&zi5Pii$Ay0l$uG+k@rZ6`-*<>WNzmTs>5cZL0*Fi~2n_L592l%HBr`Em-c#)Y(!Q3K<99U=OF)511H3LTI1(|d%^8Oy>&0`zqruTZ z%X^aW$4n^us@(y0{460?ys+jvm@c$Fo~4l$2p6^JqJ=EjLdy6egRWX1J~u6!a$Zr09R)0IRICs@&5(;LkccS z53m1fSYGQlDOi(=X5ThcX=f1jJb1(##> z#8o%1LF^izMSC=3JWo*?E3pS5qoAu?Tk)dGFec)T_fg+je0TISc7`skMG@gTVu(#N zj*$1bcm*s0<#hf9o43EX`oSu0qS8&d@ObY5E|!?a;f_ zVii|%1@yrx1?fj`=p4N-Py`AirypG#1T!_(C+4x1khknB- zp4y8ZZSJy)3wZ=6W?x_HC~cYHEec#T>*)@?Q+F+%`MZ9kCte)^KN_0i&-*8w6Nc;4 z@>!AMn3kyCu~M6-S`bPC#mrbZl^TxE?}z;$kwWV|O>M^m0pOn0uud%{0Gxpuo_ z+SI;jYD!;UCyGiH)ur+>EO&w7N+8~V4CSP9nkqfy8o)CE{}{h9JN7tKo!^4+M$jBo z6Qjdg3sPux>F8IM=bfyZyl}gH;k7zo%ZJeB4Ev{8AbZ~i$FLQ|L;jZx`(Mbo<#oO# zj~^{|VD}&5T6IS6Sh3b!ZSfv`9C@AEgQUHvS)I&o6jeoLZFo-33hm3-B`lEwrA0t&Ign6slkY@yKnEDmOHZ1L=$V7-#;d^+#J-g|N*ujS!VIF0*d{Hu&r-P*umg^kY69GGgEH41Etn^?e^|Y)_ zkQ_R=vO7p*QhTc(X=@WLiX0pq%zOR%aE$N93&!4jQO3C`Dk-UF9Vt|YK$Zum{UqCg zZk|5>N8w%mQ0nhlVVvns@t2kQOlsK~@z)q<6PqF;$+^;07P9<+$xO&$c-ePjB_HpP yKaEZgH-ei)7Jg2hhkoyQ)t$!Q=*RyPo)|RBpyi`Ze0G&AfWR@F3$_MBO!^PoNA-UI literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/DefaultPipe.png b/Textures/EUIClient/Textures/DefaultPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..05cb6ff1ead8095fba54f0530b3febf09e3f333f GIT binary patch literal 770 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 O65!_K7<;la~Sh8*NzzJbJ`z z3jGcQ0yZ?Knru9;G>uyND^jluRN~gQc$snlwSRDjd2ES(WP;V=#ty@uFtDp0Uo5a?flVJf)xZxv%#HLsc@V_h_7qT$ zQ1_4YifQ{~)DaghbJs8YMCGhgIae*40&W)z>dG;fh#TJX(?QI&Rj-%1qS-k3s;lF* z{t&(BhIgsEXlQu#!!evyAu_gP*t&{-A#_MK2I0eltT?WSseKrOX90+C@V7;UeNNCT zK~Zj_tJN(TOmygz{UV^ynyl~VQ@UN{B%wdI07jL(Aqgl9gm^M~%`al2wfP&DO2aH) zEd;vNDV|&OP+>IRqXMBES9E%fqt0q=p6ixV$-s3kue^McQS&1?0AyG0qEyfcteZ1w zp{3t8H(eaGO4uFznwkd^MGmSd9;7}emSKaweiM3q6O~>(Kks**e)CtJ3u9`f(b<;h z>gaQ=w8&m%W*ogveO6?zI=j->a#+rv?mQuB*n^UL;3Mu!cDSrlMqsduoX^e#KMSV> zBV+%R^RRhYw4At@aF6hmQXd4*RXnfN-NBZ3Y8d#%%(6;nq~y~bBlV+;#t7UcY^BI^ zm;NFP$x~1~ON-Hfa%oVY%=O%_X@d16YsvZ7o>m?deXkT=f$Hw&+f^X1D98H!Bqo8) z{3N18R&u{I847HmcfG)U8q5F9z->{wvG z$Fyi*RAFgYj^}j{mPlab9QS~Zg26T8VMj7yByBtz38%Y!Q{vX$=PnRDja~c8;!i)%uB?r*?(*~yeN-gw3zB)-}9kt%p#LI(yrm2&- zJrDI=KNWK_48_K_XN}SMgX+yj!5HKCWKg_dxXd4;ud)V+n+XF60_G`68;Y2qg%}th z_AhwCGd_&iXkM|Hp$I?A|JI%S`<2A71G8<`68E-#anETkhIz{su~^(yc&BPN{|^+`uS_=)UVT{nb^~Q%g5tE=WP_*w8tB zBuJ6^(iW7<+W&3!M7C&*IuJAud0t$D_&7DmXgoZhVxwu6!tBaM_*tUyoR3o~NTg4C zaa?Oiwe_0Wz?P)TB9shZvok~R10_@H%{-)vE>^8@3mOMmF>PIi;&%?h<7}}Nr%AW| E28)4(K>z>% literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/GrinderGUI.png b/Textures/EUIClient/Textures/GrinderGUI.png new file mode 100644 index 0000000000000000000000000000000000000000..498818ae1f6e4a365c24187fcaefdc6ffe170970 GIT binary patch literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn`1yx4R3& ze-K=-cll(X2xoyuWHAE+-$4*&+%YlxEl`lX#M9T6{SK=HlQ~o8i^)w43@k04E{-7; zx8B}0^cQiIXn2_4dLuAGVzK>!84;O!iaWWIUH7+~JJc7nnbrPaA77Pq(e-R+r&156 z0wifAXi|c6_jZSjlmzmE&<$oI;M zXOy{pH^NNYSRO0d0%sg!tdZ!fLhWb=A`yu3~A&6nzI>npe?Zd$6YAH!I3_1Cw=w}zi=`tRN8 zn|kRZ$C6(%KF_x^RL;Bp>(?TUq;h8lmjhx9IqWQ8+Gu5i8J~>bS+!<1f$t{IS`a^S}?*6^k{xB>38o8Tvgf ztogT47oT|?4Vu7wBV_W?rorYsP~WZlM=XvloVlq(2TRi(dKmn}tdf z3Z?A(gd6oy7KUd^y4eC$2%R~F=7oANB}f2%wQ5=P;m5PG4gwSJh4n|9tVr> z6BmVO1_w~)*P2-&d|~AQh*MdgH8B~~F}^BzwYKn8-{X)3s3H~y0f=f8h5$n_&|Z}j zAl-i~&h!O0X38#Sx($h;ld=DdWj_l}OpOfdb5owo-5JN2^0)4O&IPGF2EXGcIdyzF kb!*=<0gDfs00;Iz4DXut%rjDsZva`~>FVdQ&MBb@0Q70SS^xk5 literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/Items.png b/Textures/EUIClient/Textures/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..d95d605693ea1a96d168b89631b0714c8e002222 GIT binary patch literal 30321 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 IYZm&y09jKa^#A|> literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/SteamGUI.png b/Textures/EUIClient/Textures/SteamGUI.png new file mode 100644 index 0000000000000000000000000000000000000000..ac81171315361eec20cf1f7eb53d5f6cdff48132 GIT binary patch literal 3762 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 WU59UubRrj*0?^SgRIgOC4f_YtG&Dv4 literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/SteamPipe.png b/Textures/EUIClient/Textures/SteamPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4bb528d01814f47003ede29cf06b68de001a59 GIT binary patch literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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%0AbMeZq%L-(Jd-Vy zF=MBQi`Q#dgimUrb8eh-&!^badWCdpM}lCY5H5kcj+(Cpi7livhPmIMC3faVrVn3% z0Z{d7^mcXrad7=}R&|Hx^G&R<&taxi)iuysrB>LLOKm%dmjn0qSK&Q|*k|7u&bO|d zV~%*{W~?;^FY%dD^W}xyBLh=$HV##W9!uh{yfTr^U=y>}Jk*8RGHV;2$x%n{_?o?u9)t6A zJ4zHA_6Icbn3NfqSTGsc#=dh(;!-2PuydPq-dhm20BDK9xD?*KDx+b0m>9Ou3d{KX78_uQD>Rw@__9 zTDaL7h+V+-MO~%pC+IGe%%(7p;6L7o&+F1MKE_fS6{(zYP&VR$9E(ROJR>G#; zc<7ro+^H7>{ZVZ$DhmVdP`<$=(5v%k<)f@S~9zOpBL3t zrN1=J&5h=)eG=6Sfss_ORaHzYu72M>g@cZ=mpp%e>2fsvl=DF-H$RkAek6}9ayt7A zMzV9I%TW4U!^Tsh_B6DFDTdDMj6jKEFm-F{#FGG-vK0OaFxGg3GCDHHzwmW9^*dXq zk|~^SIk-x2#CN^-yTNjJKW8`il__cJ2IhGB(xIVtZmp#o+Hz zcV4>v_Icz=#$GYhd?y6wbUOl?ySC$o*@8MIv8=2t12{LJ2C1d^heP7P#r!$W{$ohU zJ|fjR$S|{h@z|rW=I}z2Nj)$F!V0`q$@M$@we{OV;M@$IeEtAGX^|}ITEsZxxy%v+ zt!GjxJSvI5I5X1oNKLVSW|(_RuH3%0aoe2R<#4MX^>VAFhuiyk(UP4zEH&K?S8pNG z0NQdq*|rEestmX~?UENz4>?0y#IIxTzl-QY91EC8Hh6x$m#x0DvQdGmB_Dyj{wyj!W+ar;sUhQhH-ol}Z226= z^ZcyjrqSGs;(Z4}}=-bC54|py(<=87Vi4QwI&@;I@pbuLVCj zc*EnLV_8tcCfIgd&uLB%t6&dfn5{Qv2L73wu9uM@QBB;wg=LiIa?#SKnNN-H2c~ia z0`iOcC5Ad~-ntYRx3ME#KMeCfJeKsH*Aj*~ll z6?z2)9K|n$6j~e=v!YU>Z6VnoG@Ib-u&TYnxT*8x69PqJwj#~`R z-)J3$ibI)nkdoUX_J$^kJ+fk){2_84La;6R0?=O)2^6hIsl_Mhq_+(H-l^(;gZb!98P=Zr^ixi{jSgMxH7>5YmI)`~tD? zQ`3r$GT0#^iZoQOT-R{HFztzg1!XhV{^vHrsJ_F-TNuCo$DP;E= z^8}7(rG~1RyZxHc8BadsI7dyp%4gbiUfB=ux=lVsNExz^)yWzt!?;*8UWx9d2XQQ8 zqvGTpXhWLs#?GtP%(A9kd$~sJME2mty@o&;u%X6h8O0-SciMhux_b@aAGb;?thh-wdH(F@#%zfqj} z>13Rkwx;|fGIu{zWL=TH0}d1~40WpjZ=XP-f9aIOHR=Yb)RQe}tkDX8j=_9y6ZL3# zYtu~X?Wm)ju_RVSqpr7jo?}UDm1mji6i3ASTL9`zYXsf5Ny3KZbdS~@ZXncs3rofZWiLZ5E6(Y}LFV^|Kvz_U zcTMMC<29+vsn=!Iwv*XQbx6%W`LpNquv6rT%f(mJneNkcKRYY&pe;fR>h;yzKGuuW zXQ(|?XI1kJ9nDoxUaFRqiKWOOP1pKu{p9KK!K^KQp8oVk89Xnsb2(ffy{Js;+$u2@ zzid;t#8FdHH1TkwC(Ib`@aJc3Jic^ct>)oVteA>@WqnIzk2XFE_MjER@h-q=BH$O_ zxN(!z(W3KRoG+5^QhQ;?g#I@L3t+nz3WgQB$yerroUqvBZVe1-VH?*eAri!>4Nb3EMB&y zi$C5y-5Dd)cWFUQiuZmEp*4Pxn=TN*hE?_R69TG)3;BEZ8cI3_m0@?xPn30q z-k$C9gYa8St>8() znS*|UTbnTEtQV=^JCd+OzE7LkYjr3<6dlqV#_i)$gIW*=0nlBNv2<{fnlWDcrfa3D zWWdh1sB$wvm`v2PT@E@t8C4S7YM5_qdUwWmG(X>aU_cn=`d_!AwVYi@Hg~(ZSoMDD zNdE3}I<#Qf8@NK{5W6$GmH$zq?ff=tyLp}hKk+BI9lJYMwwsuRTNO39IG|ZJwvPt4 z5U?4r7%aUR^FwQJvCQkH@jsbWw~<=fo-XR9!~bbH&S&w{H@KK3+Q7_4$mzEdns~)_ zl?`(e3xki6oVtz8bAv#NI-%;jiFAaj$~D*VuhkZ7Ept+M(7sCA%<0X@OiIf%V@o7R z%3{=Mi$r;bg8flLhSP4IeadB}$~}QUhiH(Q!JQ2CZP4GP@e5WOH$j%f1r|pqAI^&J z+a$6{To^P36BMtQvJSZaDNaagYWNmOOJt%G3-(=Y@zo}Dd$*K~LAw3!3Y*VGR_`~z zo+I=-4Rk+yzOGcgZN0Dk>WcVMZKh9p?7Lx_jY2ka$fPlkWV^d>Ki~{|g)*MyMlPic z54NAd@SNXxCZ7AeEuUjn(W>wYw~)>cEt|0lLRB^f1kK2@DC^#KYIVSu zhkN2jt_b*u=??>|J{g(v*q>vEjjXz1UMjI(?)3twV zi^oO~LI)%?-Nbfs^jicQzbvM!$>s(EliSC0JLeV(=XN;BFwRC%DJNCC3`YV!s& zmPFw?xD*x}HF_N^sQ7sl)w%~o<%66@r_&ii5`KHdTZzmv1VQQhUW`8hUHFE6l^oYL zN6>eerSra7*nvJDCzW+wfdnMacEN)Zfakh*56@9Uc^dFPpd-@W^F9zte-&lS0ENv$ z&{{s~N}nAy%X?SXzmnYy+c^T@Rd3+XCI~Z@p1_U#Y9U8vMP!y{`_+TDgXda5`ROuO3ed!=^t<1KUM4R%UsDVLJ=D0)S5-8`&DN6pSxK*T%jo6a2I z{bk;xvm@XIo5iAq@8Rl&rMw%gZ<-7@vrQ{$4A|3(Svk9X4^_{)%3W z*}${DV8HysydkgOGcH0u-Pn!5HXJU(0OJjG%gIix-)QL0RlW=Q1e3uJZZbKC1`iW5;^yRJ!Yn~MBY$yu!Rv9>)MwJ-lQCdQp!;)MX$4hz1fVQ!cR*H^=X@Uu8Bf4E{yYMMA=?gv7f9lK;yy1mc)(?C)`;rthZTDC3fuOlqjM{Y^)CcdXQ1yWb&)2mVYoJZ^B%_D(I&`j{D)v*tjut64rP{`*_o+`Iyn znDqb@+LYGh1t|IbP<;`LfH$7!x+bZFJnoJrB^36@yPo`B-@nQA+#4 zL)Y}JgSSz(*ue_Ci8h`aBsTl8@Y3~WW~*eOs*1SP&$smsnd^VjesF=~dNrzBW!C!p zpnhAdto==KEW|s`Q^C1ckvHMi=Dnx{XaV-9LBa|9LF)MPP!wrVAB~c@SVe`9+klvJ zhC^>1t)fV+w3YrN2SQC!!FU^VA^oCg@xNWbxZ2bKO_9%deThO7`<~0XNlTs*=n_%? z&0*os>}OR6o)W3CwQs{!XXDuL3CiE<6NR}uiKLb~Z8B(lDF`;qoI3W5t#BN3l(6Qb z&ew_dNaG{^QcqoZ5d)kMV2Mz&N~5LKjMJ&3rRWp(0`JP%<${D%?c`%rB#IY~3*!f9 zzpJwlVn326Wvc1tR!JM$H*q|JvL}D*LVcOASC|NekPQ$e=3iYlo`UEWAW;|r$_f-u zb}@^kmFYWQ|KLzMHoM52&-~oxwYH$AzYrkDP|ts~@%zTy2V+KvHHNMo_2|?>BxBR{ zXG;$+>Ja=y84~n+*5SN%2$VVE^VdTN|M9-f4ceJ=RAGgd(mG6e{VPy5)ATX5kxduwcb9>~$)I&k}_ zF!oc@Q8ro@&GERre*+QirtO{jsv@EY-py)xp{Y}V$-f|F#K^2b8Oo6QtSs1h>iQOw znDq0Lf0b%+oP4e@)tQR#Tf3&w4i3LZrFmbEramocOn6uNhRRzcZpbRMdq{g$=oQ$5 zHhytIf$D0!Zrm~?bq78AM~cmco)Y%t0If5Ex6WudMPb^!>j&^>`=!!z4Zj!P(5=C$V!53_%;Xz9&Q6sMVKBw+L?$v-^#XDC+nC zJo7XtvwhI^16W{in;ix1x&yg7JJb~<7En9B#KWxqm~#3=7O{Vi(gT7#5UT8-c~7b& z2{kExU@GM9D%5kEJ6Tp53yL~ zf6*N#PpwoL6|xUrik1PA0b=TjGklrjVht!j-&L(fw${`qd1bPE`Az(%F_IJflR7-B zzCmGf=?LgsBjO&5_4ck7rhvG8c01LT0kuyxnx63`c4JG-lNE_IWVN@;-AyIrwC?zkES-gS3gJd5e^He zQ#@X`9P#`X-F)SDJ9W1Eb~nJI?ZD^@^N5HkC$K!=y)!F_f`hhpYj}n`{Kt#2XPRs^ zT8XUK?5keYXegD#q}%aq2z~EB@*l_FdO`E=T2Ps&%0OgO*1tk4jvM^Uf@Lj~xX?1nW%gL#6Sdw_L-WIRYgU7rx&IA7YV}FTTP4OV;cz?BptUln1!-x*)u*FbS zy_MLn*}Zl0s^T0mDEkMur;{J4$Z3P-BkB-cRrl4mkY(s;mk>&gm!VoX1kKi{Vf<`! zcj9$!-Az0EVN4u%4!H-3((>E?=I?F1%)E0iE9m-7j-~MI^OEf1SF41KceZnh*#hQ_ zDl-LfWA2-o(^Y5%|EK15Wk|kR=<(2NhTm=b0C=*O3gCYB9;$P#D)vLXA3MP-uJD+nk`UEM$sH#n;VRmf~^s>xo*u$bZi2pK%c$ zGVkN}i9*pRxSVDB*EGK{dTmM8;X2PEyZ>T5e)teHjkPW=gb0-eg;#YmF3kqVApEGzh=AKl*@DLJq z-?NFcK^-?Y3CSlCxz48tkk8T^Ff^IW&m7mh5GRwMlexq{io z?Yn?ZuJXUx*K1GG4b2R#EvDpD70Ty+mEcI&{`lU)QY`yeX4+zkwJY_DmkkcFWrltv z?F37_%_A$J2N{r6%{Q%qnxg*~%4tFU)Rc(G?d7#Lg=wS*x$9dNJdXE2rH@VicOE9< z(ZZBLMUdTBEpjVSSxjpIV{xK0oYJbg23yhOkrcToVz=wR;uX`lWM|&ycLJIex@*T3 zSAE|9z--srPtLi0J1lDjx!1L5w6p}MFAr{h2mH$p=H99VY&^MF6{4Lkk?&HOj-f{Q z7zM9_(&hee_{;Mj2c-U2X?l5uUX!mO_ZBJSLDKOa2HSk^HcTQ@EUwli7tsG6 zsy}&e&4!QW+Nvqi|9@g)5sEu}^LOlCuXSk3G|_yz5r$84p`)XAlNvYbxPDH?Vd4pI zcHwk14N=tJwffj6LmGUUZ_hoJC^1i8u_@MCHC`3FYca-OEX0roH_|;a5!q`wmA6(F zps$>@_x{d;2bKb5Gmk6^?@u2#iu>PT;t;RN+PxYp^y)Wz=;a9n4Do2VMO@Zty?<*lv`K1Eao#J%+5XsCDr7n>XCB+n zjD|ywN#zi9ng>FJNnZTrx5==^!|J5ULp!EEE_Cyu0k$ z{l%KM{i`&0j|6$9ogH)_nRj~u+%+Y6_IP6n`nA5HA^fpT@_B;pzkz2v&lLGbt)`=9 zo;(tty@TSe0WF8+6a}A@Uxow9#Rb~rQPcingxM1D z&4-nhhY*Z7kvZGTqMit}z=|^;QcJA4?`MtH%*FodShIlzlYSK~UE)uFqUpl zFTu{bzs0eAWZyL1-jfJ#naA!!tsT(RACe12hI@2$7!PLYyJK?h_Tt`?QF7=Cin>(e z9#mabRnydj-F*QDq8ouw4EXv@=g>26hAk)W=Ub`ilX~lv=4P!P|2GJTXM0c|b9)t2 zK(z);W3eyo70-EkKP%RpifkC}%*fPnvDT-_y(OL1w?8%ekgtTLFx1tPZ{AuTC@MMR zC}Jg&Rr|YXQir`^lFtv?*p;InneFk>-pCNfY9>B}F2G~;7s_rxdxCkt6mcQmkT=W< zc$>EuP~VeQs!>Xt7AZ?eNSpnQ%j3>?FR48S#m)ctEqcRTmmR*yZu{C9-;*D!g<<}% z02;4l+{)-e&?|-bpLP&1Vfj|k5J%xMp>K|j(@5YOgoii1sI6@9e2~r#wy7U+OmjTU zY)(#PauEJ)=X`l??vvf&e{)gE+BxbPSl?XuHa7q^a_Vuu74hj=wSpmw&*mZJ^$AeN zbYc1Lf3{6ztER1#lVHPq))u%kuZzm^p(paFtBX`1>($#*JhWVpGl?GDz+uEgJ@<&i z;+;d-d#(mL^o$-O#baC$!axK4wuCGom0Zsfig{CzZeeRQ6Jt2G6?57(X3?eH!F=E2)3FtiuHGW=`37qcTOPqK z#w(8f4YBY>Qp`C!v_vYJT4!x&wgXsH#lY>W$rM@qB&sqS`&y3%Uk-SsG5JbCc zjRj~k7Bd@Wp0+IC_*xGeF^twkB$`oQevj97x91;(KwVoD({8gPm7e>455pk=@KJjv zYSnf&DVEP|{yiW-6X`8S`yGgNR-j56bjMe(67BjkcYO2zN%lTQn6WqHcn~VRoS%<+ zi@MIMnTP$M0-{0S4FTxML%|0>fEh;Qt?_z(#aUT^2rg1Gc1lRX2W zydt&AYLH{A!8sY{orW|?e+`$lJDN_r*CgS?|EHa6k7v5=|3gLH!c%UC&?woIat^ga zC8y9z&8bicNywbTP)d;vEjf%mNpm-+Sjb_Ba*XOmOPHi>P9s|mGq&GX&;9)B^?UtZ z_wziz|9-F6{m=gR?%H*I_PIXa&*6Q2-d7#ag>k8J#d&0`4VBJz7X$iZ0Ww@gLsjdY zt%c5RZn`j#1`z9-feeAUWhtQp$IFuDaQF4Yad z^?t%zl?=Ay^;^FJpxvkmcIpAY7bRLRYH0(vD4hx6Q!{Cj6q4X&6!^DgDJcyAX=T?H z>IT2bwThVGpCZB{F;*q7I93Zm+}AD{VY5DZ;{eeH1z(i_X^m+o1|pr&;yPi1FTW?6 zvWg^1X$?TT7I!EzU@&%184>m>ioruXdk>VYH6cvtYBgBX+*Y<(B=>ZTI#A}$WgO0x zc-pOmZ|iSN(O(xIXe;=EO1@tB&rnG)L^Qn>#mfOld7vHGMbfG^>74f8O&*_qN2b5g zl`{9J{K~_}%EirBhQ3d3wE~V|`gcT(%!vIWF{1GNJ5QnfeK|t)-7McYdVDm>1&mL1 z0M1NY1wkz-mPg^T&w&^iXxxW=!+GB%Ua5Vu?Ahm%&}bpm`q|_y6Tr~zB4;b# zWlUC%UTwc*REnKpV<$Wbh5@-$Q%N8(HR>wj9`X!x6bwdsS!q6Gj#)UH6$OJ-Lm|<(_S3!3$g3P{hM3UH=mi?FehYIQk6zc_fa+4g$H~cUy}sA=Z|QXHzUf(bzoC1N z`R)@(gYNbibB-r(eP#60@liRGP42LSi)J3bvM+OUQ^U-2G4reN#UUH&fO=POKJ?=s zQF$f!QIFUMZ=Jn+=SsuXm>+B*5rY7iFKrx>@Cg7_T%|5AG26E9ut}%TW)&L*7v?`E z&NOb;UX`b*pNJM7R4I%3tE#r>mtCrPcq5+#5#BFEw4e(SE zA(9Tzd}x#S@Nq>ayF+%p2`|pYIcW5_QtELfn3bYiuMc)lex9b{maWcTj%48f$Wqc_S@XO!&x^=3B?IfPY5wz8(M&J&LQdk zuO3|QO~3Gm!>29$Qp$169b>~N2|~R9M+1;%SHo=r-^kian=Y<#Ipwdnh89n7EL}Ea zlC^1hB)`;M8>jq=)*X(M_>N_TV09`CabbmbnoQPrR(iv>Ke{gGCw;&^>r1xfqxeno zS|&>Vsm)eR&CuUmHv!ndBcNdITe@@T7&t1dXYO<7v&k<`wFR^bO&L=Sw_;jSJT`@u z#0;-k+6|&=sa4bAvvupevlu}daeyUlnkba;W=w+dTjg+b5zQ|oB$Y~K#l*z3yEiyk z6L!y9r7Cu&_r!2L^8^XVw2fEN&SiQH;QqU;WxQ6AgKkT?eK6o4;C?S=Ed&Iz+YM6) zpKIy1k6-vaeX!I2C$4O6v9w!#^un#qw{uST)!UtNbf~$|CoKOD8x;Sll_;0)g!35c zBU&AE*~s$_4o)7atVAcI0xkV{aND~O!++oob5*zP$Kq@?APMTYvB}`imanhuF9Pa! z%8#_F{NA>?zJDfwhf=m7g9?0)Ws|M7i{jz#8|7|JF;d9`#AeXBREMjhpVt#Zt#@ra zePZM4M9B4Eoaq|CaP*|Jv(R_+Z`R3JP^j`B!5E;=wgBKl4vdbRlWSUx{pvtl`lGNj zu43wK_$Rcm2aH`wx?N%u_Z?bLTmw}C&H75>{HBR5&|N8(36(g@zQ@C=Z!b$bD@~sd zqPu(FBeo&98tJ}0l312`fnm#-sJpErok-%>;JI(>z~0aIkEJcbJFoh;N+OqgFWzC& z@HA2f)XR4fE2H*2cTi^d)!r!C^5;(#DM@Wk5yF9oOOZu;%wVi?kpI218sV<`pP6;OgKHLVeIv%7Q%h@r_GMYX!Ui`y)}(5dtc%S4BDKb>5`UXDx?r_v5aTG9kc2IBniq+hMI#K_ zH|uM|p{gQyHDz*gq9$Ux-24ja%OSmnl=kZhx7BqN)D>LRHR1`o0;R&Nb)1jtoK#4Y zP*GqU{o9sv%^&o&&c~a#K8Uymi+OUbR3~q;0;1cb)19Aj?qL#j^Xvfr8)90T| z8i0|+K(m$4m^6H+hQA3b9(~*o1d?X1-3uUOxi@eVO?dA|@Gd$zA#S9y*fABGbOBfm zQU@;?Gi51)u>?-oy&`(4SKR=aLMe9aivIc{QMpY&F)?wX7SYAL0IVnuLU<~k5+>za zpP~zbXvmnr_9_n5Stppc#IMILiX5i3miJ~`d@Ri!S-JNurcp(3P?Rwe8iNonod?fQF%^r}~Ei8g-VsBHU@;>;QqfbroDR~Rwj4n3S zmsrNz8%8=ej1)q>(Cm+uMKz*#K_9ES_f$s$5OO!E@L(v&1KEnb?`eFeR3Lqb>~t88e+hiJcC;{}5c^ ztYgSQeDK)oqTvD?p3#x4OH0=@tG%|%hWqJ7n++>D&Rvj5XR*f3JA8Je&M%(7(z@(##ork>+0b(QVnVaRP#N@g|b%zkcrG z(W^NKaR>P)Nta{iQ1sA9IEpnN)nS_Fl}$EE*0MNRK(UPify6)$fCtj6nGIkATnu96 z>kU=#$ea2{v7M%`=_~F!^aqLu7YltE-N;>IMuF2&Gc~#pn~W~6Wvn$C&0np5pvia7 z5YVRu8s?&LP8?uf`#N4-5h5ezb6mj1zgG&>j<7}$^PB+V_xkVCsS&z4VWxXdT>ZcrU~PD zPXD#sGbqOEN)7fhg+aB=)caf3M|_5$T~cy+&U`IDxAz7E*vjY;|K%U{n` zo5y0Oqp2NwcFM~Lue5J&Ih=us6|LB(on*MJOLv_xr`Cq*?33Mk8cjoPh?r~R^w)nf z#)AUFTjE*tp@3Pw*qZ)Y)~+RRqfmzMEY7lhQr|#89Wj^WrN58&{vfiu3@)%ce*Aca zJNP1Xz+1J@$Ue80Vufcz^O8nk^-d6+5_r{ z-UbkvV4YT*2TwRe}8shrNHaY;S>b<7&yDIEPWFv(p zSok7xN&O9icT*=L)Zka`&K*VlJMc&>+{$Wd__b(9uimtIzIEC|Fe^$T=|Xt@RfN`u zD*t6HHoDUFWlU4tufY2cfj~$EUl+icsTR|<9mqPJee=6*FwxQJ6pDepc~uTVG{-s^ z$+E5H@uFtgEKd{GC<1-IVV0#PtcyP!>Q?AK2#a3Q^D>qdWs$XW?EPdw=hlPvl~_(q zrU59S8?$rtu#98Z**Yv74-ea!>`&+J=R*N+U|`R)l5P344+NOl*`)JIi&osE;oVJPgI?ul znTrklc_Jy#r;~8GrjsNbAQkM(dFKCMj}x8$2#GZ=gh0%Y$l<{8gTp0IVqjviLKgvD z(+GuH%(V}R0T;&rFX{MarB7AIz&%f=q^eVdh+&oiKz1ulKswqhW_ugWW0aVZqLQznrB>C;fg z^Va!xK3_|lOe7LnS%oCVYOA}Z1?KA0V=jazlw^~+9kSbD?RvP0I)u%Fidb@0yQ%#| z?LPlOGNqGXk=B2iDY-VQw3k`n%N(-yA|p0DmN)W>%|oNTv(rf{Z}8yA`k~=15#@K0 z(w>ydh{LI0(l%qqOgVv4_0IN}1{qeMI8dCefK*;u;kuX0)P?7epY&G6C?sDKrqDR2 zW-?Y|`E$vaGV#1!ZYJPG!8cFE{W%M1ZTs?m0bJrP?IZ)y>b)p@G{a*ij0>Dl-?(wZ zN^3z4JOTtO-|Pb@SkN9wAv;pEx@c%`L%rls@F8~fRj|9XlIuQX&6bE7SJukPkSu5^ zdNs#y%QjH7FjM0DrIB(VKrj$!-C951+BN`x6Y#Z|{7_>V>Yt=WGJ{~^==_UvEF z3H<8E6#v%nIMC0^0B+U%zb*Wif&f4NXS(}KL4PUeyTAE!Gx?LZ@Bfzt#l6W9NuKzv WV**nd(hB$(kd4LhqoqgAUH>ok(3-da literal 0 HcmV?d00001 diff --git a/Textures/EUIClient/Textures/tankBlock.png b/Textures/EUIClient/Textures/tankBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..21b97d4c5a4126ae7d0dd46dcbe118bad20f6b75 GIT binary patch literal 2478 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 P3?%L8>gTe~DWM4fP^b7L literal 0 HcmV?d00001 diff --git a/modversion.txt b/modversion.txt new file mode 100644 index 00000000..fa6609c4 --- /dev/null +++ b/modversion.txt @@ -0,0 +1 @@ +1.3.2r4 \ No newline at end of file From fab70e6e851aa79915f2fe6c36d4c7aa6285ddfd Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 09:01:05 -0400 Subject: [PATCH 057/115] . --- .gitignore | 2 + src/minecraft/BasicPipes/ModelPipe.java | 98 ------------------- src/minecraft/BasicPipes/PipeClientProxy.java | 22 ----- src/minecraft/BasicPipes/RenderPipe.java | 57 ----------- 4 files changed, 2 insertions(+), 177 deletions(-) delete mode 100644 src/minecraft/BasicPipes/ModelPipe.java delete mode 100644 src/minecraft/BasicPipes/PipeClientProxy.java delete mode 100644 src/minecraft/BasicPipes/RenderPipe.java diff --git a/.gitignore b/.gitignore index 109ec420..13325804 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ LICENSE /src/minecraft/basiccomponents/* /src/minecraft/buildcraft/* /src/minecraft/EUIClient/* +/src/minecraft/BasicPipes/* /src/common/cpw/* /src/common/net/* /src/common/org/* @@ -30,6 +31,7 @@ LICENSE /src/common/universalelectricity/* /src/common/basiccomponents/* /src/common/buildcraft/* +/src/common/BasicPipes/* /bin/ /conf/ /docs/ diff --git a/src/minecraft/BasicPipes/ModelPipe.java b/src/minecraft/BasicPipes/ModelPipe.java deleted file mode 100644 index f36a5199..00000000 --- a/src/minecraft/BasicPipes/ModelPipe.java +++ /dev/null @@ -1,98 +0,0 @@ -package BasicPipes; - -import net.minecraft.src.*; - -public class ModelPipe extends ModelBase -{ - //fields - ModelRenderer Middle; - ModelRenderer Right; - ModelRenderer Left; - ModelRenderer Back; - ModelRenderer Front; - ModelRenderer Top; - ModelRenderer Bottom; - - public ModelPipe() - { - textureWidth = 64; - textureHeight = 32; - - Middle = new ModelRenderer(this, 0, 0); - Middle.addBox(-1F, -1F, -1F, 4, 4, 4); - Middle.setRotationPoint(-1F, 15F, -1F); - Middle.setTextureSize(64, 32); - Middle.mirror = true; - setRotation(Middle, 0F, 0F, 0F); - Right = new ModelRenderer(this, 21, 0); - Right.addBox(0F, 0F, 0F, 6, 4, 4); - Right.setRotationPoint(2F, 14F, -2F); - Right.setTextureSize(64, 32); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - Left = new ModelRenderer(this, 21, 0); - Left.addBox(0F, 0F, 0F, 6, 4, 4); - Left.setRotationPoint(-8F, 14F, -2F); - Left.setTextureSize(64, 32); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - Back = new ModelRenderer(this, 0, 11); - Back.addBox(0F, 0F, 0F, 4, 4, 6); - Back.setRotationPoint(-2F, 14F, 2F); - Back.setTextureSize(64, 32); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - Front = new ModelRenderer(this, 0, 11); - Front.addBox(0F, 0F, 0F, 4, 4, 6); - Front.setRotationPoint(-2F, 14F, -8F); - Front.setTextureSize(64, 32); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - Top = new ModelRenderer(this, 21, 11); - Top.addBox(0F, 0F, 0F, 4, 6, 4); - Top.setRotationPoint(-2F, 8F, -2F); - Top.setTextureSize(64, 32); - Top.mirror = true; - setRotation(Top, 0F, 0F, 0F); - Bottom = new ModelRenderer(this, 21, 11); - Bottom.addBox(0F, 0F, 0F, 4, 6, 4); - Bottom.setRotationPoint(-2F, 18F, -2F); - Bottom.setTextureSize(64, 32); - Bottom.mirror = true; - setRotation(Bottom, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - this.renderMiddle(); - this.renderBottom(); - this.renderTop(); - this.renderLeft(); - this.renderRight(); - this.renderBack(); - this.renderFront(); - } - - public void renderMiddle() { Middle.render(0.0625F); } - public void renderBottom() { Bottom.render(0.0625F); } - public void renderTop() { Top.render(0.0625F); } - public void renderLeft() { Left.render(0.0625F); } - public void renderRight() { Right.render(0.0625F); } - public void renderBack() { Back.render(0.0625F); } - public void renderFront() { Front.render(0.0625F);} - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/BasicPipes/PipeClientProxy.java b/src/minecraft/BasicPipes/PipeClientProxy.java deleted file mode 100644 index 509b14c0..00000000 --- a/src/minecraft/BasicPipes/PipeClientProxy.java +++ /dev/null @@ -1,22 +0,0 @@ -package BasicPipes; - -import net.minecraftforge.client.MinecraftForgeClient; -import BasicPipes.pipes.TileEntityPipe; -import cpw.mods.fml.client.registry.ClientRegistry; - -public class PipeClientProxy extends PipeProxy -{ - @Override - public void preInit() - { - //Preload textures - MinecraftForgeClient.preloadTexture("/EUIClient/Textures/Items.png"); - MinecraftForgeClient.preloadTexture("/EUIClient/Textures/blocks.png"); - } - - @Override - public void init() - { - ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); - } -} diff --git a/src/minecraft/BasicPipes/RenderPipe.java b/src/minecraft/BasicPipes/RenderPipe.java deleted file mode 100644 index 759fad5f..00000000 --- a/src/minecraft/BasicPipes/RenderPipe.java +++ /dev/null @@ -1,57 +0,0 @@ -package BasicPipes; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import BasicPipes.pipes.TileEntityPipe; - -public class RenderPipe extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelPipe model; - - public RenderPipe() - { - model = new ModelPipe(); - } - - public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) - { - //Texture file - - type = tileEntity.getType(); - switch(type) - { - case 0: bindTextureByName("/EUIClient/Textures/SteamPipe.png");break; - case 1: bindTextureByName("/EUIClient/Textures/WaterPipe.png");break; - //case 2: bindTextureByName("/eui/lavaPipe.png");break; - //case 3: bindTextureByName("/eui/oilPipe.png");break; - //case 4: bindTextureByName("/eui/fuelPipe.png");break; - //case 5: bindTextureByName("/eui/airPipe.png");break; - default:bindTextureByName("/EUIClient/Textures/DefaultPipe.png"); break; - } - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - - if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) model.renderTop(); - if(tileEntity.connectedBlocks[2] != null) model.renderFront(); - if(tileEntity.connectedBlocks[3] != null) model.renderBack(); - if(tileEntity.connectedBlocks[4] != null) model.renderRight(); - if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); - - model.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file From 4911151bec5855e9ef7297021803060f74f2d96d Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 09:01:41 -0400 Subject: [PATCH 058/115] . --- src/common/BasicPipes/BasicPipesMain.java | 125 -------- src/common/BasicPipes/PipeProxy.java | 54 ---- src/common/BasicPipes/TradeHelper.java | 174 ------------ src/common/BasicPipes/pipes/BlockPipe.java | 146 ---------- src/common/BasicPipes/pipes/BlockPump.java | 155 ---------- src/common/BasicPipes/pipes/ItemGuage.java | 78 ----- src/common/BasicPipes/pipes/ItemParts.java | 58 ---- src/common/BasicPipes/pipes/ItemPipe.java | 128 --------- .../BasicPipes/pipes/TileEntityCondenser.java | 98 ------- .../BasicPipes/pipes/TileEntityPipe.java | 267 ------------------ .../BasicPipes/pipes/TileEntityPump.java | 89 ------ .../BasicPipes/pipes/api/ILiquidConsumer.java | 35 --- .../BasicPipes/pipes/api/ILiquidProducer.java | 30 -- 13 files changed, 1437 deletions(-) delete mode 100644 src/common/BasicPipes/BasicPipesMain.java delete mode 100644 src/common/BasicPipes/PipeProxy.java delete mode 100644 src/common/BasicPipes/TradeHelper.java delete mode 100644 src/common/BasicPipes/pipes/BlockPipe.java delete mode 100644 src/common/BasicPipes/pipes/BlockPump.java delete mode 100644 src/common/BasicPipes/pipes/ItemGuage.java delete mode 100644 src/common/BasicPipes/pipes/ItemParts.java delete mode 100644 src/common/BasicPipes/pipes/ItemPipe.java delete mode 100644 src/common/BasicPipes/pipes/TileEntityCondenser.java delete mode 100644 src/common/BasicPipes/pipes/TileEntityPipe.java delete mode 100644 src/common/BasicPipes/pipes/TileEntityPump.java delete mode 100644 src/common/BasicPipes/pipes/api/ILiquidConsumer.java delete mode 100644 src/common/BasicPipes/pipes/api/ILiquidProducer.java diff --git a/src/common/BasicPipes/BasicPipesMain.java b/src/common/BasicPipes/BasicPipesMain.java deleted file mode 100644 index 898b13d7..00000000 --- a/src/common/BasicPipes/BasicPipesMain.java +++ /dev/null @@ -1,125 +0,0 @@ -package BasicPipes; -import java.io.File; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.Block; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import universalelectricity.basiccomponents.BasicComponents; -import universalelectricity.network.PacketManager; -import BasicPipes.pipes.BlockPipe; -import BasicPipes.pipes.BlockPump; -import BasicPipes.pipes.ItemGuage; -import BasicPipes.pipes.ItemParts; -import BasicPipes.pipes.ItemPipe; -import BasicPipes.pipes.TileEntityPump; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.Init; -import cpw.mods.fml.common.Mod.Instance; -import cpw.mods.fml.common.Mod.PostInit; -import cpw.mods.fml.common.Mod.PreInit; -import cpw.mods.fml.common.SidedProxy; -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 = "basicPipes", name = "Basic Pipes", version = "V4") -@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) - -public class BasicPipesMain{ - @Instance - public static BasicPipesMain instance; - - @SidedProxy(clientSide = "BasicPipes.PipeClientProxy", serverSide = "BasicPipes.PipeProxy") - public static PipeProxy proxy; - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/BasicPipes.cfg"))); - public static int pipeID = configurationProperties(); - private static int partID; - private static int ppipeID; - private static int machineID; - public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); - public static Block machine = new BlockPump(machineID).setBlockName("pump"); - public static Item parts = new ItemParts(partID); - public static Item itemPipes = new ItemPipe(ppipeID); - public static Item gauge = new ItemGuage(ppipeID+1); - - public static String channel = "Pipes"; - - public static int configurationProperties() - { - config.load(); - pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); - machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); - partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); - ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); - config.save(); - return pipeID; - } - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - proxy.preInit(); - GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(machine); - } - @Init - public void load(FMLInitializationEvent evt) - { - //register - proxy.init(); - GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); - //Names - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "guage"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 6)), "MethainPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 7)), "BioFuelPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 8)), "coolentPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 9)), "NukeWastePipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 10)), "Pipe"); - LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); - LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); - //crafting parts - } - @PostInit - public void postInit(FMLPostInitializationEvent event) - { - proxy.postInit(); - GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube - GameRegistry.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@',Item.ingotIron});//iron tube - GameRegistry.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@@", '@',Block.obsidian});//obby Tube - GameRegistry.addRecipe(new ItemStack(parts, 2,3), new Object[] { "N@N", 'N',Block.netherrack,'@',new ItemStack(parts, 2,2)});//nether tube - GameRegistry.addRecipe(new ItemStack(parts, 2,4), new Object[] { "@@","@@", '@',Item.leather});//seal - GameRegistry.addShapelessRecipe(new ItemStack(parts, 1,5), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Item.slimeBall, 1)});//stick seal - GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank - GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve - //crafting pipes - //{"black", "red", "green", "brown", "blue", "purple", "cyan", - //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; - //steam - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,4)}); - //water - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); - //lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,1)}); - //oil - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); - //fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - - } - -} diff --git a/src/common/BasicPipes/PipeProxy.java b/src/common/BasicPipes/PipeProxy.java deleted file mode 100644 index 5cf81c84..00000000 --- a/src/common/BasicPipes/PipeProxy.java +++ /dev/null @@ -1,54 +0,0 @@ -package BasicPipes; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import BasicPipes.pipes.TileEntityPipe; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class PipeProxy implements IGuiHandler -{ - - public void preInit() - { - - } - public void init() - { - GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); - } - 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; - } -} diff --git a/src/common/BasicPipes/TradeHelper.java b/src/common/BasicPipes/TradeHelper.java deleted file mode 100644 index cc39cf00..00000000 --- a/src/common/BasicPipes/TradeHelper.java +++ /dev/null @@ -1,174 +0,0 @@ -package BasicPipes; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import BasicPipes.pipes.api.ILiquidConsumer; - -public class TradeHelper { -/** - * - * @param entity - entity at center of search - * @return an Array containing found entities and nulls of nonEntities - */ - public static TileEntity[] getSourounding(TileEntity entity) - { - TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; - for(int i =0; i< 6;i++) - { - int x = entity.xCoord; - int y = entity.yCoord; - int z = entity.zCoord; - - switch(i) - { - case 0: y = y - 1;break;//down - case 1: y = y + 1;break;//up - case 2: z = z + 1;break;//north - case 3: z = z - 1;break;//south - case 4: x = x + 1;break;//east - case 5: x = x - 1;break;//west - } - TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntity) - { - list[i] = aEntity; - } - } - return list; - } - /** - * Only works for steam Power's boiler. Still needs recode to work for all things - * @param blockEntity - tile entity trading the liquid - * @param type - liquid type see chart for info - * @param rise - does the liquid rise up like a gas - * @return the remaining untraded liquid - */ - public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) - { - TileEntity[] connectedBlocks = getSourounding(blockEntity); - ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; - int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); - int ammountStored = blockMachine.getStoredLiquid(type); - int tankCount = 1; - boolean bottom = false; - TileEntity firstEntity = null; - TileEntity secondEntity = null; - if(rise) - { - firstEntity = connectedBlocks[1]; - secondEntity = connectedBlocks[0]; - } - else - { - firstEntity = connectedBlocks[0]; - secondEntity = connectedBlocks[1]; - } - //checks wether or not the block bellow it is a tank to move liquid too - if(firstEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); - //checks if that tank has room to get liquid. - - if(bWater < bMax) - { - int tradeVol = 0; - int emptyVol = Math.max( bMax - bWater,0); - tradeVol = Math.min(emptyVol, ammountStored); - int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); - ammountStored = ammountStored + rejected - tradeVol; - wSum -= tradeVol; - } - else - { - bottom = true; - } - } - else - { - //there was no tank bellow this tank - bottom = true; - } - //if this is the bottom tank or bottom tank is full. Update average water ammount. - if(bottom) - { - //get average water around center tank - for(int i = 2; i<6;i++) - { - TileEntity entityA = connectedBlocks[i]; - if(entityA instanceof ILiquidConsumer) - { - //if is a tank add to the sum - wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); - tankCount += 1; - } - } - - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - for(int i = 2; i<6;i++) - { - int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average - int tradeSum = 0; - TileEntity entity = connectedBlocks[i]; - if(entity instanceof ILiquidConsumer) - { - int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); - if(targetW < average) - { - tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank - int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back - ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade - } - } - } - - if(secondEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); - if(bottom && ammountStored > 0) - { - if(bWater < bMax) - { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, ammountStored); - int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; - ammountStored =rejectedS + ammountStored - tradeVolS; - wSum -= tradeVolS; - } - } - } - } - return ammountStored; - } - /** - * - * @param entity - entity in question - * @return 1-4 if corner 0 if not a corner - * you have to figure out which is which depending on what your using this for - * 1 should be north east 2 south east - */ - public static int corner(TileEntity entity) - { - TileEntity[] en = getSourounding(entity); - if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) - { - return 1; - } - if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) - { - return 2; - } - if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) - { - return 3; - } - if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) - { - return 4; - } - - return 0; - - } -} diff --git a/src/common/BasicPipes/pipes/BlockPipe.java b/src/common/BasicPipes/pipes/BlockPipe.java deleted file mode 100644 index 6d670a30..00000000 --- a/src/common/BasicPipes/pipes/BlockPipe.java +++ /dev/null @@ -1,146 +0,0 @@ -package BasicPipes.pipes; - -import java.util.Random; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; - -public class BlockPipe extends BlockContainer -{ - - public BlockPipe(int id) - { - super(id, Material.iron); - this.setBlockName("Pipe"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return 0; - } - //Per tick - public int conductorCapacity() - { - return 5; - } - - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - - this.updateConductorTileEntity(world, x, y, z); - } - public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) - { - switch(side) - { - case 0: y -= 1; break; - case 1: y += 1; break; - case 2: z += 1; break; - case 3: z -= 1; break; - case 4: x += 1; break; - case 5: x -= 1; break; - } - - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - TileEntity returnValue = null; - - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,ForgeDirection.getOrientation(side))) - { - returnValue = tileEntity; - } - } - - if (tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(type,ForgeDirection.getOrientation(side))) - { - returnValue = tileEntity; - } - } - - return returnValue; - } - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - this.updateConductorTileEntity(world, x, y, z); - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); - } - @Override - public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) - { - return true; - } - public static void updateConductorTileEntity(World world, int x, int y, int z) - { - - for(byte i = 0; i < 6; i++) - { - //Update the tile entity on neighboring blocks - TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); - int type = conductorTileEntity.getType(); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i));; - } - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return new TileEntityPipe(); - } - } - - diff --git a/src/common/BasicPipes/pipes/BlockPump.java b/src/common/BasicPipes/pipes/BlockPump.java deleted file mode 100644 index a5c2680a..00000000 --- a/src/common/BasicPipes/pipes/BlockPump.java +++ /dev/null @@ -1,155 +0,0 @@ -package BasicPipes.pipes; - -import java.util.ArrayList; -import net.minecraft.src.*; - -import java.util.Random; - -public class BlockPump extends BlockContainer -{ - - public BlockPump(int id) - { - super(id, Material.iron); - this.setBlockName("Pump"); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - @Override - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - - - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - return 0; - - - } - @Override - public int getBlockTextureFromSideAndMetadata(int side, int metadata) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - else - { - //If it is the front side - if(side == 3) - { - switch(metadata) - { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; - } - } - //If it is the back side - else if(side == 2) - { - switch(metadata) - { - case 0: return this.blockIndexInTexture + 2; - case 1: return this.blockIndexInTexture + 3; - case 2: return this.blockIndexInTexture + 2; - } - } - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - } - return 0; - } - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * 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; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/blocks.png"; - } - //Per tick - public int conductorCapacity() - { - return 10; - } - 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 - switch(meta) - { - case 0: return new TileEntityPump(); - } - return null; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; - } - } - - diff --git a/src/common/BasicPipes/pipes/ItemGuage.java b/src/common/BasicPipes/pipes/ItemGuage.java deleted file mode 100644 index 0e932049..00000000 --- a/src/common/BasicPipes/pipes/ItemGuage.java +++ /dev/null @@ -1,78 +0,0 @@ -package BasicPipes.pipes; - -import java.util.ArrayList; -import net.minecraft.src.*; - -public class ItemGuage extends Item -{ - private int spawnID; - - public ItemGuage(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("guage"); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 11; - } - return this.iconIndex; - } - @Override - public String getItemName() - { - return "guage"; - } - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) - { - - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int steam = pipeEntity.getStoredLiquid(0); - int type = pipeEntity.getType(); - String typeName = getType(type); - par2EntityPlayer.addChatMessage(typeName +" " + steam); - return true; - } - - - - - return false; - } - public String getType(int type) - { - switch(type) - { - case 0: return "Steam"; - case 1: return "Water"; - case 2: return "Lava"; - case 3: return "Oil"; - case 4: return "Fuel"; - case 5: return "Air"; - default: return "unknow"; - } - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "PipeGuage"; - } - return this.getItemName(); - } - @Override - public String getTextureFile() { - return "/eui/Items.png"; - } - -} diff --git a/src/common/BasicPipes/pipes/ItemParts.java b/src/common/BasicPipes/pipes/ItemParts.java deleted file mode 100644 index da871ae6..00000000 --- a/src/common/BasicPipes/pipes/ItemParts.java +++ /dev/null @@ -1,58 +0,0 @@ -package BasicPipes.pipes; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; - -public class ItemParts extends Item{ - String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; - int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - this.setTabToDisplayOn(CreativeTabs.tabMaterials); - } - @Override - public int getIconFromDamage(int par1) - { - if(par1 < iconID.length) - { - return iconID[par1]; - } - return par1; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return names[itemstack.getItemDamage()]; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < names.length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return "/EUIClient/Textures/Items.png"; - } - @Override - public String getItemName() - { - return "parts"; - } -} - - - - - - diff --git a/src/common/BasicPipes/pipes/ItemPipe.java b/src/common/BasicPipes/pipes/ItemPipe.java deleted file mode 100644 index f6bbb4b8..00000000 --- a/src/common/BasicPipes/pipes/ItemPipe.java +++ /dev/null @@ -1,128 +0,0 @@ -package BasicPipes.pipes; - -import java.util.List; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import BasicPipes.BasicPipesMain; - -public class ItemPipe extends Item -{ - int index = 32;//32 + 4 rows alloted to pipes - String[] names = new String[]{"Steam","Water","Lava","Oil","Fuel","Air","Methain","BioFuel","coolent","NukeWaste"}; - private int spawnID; - - public ItemPipe(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("pipe"); - this.setTabToDisplayOn(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() < names.length ? names[itemstack.getItemDamage()] +" Pipe2" : "EmptyPipe"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < names.length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return "/EUIClient/Textures/Items.png"; - } - @Override - public String getItemName() - { - return "Pipes"; - } - @Override - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.pipeID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int dm = par1ItemStack.getItemDamage(); - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - -} \ No newline at end of file diff --git a/src/common/BasicPipes/pipes/TileEntityCondenser.java b/src/common/BasicPipes/pipes/TileEntityCondenser.java deleted file mode 100644 index 81710298..00000000 --- a/src/common/BasicPipes/pipes/TileEntityCondenser.java +++ /dev/null @@ -1,98 +0,0 @@ -package BasicPipes.pipes; - -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.extend.IElectricUnit; -import BasicPipes.pipes.api.ILiquidProducer; - -public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricUnit { - int tickCount = 0; - int waterStored = 0; - int energyStored = 0; - @Override - public int onProduceLiquid(int type,int maxVol, ForgeDirection side) { - if(type == 1) - { - int tradeW = Math.min(maxVol, waterStored); - waterStored -= tradeW; - return tradeW; - } - return 0; - } - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - } - - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.energyStored = par1NBTTagCompound.getInteger("energyStored"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - } - public void updateEntity() - { - if(energyStored > 100 && tickCount > 200 && waterStored < 10) - { - energyStored -= 100; - waterStored += 1; - tickCount = 0; - } - tickCount++; - } - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1) - { - return true; - } - return false; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - @Override - public void onUpdate(float amps, float voltage, ForgeDirection side) { - // TODO Auto-generated method stub - - } - @Override - public float electricityRequest() { - // TODO Auto-generated method stub - return 0; - } - @Override - public boolean canConnect(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public float getVoltage() { - // TODO Auto-generated method stub - return 0; - } - @Override - public int getTickInterval() { - // TODO Auto-generated method stub - return 0; - } - - - - -} diff --git a/src/common/BasicPipes/pipes/TileEntityPipe.java b/src/common/BasicPipes/pipes/TileEntityPipe.java deleted file mode 100644 index cd93001f..00000000 --- a/src/common/BasicPipes/pipes/TileEntityPipe.java +++ /dev/null @@ -1,267 +0,0 @@ -package BasicPipes.pipes; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.Vector3; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import BasicPipes.BasicPipesMain; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; - -import com.google.common.io.ByteArrayDataInput; -public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver -{ - //The amount stored in the conductor - protected int liquidStored = 0; - //the current set type of the pipe 0-5 - protected int type = 0; - //The maximum amount of electricity this conductor can take - protected int capacity = 5; - private int count = 0; - private boolean intiUpdate = true; - //Stores information on all connected blocks around this tile entity - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - - //Checks if this is the first the tile entity updates - protected boolean firstUpdate = true; - /** - * This function adds a connection between this pipe and other blocks - * @param tileEntity - Must be either a producer, consumer or a conductor - * @param side - side in which the connection is coming from - */ - public void addConnection(TileEntity tileEntity, ForgeDirection side) - { - int sideN = getNumSide(side); - this.connectedBlocks[sideN] = null; - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) - { - this.connectedBlocks[sideN] = tileEntity; - } - } - if(tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) - { - this.connectedBlocks[sideN] = tileEntity; - } - } - } - - - - private int getNumSide(ForgeDirection side) { - -if(side == ForgeDirection.DOWN) -{ - return 0; -} -if(side == ForgeDirection.UP) -{ - return 1; -} -if(side == ForgeDirection.NORTH) -{ - return 2; -} -if(side == ForgeDirection.SOUTH) -{ - return 3; -} -if(side == ForgeDirection.WEST) -{ - return 4; -} -if(side == ForgeDirection.EAST) -{ - return 5; -} - - - return 0; - } - - - - /** - * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). - * @param vols - The amount of vol source is trying to give to this pipe - * @param side - The side of the block in which the liquid came from - * @return vol - The amount of rejected liquid that can't enter the pipe - */ - @Override - public int onReceiveLiquid(int type,int vol, ForgeDirection side) - { - if(type == this.type) - { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); - this.liquidStored += vol - rejectedVolume; - return rejectedVolume; - } - return vol; - } - @Override - public void updateEntity() - { - //cause the block to update itself every tick needs to be change to .5 seconds to reduce load - BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - count++; - if(count >= 30 || intiUpdate) - { - PacketManager.sendTileEntityPacket(this, BasicPipesMain.channel, new Object[]{this.type}); - count = 0; - intiUpdate = false; - } - if(!this.worldObj.isRemote) - { - byte connectedUnits = 0; - byte connectedConductors = 1; - int averageVolume = this.liquidStored; - - Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); - - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) - { - connectedUnits ++; - - if(connectedBlocks[i] instanceof TileEntityPipe) - { - averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - - connectedConductors ++; - } - } - } - } - //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty - averageVolume = Math.max(averageVolume/connectedConductors,0); - if(connectedUnits > 0) - { - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the liquid among the different blocks - if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) - { - if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) - { - int transferVolumeAmount = 0; //amount to be moved - ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - - if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) - { - transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); - } - else if(!(connectedConsumer instanceof TileEntityPipe)) - { - transferVolumeAmount = this.liquidStored; - } - - int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); - } - } - - if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) - { - if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) - { - int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, ForgeDirection.getOrientation(i)); - this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); - } - } - } - } - } - } - } - - /** - * @return Return the stored volume in this pipe. - */ - @Override - public int getStoredLiquid(int type) - { - return this.liquidStored; - } - - - @Override - public int getLiquidCapacity(int type) - { - return 5; - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = par1NBTTagCompound.getInteger("type"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type); - } -//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe - @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - if(type == this.type) - { - return true; - } - return false; - } - //returns liquid type - public int getType() { - return this.type; - } - - //used by the item to set the liquid type on spawn - public void setType(int rType) { - this.type = rType; - - } - - - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try - { - int type = data.readInt(); - if(worldObj.isRemote) - { - this.type = type; - } - } - catch(Exception e) - { - e.printStackTrace(); - } - - - } - -} - diff --git a/src/common/BasicPipes/pipes/TileEntityPump.java b/src/common/BasicPipes/pipes/TileEntityPump.java deleted file mode 100644 index 0d843865..00000000 --- a/src/common/BasicPipes/pipes/TileEntityPump.java +++ /dev/null @@ -1,89 +0,0 @@ -package BasicPipes.pipes; - -import net.minecraft.src.Block; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.electricity.TileEntityElectricUnit; -import universalelectricity.extend.IElectricUnit; -import BasicPipes.pipes.api.ILiquidProducer; - -public class TileEntityPump extends TileEntityElectricUnit implements ILiquidProducer,IElectricUnit { - int dCount = 0; - float eStored = 0; - float eMax = 2000; - int wStored = 0; - int wMax = 10; - @Override - public void onDisable(int duration) { - dCount = duration; - } - - @Override - public boolean isDisabled() { - if(dCount <= 0) - { - return false; - } - return true; - } - - @Override - public void onUpdate(float watts, float voltage, ForgeDirection side) { - super.onUpdate(watts, voltage, side); - if (electricityRequest() > 0 && canConnect(side)) - { - float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); - this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); - } - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - if(bBlock == Block.waterStill.blockID && this.eStored > 1000 && this.wStored < this.wMax) - { - eStored -= 1000; - wStored += 1; - worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); - } - - } - - @Override - public float electricityRequest() { - return Math.max(eMax - eStored,0); - } - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - if(side != ForgeDirection.DOWN) - { - return true; - } - return false; - } - - @Override - public float getVoltage() { - return 240; - } - - @Override - public int getTickInterval() { - return 40; - } - - @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - if(type == 1 && wStored > 0) - { - int tradeW = Math.min(maxVol, wStored); - wStored -= tradeW; - return tradeW; - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1 && side != ForgeDirection.DOWN) - { - return true; - } - return false; - } -} diff --git a/src/common/BasicPipes/pipes/api/ILiquidConsumer.java b/src/common/BasicPipes/pipes/api/ILiquidConsumer.java deleted file mode 100644 index 8189772b..00000000 --- a/src/common/BasicPipes/pipes/api/ILiquidConsumer.java +++ /dev/null @@ -1,35 +0,0 @@ -package BasicPipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - - -public interface ILiquidConsumer -{ - /** - * onRecieveLiquid - * @param vol - The amount this block received. - * @param side - The side of the block in which the liquid came from. - * @parm type - The type of liquid being received - * @return vol - The amount liquid that can't be recieved - */ - public int onReceiveLiquid(int type, int vol, ForgeDirection side); - - /** - * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param forgeDirection - The side in which the electricity is coming from. - * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. - */ - public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection); - - /** - * @return Return the stored liquid of type in this consumer. - */ - public int getStoredLiquid(int type); - - /** - * @return Return the maximum amount of stored liquid this consumer can get. - */ - public int getLiquidCapacity(int type); - -} diff --git a/src/common/BasicPipes/pipes/api/ILiquidProducer.java b/src/common/BasicPipes/pipes/api/ILiquidProducer.java deleted file mode 100644 index 764b1a20..00000000 --- a/src/common/BasicPipes/pipes/api/ILiquidProducer.java +++ /dev/null @@ -1,30 +0,0 @@ -package BasicPipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -/** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia - * - */ -public interface ILiquidProducer -{ - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param maxvol - The maximum vol or requested volume - * @param side - The side - * @return vol - Return a vol of liquid type that is produced - */ - public int onProduceLiquid(int type, int maxVol, ForgeDirection side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canProduceLiquid(int type, ForgeDirection side); -} \ No newline at end of file From c794d118808ccd2af9b0ae86bc3138a368f139c2 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 10:11:13 -0400 Subject: [PATCH 059/115] dido more stuff to make combatible with jenkins. ug --- src/common/SteamPower/BlockMachine.java | 238 ---------- src/common/SteamPower/ItemMachine.java | 65 --- src/common/SteamPower/ItemParts.java | 70 --- src/common/SteamPower/SteamPowerMain.java | 124 ------ src/common/SteamPower/SteamProxy.java | 70 --- src/common/SteamPower/TileEntityMachine.java | 258 ----------- src/common/SteamPower/TileEntityNuller.java | 29 -- src/common/SteamPower/ap/IHeatConsumer.java | 22 - src/common/SteamPower/ap/IHeatProducer.java | 14 - .../SteamPower/boiler/ContainerBoiler.java | 59 --- .../SteamPower/boiler/TileEntityBoiler.java | 271 ------------ .../SteamPower/burner/ContainerFireBox.java | 42 -- .../SteamPower/burner/TileEntityFireBox.java | 203 --------- .../SteamPower/turbine/BlockGenerator.java | 42 -- .../SteamPower/turbine/BlockSteamPiston.java | 161 ------- .../turbine/ContainerGenerator.java | 41 -- src/common/SteamPower/turbine/ItemEngine.java | 63 --- .../SteamPower/turbine/TileEntityGen.java | 63 --- .../turbine/TileEntitySteamPiston.java | 405 ------------------ .../SteamPower/turbine/TileEntitytopGen.java | 69 --- src/minecraft/SteamPower/GUIFireBox.java | 92 ---- src/minecraft/SteamPower/GUIGenerator.java | 80 ---- src/minecraft/SteamPower/GuiBoiler.java | 89 ---- src/minecraft/SteamPower/ModelCenterTank.java | 59 --- src/minecraft/SteamPower/ModelCornerTank.java | 100 ----- src/minecraft/SteamPower/ModelEngine.java | 115 ----- src/minecraft/SteamPower/ModelFurnace.java | 82 ---- src/minecraft/SteamPower/ModelGenerator.java | 136 ------ src/minecraft/SteamPower/ModelTank.java | 154 ------- src/minecraft/SteamPower/ModelToyEngine.java | 242 ----------- src/minecraft/SteamPower/RenderBoiler.java | 62 --- src/minecraft/SteamPower/RenderFurnace.java | 37 -- src/minecraft/SteamPower/RenderGenerator.java | 29 -- .../SteamPower/RenderSteamEngine.java | 49 --- src/minecraft/SteamPower/RenderToyEngine.java | 29 -- .../SteamPower/SteamClientProxy.java | 34 -- 36 files changed, 3698 deletions(-) delete mode 100644 src/common/SteamPower/BlockMachine.java delete mode 100644 src/common/SteamPower/ItemMachine.java delete mode 100644 src/common/SteamPower/ItemParts.java delete mode 100644 src/common/SteamPower/SteamPowerMain.java delete mode 100644 src/common/SteamPower/SteamProxy.java delete mode 100644 src/common/SteamPower/TileEntityMachine.java delete mode 100644 src/common/SteamPower/TileEntityNuller.java delete mode 100644 src/common/SteamPower/ap/IHeatConsumer.java delete mode 100644 src/common/SteamPower/ap/IHeatProducer.java delete mode 100644 src/common/SteamPower/boiler/ContainerBoiler.java delete mode 100644 src/common/SteamPower/boiler/TileEntityBoiler.java delete mode 100644 src/common/SteamPower/burner/ContainerFireBox.java delete mode 100644 src/common/SteamPower/burner/TileEntityFireBox.java delete mode 100644 src/common/SteamPower/turbine/BlockGenerator.java delete mode 100644 src/common/SteamPower/turbine/BlockSteamPiston.java delete mode 100644 src/common/SteamPower/turbine/ContainerGenerator.java delete mode 100644 src/common/SteamPower/turbine/ItemEngine.java delete mode 100644 src/common/SteamPower/turbine/TileEntityGen.java delete mode 100644 src/common/SteamPower/turbine/TileEntitySteamPiston.java delete mode 100644 src/common/SteamPower/turbine/TileEntitytopGen.java delete mode 100644 src/minecraft/SteamPower/GUIFireBox.java delete mode 100644 src/minecraft/SteamPower/GUIGenerator.java delete mode 100644 src/minecraft/SteamPower/GuiBoiler.java delete mode 100644 src/minecraft/SteamPower/ModelCenterTank.java delete mode 100644 src/minecraft/SteamPower/ModelCornerTank.java delete mode 100644 src/minecraft/SteamPower/ModelEngine.java delete mode 100644 src/minecraft/SteamPower/ModelFurnace.java delete mode 100644 src/minecraft/SteamPower/ModelGenerator.java delete mode 100644 src/minecraft/SteamPower/ModelTank.java delete mode 100644 src/minecraft/SteamPower/ModelToyEngine.java delete mode 100644 src/minecraft/SteamPower/RenderBoiler.java delete mode 100644 src/minecraft/SteamPower/RenderFurnace.java delete mode 100644 src/minecraft/SteamPower/RenderGenerator.java delete mode 100644 src/minecraft/SteamPower/RenderSteamEngine.java delete mode 100644 src/minecraft/SteamPower/RenderToyEngine.java delete mode 100644 src/minecraft/SteamPower/SteamClientProxy.java diff --git a/src/common/SteamPower/BlockMachine.java b/src/common/SteamPower/BlockMachine.java deleted file mode 100644 index 781e8ea6..00000000 --- a/src/common/SteamPower/BlockMachine.java +++ /dev/null @@ -1,238 +0,0 @@ -package SteamPower; - -import java.util.List; -import java.util.Random; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityItem; -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.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import SteamPower.boiler.TileEntityBoiler; -import SteamPower.burner.TileEntityFireBox; -import SteamPower.turbine.TileEntitySteamPiston; - -public class BlockMachine extends universalelectricity.extend.BlockMachine -{ - - private Random furnaceRand = new Random(); - private static boolean keepFurnaceInventory = true; - - public BlockMachine(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - this.setCreativeTab(CreativeTabs.tabBlock); - - } - @Override - protected int damageDropped(int metadata) - { - return metadata; - } - @Override - public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) - { - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if(tileEntity instanceof TileEntityFireBox) - { - if(((TileEntityFireBox)tileEntity).generateRate > 0) - { - int var6 = ((TileEntityFireBox) tileEntity).getDirection(); - float var7 = (float)x + 0.5F; - float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; - float var9 = (float)z + 0.5F; - float var10 = 0.52F; - float var11 = par5Random.nextFloat() * 0.6F - 0.3F; - - if (var6 == 4) - { - par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 2) - { - par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 1) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 3) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - } - } - } - } - - @Override - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - case 4: tileEntity.setDirection(1); break; - } - - return true; - } - /** - * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the - * block. - */ - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntityBoiler) - { - TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); - } - if(blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); - } - } - - return true; - } - } - @Override - public TileEntity createNewTileEntity(World var1,int meta) - { - switch(meta) - { - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 15: return new TileEntityNuller(); - } - return null; - } - - /** - * Called when the block is placed in the world. - */ - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) - { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - } - } - /** - * Called whenever the block is removed. - */ - @Override - public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ - if (!keepFurnaceInventory) - { - TileEntityMachine var5 = null; - TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); - if(entityBox instanceof TileEntityFireBox) - { - var5 = (TileEntityFireBox)entityBox; - } - else if(entityBox instanceof TileEntityBoiler) - { - var5 = (TileEntityBoiler)entityBox; - } - if (var5 != null) - { - for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) - { - ItemStack var7 = var5.getStackInSlot(var6); - - if (var7 != null) - { - float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - - while (var7.stackSize > 0) - { - int var11 = this.furnaceRand.nextInt(21) + 10; - - if (var11 > var7.stackSize) - { - var11 = var7.stackSize; - } - - var7.stackSize -= var11; - EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); - - if (var7.hasTagCompound()) - { - var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); - } - - float var13 = 0.05F; - var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); - var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); - par1World.spawnEntityInWorld(var12); - } - } - } - } - } - - super.breakBlock(par1World, par2, par3, par4, par5, par6); - } - - @Override - public String getTextureFile() - { - return "/EUIClient/textures/blocks/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return -1; - } - -} diff --git a/src/common/SteamPower/ItemMachine.java b/src/common/SteamPower/ItemMachine.java deleted file mode 100644 index 4945da39..00000000 --- a/src/common/SteamPower/ItemMachine.java +++ /dev/null @@ -1,65 +0,0 @@ -package SteamPower; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.src.*; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - this.setIconIndex(21); - this.setTabToDisplayOn(CreativeTabs.tabBlock); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 1)); - par3List.add(new ItemStack(this, 1, 2)); - par3List.add(new ItemStack(this, 1, 15)); - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 1: return 23; - case 2: return 22; - case 15: return 22; - } - return this.iconIndex+par1; - } - @Override - public int getMetadata(int metadata) - { - return metadata; - } - @Override - public String getItemName() - { - return "Machine"; - } - @Override - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalProcessor"; - case 1: return "Boiler"; - case 2: return "FireBox"; - case 3: return "SteamGen"; - case 15: return "EnergyNuller"; - } - return this.getItemName(); - } - } - diff --git a/src/common/SteamPower/ItemParts.java b/src/common/SteamPower/ItemParts.java deleted file mode 100644 index 2d759604..00000000 --- a/src/common/SteamPower/ItemParts.java +++ /dev/null @@ -1,70 +0,0 @@ -package SteamPower; - -import java.util.ArrayList; - -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; - -public class ItemParts extends Item{ - - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 3; - case 1: return 4; - case 2: return 5; - case 3: return 6; - case 4: return 7; - case 5: return 8; - case 6: return 9; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; - } - public String getItemName() - { - return "parts"; - } - - - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "Tank"; - case 3: return "Valve"; - case 4: return "Tube"; - case 5: return "Seal"; - case 6: return "Rivits"; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,4)); - itemList.add(new ItemStack(this, 1,5)); - itemList.add(new ItemStack(this, 1,6)); - - } -} - - - diff --git a/src/common/SteamPower/SteamPowerMain.java b/src/common/SteamPower/SteamPowerMain.java deleted file mode 100644 index b7e38712..00000000 --- a/src/common/SteamPower/SteamPowerMain.java +++ /dev/null @@ -1,124 +0,0 @@ -package SteamPower; -import java.io.File; - -import SteamPower.turbine.BlockGenerator; -import SteamPower.turbine.BlockSteamPiston; -import SteamPower.turbine.ItemEngine; -import SteamPower.turbine.TileEntitytopGen; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.Block; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import universalelectricity.UniversalElectricity; -import universalelectricity.basiccomponents.BasicComponents; -import universalelectricity.network.PacketManager; -import BasicPipes.BasicPipesMain; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.Init; -import cpw.mods.fml.common.Mod.Instance; -import cpw.mods.fml.common.Mod.PostInit; -import cpw.mods.fml.common.Mod.PreInit; -import cpw.mods.fml.common.SidedProxy; -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.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "V8") -@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) - -public class SteamPowerMain{ - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/SteamPower.cfg"))); - private static int BlockID= configurationProperties(); - public static int EngineItemID; - public static int EngineID; - public static int genID; - public static int genOutput; - public static int steamOutBoiler; - public static int pipeLoss; - public static int boilerHeat; - public static int fireOutput; - public static final String channel = "SPpack"; - public static Block machine = new BlockMachine(BlockID).setBlockName("machine"); - public static Block engine = new BlockSteamPiston(EngineID).setBlockName("SteamEngien"); - public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); - public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); - @Instance - public static SteamPowerMain instance; - - @SidedProxy(clientSide = "SteamPower.SteamClientProxy", serverSide = "SteamPower.SteamProxy") - public static SteamProxy proxy; - public static String textureFile = "/EUIClient/Textures/"; - public static int configurationProperties() - { - config.load(); - BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); - EngineItemID = Integer.parseInt(config.getOrCreateIntProperty("EngineItem", Configuration.CATEGORY_ITEM, 30308).value); - EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); - genID = Integer.parseInt(config.getOrCreateIntProperty("ElecGenID", Configuration.CATEGORY_BLOCK, 3032).value); - genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); - steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); - boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); - fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJMax", Configuration.CATEGORY_GENERAL,250).value); - config.save(); - return BlockID; - } - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - instance = this; - NetworkRegistry.instance().registerGuiHandler(this, this.proxy); - proxy.preInit(); - GameRegistry.registerBlock(machine, ItemMachine.class); - GameRegistry.registerBlock(engine); - GameRegistry.registerBlock(gen); - } - @Init - public void load(FMLInitializationEvent evt) - { - proxy.init(); - GameRegistry.registerTileEntity(TileEntityNuller.class, "EUNuller"); - GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); - //Names............... - LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); - LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); - LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); - LanguageRegistry.addName((new ItemStack(machine, 1, 15)), "EUVampire"); - - - } - @PostInit - public void postInit(FMLPostInitializationEvent event) - { - - proxy.postInit(); - //Crafting - /** - * case 0: return new TileEntityGrinder(); <-Removed - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 3: return new TileEntityGenerator(); - case 14: return new TileEntityCondenser();<-Removed - case 15: return new TileEntityNuller();<-Just for testing Not craftable - */ - GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(BasicPipesMain.parts, 1,5), - '@',new ItemStack(BasicComponents.itemSteelPlate), - 'O',new ItemStack(BasicPipesMain.parts, 1,1), - 'V',new ItemStack(BasicPipesMain.parts, 1,6)}); - GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", - 'F',Block.stoneOvenIdle, - '@',new ItemStack(BasicComponents.itemSteelPlate)}); - GameRegistry.addRecipe(new ItemStack(itemEngine, 1, 0), new Object [] {"@T@", "PMP", "@T@", - 'T',new ItemStack(BasicPipesMain.parts, 1,0), - '@',new ItemStack(BasicComponents.itemSteelPlate), - 'P',Block.pistonBase, - 'M',new ItemStack(BasicComponents.itemMotor)}); - } - -} diff --git a/src/common/SteamPower/SteamProxy.java b/src/common/SteamPower/SteamProxy.java deleted file mode 100644 index b649f4d8..00000000 --- a/src/common/SteamPower/SteamProxy.java +++ /dev/null @@ -1,70 +0,0 @@ -package SteamPower; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import SteamPower.boiler.ContainerBoiler; -import SteamPower.boiler.TileEntityBoiler; -import SteamPower.burner.ContainerFireBox; -import SteamPower.burner.TileEntityFireBox; -import SteamPower.turbine.ContainerGenerator; -import SteamPower.turbine.TileEntityGen; -import SteamPower.turbine.TileEntitySteamPiston; -import SteamPower.turbine.TileEntitytopGen; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class SteamProxy implements IGuiHandler{ - - public void preInit() - { - - } - public void init() - { - GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); - GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); - GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); - GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); - - } - 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) - { - case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new GUIGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); - } - } - - 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) - { - case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - case 1: return new ContainerBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new ContainerGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); - } - } - - return null; - } -} diff --git a/src/common/SteamPower/TileEntityMachine.java b/src/common/SteamPower/TileEntityMachine.java deleted file mode 100644 index 7bbca045..00000000 --- a/src/common/SteamPower/TileEntityMachine.java +++ /dev/null @@ -1,258 +0,0 @@ -package SteamPower; - -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.electricity.TileEntityElectricUnit; -import universalelectricity.extend.IRotatable; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import net.minecraft.src.*; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -public class TileEntityMachine extends TileEntityElectricUnit implements IInventory, ISidedInventory -{ - public int facing = 0; - private int count = 0; - public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; - public int getTickInterval() - { - return 5; - - } - private int getInvSize() { - return 1; - } - public int getDirection() - { - return this.facing; - } - - public void setDirection(int i) - { - this.facing = i; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", this.facing); - //inventory - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.storedItems.length; ++var3) - { - if (this.storedItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.storedItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - //inventory - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.storedItems = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.storedItems.length) - { - this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - //vars - this.facing = par1NBTTagCompound.getInteger("facing"); - } - - @Override - public float electricityRequest() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public boolean canUpdate() - { - return true; - } - public Object[] getSendData() - { - return new Object[]{}; - } - public int getNumSide(ForgeDirection side) - { - if(side == ForgeDirection.DOWN) - { - return 0; - } - if(side == ForgeDirection.UP) - { - return 1; - } - if(side == ForgeDirection.NORTH) - { - return 2; - } - if(side == ForgeDirection.SOUTH) - { - return 3; - } - if(side == ForgeDirection.WEST) - { - return 4; - } - if(side == ForgeDirection.EAST) - { - return 5; - } - return 0; - } - - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - - if(!worldObj.isRemote) - { - PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); - } - } - - - ////////////////////////// - //I Inventory shit - ///////////////////////// - public int getSizeInventory() - { - return this.storedItems.length; - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.storedItems[par1]; - } - - public ItemStack decrStackSize(int par1, int par2) - { - if (this.storedItems[par1] != null) - { - ItemStack var3; - - if (this.storedItems[par1].stackSize <= par2) - { - var3 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var3; - } - else - { - var3 = this.storedItems[par1].splitStack(par2); - - if (this.storedItems[par1].stackSize == 0) - { - this.storedItems[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.storedItems[par1] != null) - { - ItemStack var2 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.storedItems[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public int getStartInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public String getInvName() { - // TODO Auto-generated method stub - return "SteamMachine"; - } - @Override - public void openChest() { - // TODO Auto-generated method stub - - } - @Override - public void closeChest() { - // TODO Auto-generated method stub - - } -} \ 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 74a5f572..00000000 --- a/src/common/SteamPower/TileEntityNuller.java +++ /dev/null @@ -1,29 +0,0 @@ -package SteamPower; - -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.extend.IElectricUnit; - -public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { - - public float electricityRequest() - { - return 100; - } - @Override - public boolean canReceiveFromSide(ForgeDirection side) - { - return true; - } - public float getVoltage() - { - return 1000; - } - public int getTickInterval() - { - return 10; - } - public boolean canConnect(ForgeDirection side) - { - return true; - } -} diff --git a/src/common/SteamPower/ap/IHeatConsumer.java b/src/common/SteamPower/ap/IHeatConsumer.java deleted file mode 100644 index 8d4f24c1..00000000 --- a/src/common/SteamPower/ap/IHeatConsumer.java +++ /dev/null @@ -1,22 +0,0 @@ -package SteamPower.ap; - -/** - * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. - * @author Darkguardsman code sourced from Calclavia - * - */ -public interface IHeatConsumer -{ - /** - * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). - * @param vol - The amount of steam this block received - * @param side - The side of the block in which the electricity came from. - * @return vol - The amount of rejected steam to be sent to back - */ - public float onReceiveHeat(float jouls, int side); - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - public float getStoredHeat(); -} \ No newline at end of file diff --git a/src/common/SteamPower/ap/IHeatProducer.java b/src/common/SteamPower/ap/IHeatProducer.java deleted file mode 100644 index 4b729111..00000000 --- a/src/common/SteamPower/ap/IHeatProducer.java +++ /dev/null @@ -1,14 +0,0 @@ -package SteamPower.ap; - - -public interface IHeatProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param jouls - The maximum jouls can be transfered - * @param side - The side of block in which the conductor is on - * @return jouls - Return jouls to consumer - */ - public float onProduceHeat(float jouls, int side); -} \ No newline at end of file diff --git a/src/common/SteamPower/boiler/ContainerBoiler.java b/src/common/SteamPower/boiler/ContainerBoiler.java deleted file mode 100644 index c6ab4323..00000000 --- a/src/common/SteamPower/boiler/ContainerBoiler.java +++ /dev/null @@ -1,59 +0,0 @@ -package SteamPower.boiler; -import net.minecraft.src.*; - -public class ContainerBoiler extends Container -{ - private TileEntityBoiler boiler; - private int lastCookTime = 0; - private int lastBurnTime = 0; - private int lastItemBurnTime = 0; - - public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) - { - this.boiler = par2TileEntityboiler; - this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - - - public void updateProgressBar(int par1, int par2) - { - if (par1 == 0) - { - // this.boiler.furnaceCookTime = par2; - } - - if (par1 == 1) - { - //this.boiler.boilerRunTime = par2; - } - - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.boiler.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/src/common/SteamPower/boiler/TileEntityBoiler.java b/src/common/SteamPower/boiler/TileEntityBoiler.java deleted file mode 100644 index f7cf2fda..00000000 --- a/src/common/SteamPower/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,271 +0,0 @@ -package SteamPower.boiler; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.network.IPacketReceiver; -import BasicPipes.TradeHelper; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; -import SteamPower.SteamPowerMain; -import SteamPower.TileEntityMachine; -import SteamPower.burner.TileEntityFireBox; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, ILiquidConsumer -{ - - /** - * The ItemStacks that hold the items currently being used in the furnace - */ - - - /** The number of ticks that the boiler will keep burning */ - public int RunTime = 0; - /** The ammount of energy stored before being add to run Timer */ - public int energyStore = 0; - /** The ammount of water stored */ - public int waterStored = 0; - /** The ammount of steam stored */ - public int steamStored = 0; - /** The ammount of heat stored */ - public int heatStored = 0; - public int heatMax = 10000; - /** The ammount of heat stored */ - public int hullHeat = 0; - public int hullHeatMax = 4700; - private int heatTick = 0; - public int tankCount = 0; - private int heatNeeded = SteamPowerMain.boilerHeat; // kilo joules - int count = 0; - boolean hullHeated = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - int steamMax = 140; - public boolean isBeingHeated = false; - public String getInvName() - { - return "container.boiler"; - } - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, - (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - RunTime = dataStream.readInt(); - energyStore = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - heatStored = dataStream.readInt(); - hullHeat = dataStream.readInt(); - heatTick = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.RunTime = par1NBTTagCompound.getShort("BurnTime"); - this.energyStore = par1NBTTagCompound.getInteger("energyStore"); - this.steamStored = par1NBTTagCompound.getInteger("steamStore"); - this.heatStored = par1NBTTagCompound.getInteger("heatStore"); - this.waterStored = par1NBTTagCompound.getInteger("waterStore"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); - par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); - par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); - par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); - par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); - par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); - - } - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - @Override - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - - //update/resets connection list - TileEntity[] entityList = TradeHelper.getSourounding(this); - tankCount = 0; - for(int c = 0; c< 6; c++) - { - if(entityList[c] instanceof TileEntityBoiler) - { - connectedBlocks[c] = entityList[c]; - if(c != 0 && c != 1) - { - tankCount++; - } - } - else - { - connectedBlocks[c] = null; - } - } - - hullHeated = false; - if(hullHeat >= hullHeatMax) - { - hullHeated = true; - } - else - { - if(!worldObj.isRemote) - { - hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); - } - } - if(!worldObj.isRemote) - { - emptyBuckets();//adds water from container slot - this.waterStored = TradeHelper.shareLiquid(this, 1, false); - this.steamStored = TradeHelper.shareLiquid(this, 0, true); - if(waterStored > 0 && hullHeated && heatStored > heatNeeded) - { - heatStored = Math.max(heatStored - heatNeeded, 0); - --waterStored; - steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); - } - TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); - this.isBeingHeated = false; - if(blockE instanceof TileEntityFireBox) - { - this.isBeingHeated = true; - heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); - } - } - super.onUpdate(watts, voltage, side); - } - private void emptyBuckets() - { - if (storedItems[0] != null) - { - if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) - { - if((int)waterStored < getLiquidCapacity(1)) - { - ++waterStored; - this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); - this.onInventoryChanged(); - } - } - } - - } - public int precentHeated() { - int var1 = 0; - if(hullHeat < 100) - { - var1 = (int)(100 *(hullHeat/hullHeatMax)); - } - else - { - var1 = 100; - } - return var1; - } - @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 0) - { - int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(0), 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; - } - if(type == 1) - { - int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); - this.waterStored += vol - rejectedWater; - return rejectedWater; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type,ForgeDirection side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 1) - { - return this.waterStored; - } - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type ==1) - { - return 14; - } - if(type == 0) - { - return steamMax; - } - return 0; - } - @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - if(type == 0) - { - if(steamStored > 1) - { - this.steamStored -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 0) - { - return true; - } - return false; - } - - - } diff --git a/src/common/SteamPower/burner/ContainerFireBox.java b/src/common/SteamPower/burner/ContainerFireBox.java deleted file mode 100644 index f4176fd4..00000000 --- a/src/common/SteamPower/burner/ContainerFireBox.java +++ /dev/null @@ -1,42 +0,0 @@ -package SteamPower.burner; - -import net.minecraft.src.*; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} diff --git a/src/common/SteamPower/burner/TileEntityFireBox.java b/src/common/SteamPower/burner/TileEntityFireBox.java deleted file mode 100644 index 9d5e914b..00000000 --- a/src/common/SteamPower/burner/TileEntityFireBox.java +++ /dev/null @@ -1,203 +0,0 @@ -package SteamPower.burner; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.network.IPacketReceiver; -import BasicPipes.TradeHelper; -import SteamPower.TileEntityMachine; -import SteamPower.ap.IHeatProducer; -import SteamPower.boiler.TileEntityBoiler; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer -{ - //max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - //Current generation rate based on hull heat. In TICKS. - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - private int getInvSize() { - return 1; - } - public int getTickInterval() - { - return 5; - - } - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - addConnection(); - if(!worldObj.isRemote) - { - sharCoal(); - } - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if(blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - if (!this.worldObj.isRemote){ - - - maxGenerateRate = SteamPower.SteamPowerMain.fireOutput + (connectedUnits*5); - - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. - if (this.storedItems[0] != null && isConnected) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - if(isConnected) - { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); - } - } - //Loose heat when the generator is not connected or if there is no coal in the inventory. - if(this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate-5, 0); - } - } - - //gets all connected fireBoxes and shares its supply of coal - public void sharCoal(){ - for(int i =0; i<6;i++) - { - - if(connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if(this.storedItems[0] != null) - { - if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) - { - if(connectedConsumer.storedItems[0] != null) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; - if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); - connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; - this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem()); - this.storedItems[0].stackSize -= 1; - } - } - } - } - } - - - } - public void addConnection() - { - connectedUnits = 0; - TileEntity[] aEntity = TradeHelper.getSourounding(this); - for(int i = 0; i<6; i++) - { - - - if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity[i]; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); - } - @Override - public String getInvName() { - return "FireBox"; - } - public float onProduceHeat(float jouls, int side) { - // TODO Auto-generated method stub - return Math.min(generateRate*getTickInterval(),jouls); - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - connectedUnits = dataStream.readInt(); - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} diff --git a/src/common/SteamPower/turbine/BlockGenerator.java b/src/common/SteamPower/turbine/BlockGenerator.java deleted file mode 100644 index 47e9c385..00000000 --- a/src/common/SteamPower/turbine/BlockGenerator.java +++ /dev/null @@ -1,42 +0,0 @@ -package SteamPower.turbine; - -import java.util.ArrayList; - -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 BlockGenerator extends universalelectricity.extend.BlockMachine { - - public BlockGenerator(int id) { - super("Generator", id, Material.iron); - this.setCreativeTab(CreativeTabs.tabBlock); - } - @Override - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,0)); - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return -1; - } - @Override - public TileEntity createNewTileEntity(World world) - { - return new TileEntityGen(); - } -} diff --git a/src/common/SteamPower/turbine/BlockSteamPiston.java b/src/common/SteamPower/turbine/BlockSteamPiston.java deleted file mode 100644 index f30cee94..00000000 --- a/src/common/SteamPower/turbine/BlockSteamPiston.java +++ /dev/null @@ -1,161 +0,0 @@ -package SteamPower.turbine; - -import java.util.List; -import java.util.Random; - -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 SteamPower.SteamPowerMain; -import SteamPower.TileEntityMachine; - -public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ - - public BlockSteamPiston(int par1) { - super("SteamEngine", par1, Material.iron); - - } - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntitySteamPiston) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); - } - if(blockEntity instanceof TileEntitytopGen) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); - } - } - return true; - } - } - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) - { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - } - } - public TileEntity createNewTileEntity(World var1) - { - return null; - } - public void breakBlock(World world, int x, int y, int z,int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - if(world.getBlockId(x, y+1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)> 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - else - if(meta > 4) - { - if(world.getBlockId(x, y-1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)< 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return -1; - } - @Override - public TileEntity createNewTileEntity(World world, int metadata) - { - if(metadata < 4) - { - return new TileEntitySteamPiston(); - } - if(metadata == 14) - { - return new TileEntitytopGen(); - } - return null; - } - public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) - { - int meta = par1World.getBlockMetadata(par2, par3, par4); - boolean var7 = false; - if (meta == 1) - { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - var7 = true; - } - } - else - { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - if (var7) - { - if (!par1World.isRemote) - { - this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); - } - } - } - @Override - public int idDropped(int par1, Random par2Random, int par3) - { - return SteamPowerMain.itemEngine.shiftedIndex; - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3+1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); - } -} diff --git a/src/common/SteamPower/turbine/ContainerGenerator.java b/src/common/SteamPower/turbine/ContainerGenerator.java deleted file mode 100644 index 0bc3ceee..00000000 --- a/src/common/SteamPower/turbine/ContainerGenerator.java +++ /dev/null @@ -1,41 +0,0 @@ -package SteamPower.turbine; - -import net.minecraft.src.*; - -public class ContainerGenerator extends Container -{ - private TileEntitySteamPiston tileEntity; - - public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/src/common/SteamPower/turbine/ItemEngine.java b/src/common/SteamPower/turbine/ItemEngine.java deleted file mode 100644 index 8fe13df8..00000000 --- a/src/common/SteamPower/turbine/ItemEngine.java +++ /dev/null @@ -1,63 +0,0 @@ -package SteamPower.turbine; -import java.util.List; - -import SteamPower.SteamPowerMain; -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.MathHelper; -import net.minecraft.src.World; - -public class ItemEngine extends Item -{ - public ItemEngine(int par1) - { - super(par1); - this.maxStackSize = 5; - this.setTabToDisplayOn(CreativeTabs.tabBlock); - this.setIconIndex(21); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(this, 1, 0)); - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; - } - @Override - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - if (par3World.isRemote) - { - return false; - } - - Block var11 = SteamPowerMain.engine; - int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - - if (ePlayer.canPlayerEdit(par4, par5, par6)) - { - ++par5; - if (var11.canPlaceBlockAt(par3World, par4, par5, par6)) - { - par3World.editingBlocks = true; - par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, 1); - par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); - par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); - par3World.editingBlocks = false; - --par1ItemStack.stackSize; - return true; - } - } - - return false; - } -} diff --git a/src/common/SteamPower/turbine/TileEntityGen.java b/src/common/SteamPower/turbine/TileEntityGen.java deleted file mode 100644 index 4e5b5da4..00000000 --- a/src/common/SteamPower/turbine/TileEntityGen.java +++ /dev/null @@ -1,63 +0,0 @@ -package SteamPower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraftforge.common.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.extend.IElectricUnit; -import universalelectricity.network.IPacketReceiver; -import SteamPower.TileEntityMachine; - -public class TileEntityGen extends TileEntityMachine implements IPacketReceiver,IElectricUnit -{ - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - // TODO Auto-generated method stub - - } - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - if(!worldObj.isRemote) - { - - } - } - - - public float electricityRequest() - { - return 0; - - } - public boolean canConnect(ForgeDirection side) - { - int face = this.facing; - if(side != ForgeDirection.UP && side != ForgeDirection.DOWN) - { - return true; - } - return false; - - } - public boolean canReceiveFromSide(ForgeDirection side) - { - return false; - } - public float getVoltage() - { - return 120; - } - - public int getTickInterval() - { - return 10; - } - -} diff --git a/src/common/SteamPower/turbine/TileEntitySteamPiston.java b/src/common/SteamPower/turbine/TileEntitySteamPiston.java deleted file mode 100644 index a056964e..00000000 --- a/src/common/SteamPower/turbine/TileEntitySteamPiston.java +++ /dev/null @@ -1,405 +0,0 @@ -package SteamPower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.Vector3; -import universalelectricity.electricity.ElectricityManager; -import universalelectricity.extend.IElectricUnit; -import universalelectricity.extend.TileEntityConductor; -import universalelectricity.network.IPacketReceiver; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; -import SteamPower.SteamPowerMain; -import SteamPower.TileEntityMachine; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory -{ - //Maximum possible generation rate of watts in SECONDS - public int maxGenerateRate = 1000; - public int waterStored = 0; - public int steamStored = 0; - public int steamConsumed = 0; - public float position = 0; - public int count = 0; - //Current generation rate based on hull heat. In TICKS. - public float generateRate = 0; - //public TileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int genTime = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - public TileEntityConductor connectedElectricUnit = null; - public boolean isConnected = false; - private boolean posT = true; - @Override - public boolean canConnect(ForgeDirection side) - { - return true; - } - public int getTickInterval() - { - return 10; - - } - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - count++; - float cPercent = (generateRate/10); - int cCount = 1; - if(cPercent > 25f) - { - cCount = 2; - } - if(cPercent > 50f) - { - cCount = 3; - } - if(cPercent > 75f) - { - cCount = 4; - } - if(generateRate > 0) - { - - if(position < 9f && posT ) - { - position+= cCount; - } - else - { - posT = false; - } - if(position > 1f && !posT ) - { - position-= cCount; - } - else - { - posT = true; - } - count =0; - } - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if(ent instanceof TileEntitytopGen) - { - isConnected = true; - } - - this.connectedElectricUnit = null; - //Check nearby blocks and see if the conductor is full. If so, then it is connected - for(int i = 0;i<6;i++) - { - TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), - ForgeDirection.getOrientation(i)); - if (tileEntity instanceof TileEntityConductor) - { - if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) - { - this.connectedElectricUnit = (TileEntityConductor)tileEntity; - } - } - } - - if(!this.worldObj.isRemote) - { - - - if(!this.isDisabled()) - { - //Adds time to runTime by consuming steam - if(this.genTime <= 0) - { - if(steamStored > 0) - { - --steamStored; - ++steamConsumed; - if(steamConsumed >= SteamPowerMain.steamOutBoiler) - { - ++waterStored; - steamConsumed = 0; - } - genTime += 65; - } - } - - //Empties water from tank to buckets - if (this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) - { - if(this.waterStored > 0) - { - this.containingItems[0] = new ItemStack(Item.bucketWater,1); - --waterStored; - } - } - } - - //Starts generating electricity if the device is heated up - if (this.genTime > 0) - { - this.genTime --; - - if(this.connectedElectricUnit != null) - { - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); - } - } - - if(this.connectedElectricUnit == null || this.genTime <= 0) - { - this.generateRate = (float)Math.max(this.generateRate-0.05, 0); - } - - if(this.generateRate > 1) - { - ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); - } - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); - this.steamStored = par1NBTTagCompound.getInteger("steamStored"); - this.generateRate = par1NBTTagCompound.getFloat("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); - par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); - par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } - @Override - public int getStartInventorySide(ForgeDirection side) - { - return 0; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { return 0; } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } - } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } - - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - - @Override - public int onProduceLiquid(int type, int Vol, ForgeDirection side) { - if(type == 1) - { - if(this.waterStored > 0) - { - int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); - this.waterStored += waterStored - rejectedSteam; - return rejectedSteam; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1) - { - return true; - } - return false; - } - - @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 0) - { - int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - if(type == 0) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(int type) { - if(type == 0) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(int type) { - if(type == 0) - { - return 100; - } - return 0; - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; - } - - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - steamConsumed = dataStream.readInt(); - generateRate = dataStream.readFloat(); - genTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} diff --git a/src/common/SteamPower/turbine/TileEntitytopGen.java b/src/common/SteamPower/turbine/TileEntitytopGen.java deleted file mode 100644 index 918d3ca3..00000000 --- a/src/common/SteamPower/turbine/TileEntitytopGen.java +++ /dev/null @@ -1,69 +0,0 @@ -package SteamPower.turbine; - -import com.google.common.io.ByteArrayDataInput; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.extend.IElectricUnit; -import universalelectricity.network.IPacketReceiver; -import BasicPipes.pipes.api.ILiquidConsumer; -import BasicPipes.pipes.api.ILiquidProducer; -import SteamPower.TileEntityMachine; - -public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { -public TileEntitySteamPiston genB = null; - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - if(!this.worldObj.isRemote) - { - super.onUpdate(watts, voltage, side); - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); - if(ent instanceof TileEntitySteamPiston) - { - genB = (TileEntitySteamPiston)ent; - } - } - } - @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.onProduceLiquid(type, maxVol, side) : 0; - } - - @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.canProduceLiquid(type, side) : false; - } - - @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.onReceiveLiquid(type, vol, side) : vol; - } - - @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.canRecieveLiquid(type, side): false; - } - - @Override - public int getStoredLiquid(int type) { - // TODO Auto-generated method stub - return genB !=null ? genB.getStoredLiquid(type): 0; - } - - @Override - public int getLiquidCapacity(int type) { - // TODO Auto-generated method stub - return genB !=null ? genB.getLiquidCapacity(type): 0; - } - -} diff --git a/src/minecraft/SteamPower/GUIFireBox.java b/src/minecraft/SteamPower/GUIFireBox.java deleted file mode 100644 index a5cb69ff..00000000 --- a/src/minecraft/SteamPower/GUIFireBox.java +++ /dev/null @@ -1,92 +0,0 @@ -package SteamPower; - -import java.text.DecimalFormat; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import SteamPower.burner.ContainerFireBox; -import SteamPower.burner.TileEntityFireBox; - -public class GUIFireBox extends GuiContainer -{ - private TileEntityFireBox tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("FireBox", 55, 6, 4210752); - this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); - String displayText = ""; - if(!tileEntity.isConnected) - { - displayText = "No Boiler"; - } - else if(tileEntity.storedItems[0] != null) - { - if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) - { - displayText = "No Fuel"; - } - else{ - if(tileEntity.generateRate*20 < 20) - { - displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = getWattDisplay((tileEntity.generateRate*20)); - } - } - } - this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" KJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/src/minecraft/SteamPower/GUIGenerator.java b/src/minecraft/SteamPower/GUIGenerator.java deleted file mode 100644 index d0200665..00000000 --- a/src/minecraft/SteamPower/GUIGenerator.java +++ /dev/null @@ -1,80 +0,0 @@ -package SteamPower; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import SteamPower.turbine.ContainerGenerator; -import SteamPower.turbine.TileEntitySteamPiston; - - public class GUIGenerator extends GuiContainer - { - private TileEntitySteamPiston tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) - { - super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - if(tileEntity.connectedElectricUnit == null) - { - displayText = "Not Connected"; - } - else - if(tileEntity.generateRate*20 <= 0) - { - if(tileEntity.steamStored> 0) - { - displayText = "Power Full"; - } - if(tileEntity.steamStored<= 0) - { - displayText = "No Steam"; - } - } - - else if(tileEntity.generateRate*20 < 20) - { - displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = universalelectricity.UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); - } - displayText2 = "water" + "-" + tileEntity.waterStored; - displayText3 = "steam" + "-" + tileEntity.steamStored; - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } diff --git a/src/minecraft/SteamPower/GuiBoiler.java b/src/minecraft/SteamPower/GuiBoiler.java deleted file mode 100644 index 786e4daf..00000000 --- a/src/minecraft/SteamPower/GuiBoiler.java +++ /dev/null @@ -1,89 +0,0 @@ -package SteamPower; -import java.text.DecimalFormat; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import SteamPower.boiler.ContainerBoiler; -import SteamPower.boiler.TileEntityBoiler; - -public class GuiBoiler extends GuiContainer -{ - private TileEntityBoiler boilerInventory; - - public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) - { - super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); - this.boilerInventory = par2TileEntityGrinder; - } - - /** - * Draw the foreground layer for the GuiContainer (everythin in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Boiler", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) - { - this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); - } - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - int var5 = (this.width - this.xSize) / 2; - int var6 = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); - int var7; - int var8; - int var9; - int var10; - if (this.boilerInventory.waterStored > 0) - { - var7 = boilerInventory.getStoredLiquid(1)*4 + 1; - this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); - } - if (this.boilerInventory.steamStored > 0) - { - var8 = boilerInventory.steamStored/14*4 + 1; - this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); - } - - float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); - var9 = (int) Math.min(precentH*3.0F,30); - this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); - float precentSH = this.boilerInventory.heatStored/1000; - var10 = (int) Math.round(precentSH*5.33); - this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); - - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" kJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/src/minecraft/SteamPower/ModelCenterTank.java b/src/minecraft/SteamPower/ModelCenterTank.java deleted file mode 100644 index 00f0ef1e..00000000 --- a/src/minecraft/SteamPower/ModelCenterTank.java +++ /dev/null @@ -1,59 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCenterTank extends ModelBase -{ - - ModelRenderer Block; - - public ModelCenterTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //block - Block = new ModelRenderer(this, 0, 0); - Block.addBox(0F, 0F, 0F, 16, 16, 16); - Block.setRotationPoint(-8F, 8F, -8F); - Block.setTextureSize(128, 32); - Block.mirror = true; - setRotation(Block, 0F, 0F, 0F); - } - public void renderBlock(float f5) - { - Block.render(f5); - } - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelCornerTank.java b/src/minecraft/SteamPower/ModelCornerTank.java deleted file mode 100644 index 87c030fe..00000000 --- a/src/minecraft/SteamPower/ModelCornerTank.java +++ /dev/null @@ -1,100 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCornerTank extends ModelBase -{ - //Corner - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape4; - - public ModelCornerTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //corner - Shape1 = new ModelRenderer(this, 0, 1); - Shape1.addBox(0F, 0F, 0F, 1, 16, 20); - Shape1.setRotationPoint(7F, 8F, -7F); - Shape1.setTextureSize(128, 128); - Shape1.mirror = true; - setRotation(Shape1, 0F, -0.7853982F, 0F); - Shape2 = new ModelRenderer(this, 44, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, 6F); - Shape2.setTextureSize(128, 128); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 44, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(6F, 8F, -8F); - Shape3.setTextureSize(128, 128); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 44); - Shape6.addBox(0F, 0F, 0F, 1, 15, 13); - Shape6.setRotationPoint(-8F, 9F, -7F); - Shape6.setTextureSize(128, 128); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 73); - Shape7.addBox(0F, 0F, 0F, 14, 15, 1); - Shape7.setRotationPoint(-8F, 9F, -8F); - Shape7.setTextureSize(128, 128); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 92); - Shape4.addBox(0F, 0F, 0F, 16, 1, 16); - Shape4.setRotationPoint(-8F, 8F, -8F); - Shape4.setTextureSize(128, 128); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - public void renderCorner(float f5) - { - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape4.render(f5); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelEngine.java b/src/minecraft/SteamPower/ModelEngine.java deleted file mode 100644 index 9d766aae..00000000 --- a/src/minecraft/SteamPower/ModelEngine.java +++ /dev/null @@ -1,115 +0,0 @@ -// Date: 8/24/2012 1:44:37 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelEngine extends ModelBase -{ - //fields - ModelRenderer Base; - ModelRenderer top; - ModelRenderer TopPiston; - ModelRenderer BottomPiston; - ModelRenderer center; - ModelRenderer C1; - ModelRenderer C2; - - public ModelEngine() - { - textureWidth = 64; - textureHeight = 64; - - Base = new ModelRenderer(this, 0, 20); - Base.addBox(-6F, 0F, -6F, 12, 8, 12); - Base.setRotationPoint(0F, 16F, 0F); - Base.setTextureSize(64, 64); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - top = new ModelRenderer(this, 0, 0); - top.addBox(-6F, 0F, -6F, 12, 8, 12); - top.setRotationPoint(0F, -8F, 0F); - top.setTextureSize(64, 64); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - TopPiston = new ModelRenderer(this, 0, 52); - TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - TopPiston.setRotationPoint(0F, 0F, 0F); - TopPiston.setTextureSize(64, 64); - TopPiston.mirror = true; - setRotation(TopPiston, 0F, 0F, 0F); - BottomPiston = new ModelRenderer(this, 16, 52); - BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - BottomPiston.setRotationPoint(0F, 8F, 0F); - BottomPiston.setTextureSize(64, 64); - BottomPiston.mirror = true; - setRotation(BottomPiston, 0F, 0F, 0F); - center = new ModelRenderer(this, 32, 52); - center.addBox(-3F, 0F, -3F, 6, 6, 6); - //center.setRotationPoint(0F, 5F, 0F); - center.setTextureSize(64, 64); - center.mirror = true; - setRotation(center, 0F, 0F, 0F); - C1 = new ModelRenderer(this, 0, 41); - C1.addBox(-2F, -3F, 0F, 4, 6, 3); - C1.setRotationPoint(0F, 8F, 3F); - C1.setTextureSize(64, 64); - C1.mirror = true; - setRotation(C1, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 15, 41); - C2.addBox(-2F, -3F, -3F, 4, 6, 3); - C2.setRotationPoint(0F, 8F, -3F); - C2.setTextureSize(64, 64); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - //renderBot(f5); - //renderTop(f5); - } - public void renderBot(float f5) - { - Base.render(f5); - BottomPiston.render(f5); - } - public void renderTop(float f5) - { - top.render(f5); - TopPiston.render(f5); - C1.render(f5); - C2.render(f5); - } - public void renderMid(float f5,float p) - { - - center.setRotationPoint(0F, p, 0F); - center.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelFurnace.java b/src/minecraft/SteamPower/ModelFurnace.java deleted file mode 100644 index 0546703d..00000000 --- a/src/minecraft/SteamPower/ModelFurnace.java +++ /dev/null @@ -1,82 +0,0 @@ -// Date: 8/14/2012 3:02:31 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelFurnace extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer top; - ModelRenderer bottom; - ModelRenderer Shape1; - - public ModelFurnace() - { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(256, 256); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(256, 256); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(256, 256); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(256, 256); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - genRender(f5); - } - public void genRender(float f5) - { - Body.render(f5); - top.render(f5); - bottom.render(f5); - Shape1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelGenerator.java b/src/minecraft/SteamPower/ModelGenerator.java deleted file mode 100644 index dc7419a8..00000000 --- a/src/minecraft/SteamPower/ModelGenerator.java +++ /dev/null @@ -1,136 +0,0 @@ -// Date: 8/27/2012 3:20:21 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGenerator extends ModelBase -{ - //fields - ModelRenderer BasePlate; - ModelRenderer LeftConnection; - ModelRenderer RightConnection; - ModelRenderer Mid; - ModelRenderer Mid2; - ModelRenderer front; - ModelRenderer front2; - ModelRenderer front3; - ModelRenderer Mid3; - ModelRenderer FrontConnector; - - public ModelGenerator() - { - textureWidth = 128; - textureHeight = 128; - - BasePlate = new ModelRenderer(this, 0, 0); - BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); - BasePlate.setRotationPoint(0F, 23F, 0F); - BasePlate.setTextureSize(128, 128); - BasePlate.mirror = true; - setRotation(BasePlate, 0F, 0F, 0F); - LeftConnection = new ModelRenderer(this, 0, 112); - LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); - LeftConnection.setRotationPoint(-6F, 16F, 0F); - LeftConnection.setTextureSize(128, 128); - LeftConnection.mirror = true; - setRotation(LeftConnection, 0F, 0F, 0F); - RightConnection = new ModelRenderer(this, 12, 112); - RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); - RightConnection.setRotationPoint(6F, 16F, 0F); - RightConnection.setTextureSize(128, 128); - RightConnection.mirror = true; - setRotation(RightConnection, 0F, 0F, 0F); - Mid = new ModelRenderer(this, 0, 29); - Mid.addBox(-4F, 0F, -6F, 8, 12, 12); - Mid.setRotationPoint(0F, 10F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Mid2 = new ModelRenderer(this, 0, 53); - Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); - Mid2.setRotationPoint(0F, 12F, 0F); - Mid2.setTextureSize(128, 128); - Mid2.mirror = true; - setRotation(Mid2, 0F, 0F, 0F); - front = new ModelRenderer(this, 20, 15); - front.addBox(-2F, -4F, 0F, 4, 8, 1); - front.setRotationPoint(0F, 16F, -7F); - front.setTextureSize(128, 128); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - front2 = new ModelRenderer(this, 0, 24); - front2.addBox(-4F, -2F, 0F, 8, 4, 1); - front2.setRotationPoint(0F, 16F, -7F); - front2.setTextureSize(128, 128); - front2.mirror = true; - setRotation(front2, 0F, 0F, 0F); - front3 = new ModelRenderer(this, 0, 16); - front3.addBox(-3F, -3F, 0F, 6, 6, 1); - front3.setRotationPoint(0F, 16F, -7F); - front3.setTextureSize(128, 128); - front3.mirror = true; - setRotation(front3, 0F, 0F, 0F); - Mid3 = new ModelRenderer(this, 40, 29); - Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); - Mid3.setRotationPoint(0F, 12F, 0F); - Mid3.setTextureSize(128, 128); - Mid3.mirror = true; - setRotation(Mid3, 0F, 0F, 0F); - FrontConnector = new ModelRenderer(this, 0, 120); - FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); - FrontConnector.setRotationPoint(0F, 14F, -6F); - FrontConnector.setTextureSize(128, 128); - FrontConnector.mirror = true; - setRotation(FrontConnector, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - - } - public void RenderMain(float f5) - { - BasePlate.render(f5); - Mid.render(f5); - Mid2.render(f5); - front.render(f5); - front2.render(f5); - front3.render(f5); - Mid3.render(f5); - FrontConnector.render(f5); - } - public void RenderLeft(float f5) - { - LeftConnection.render(f5); - } - public void RenderRight(float f5) - { - RightConnection.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelTank.java b/src/minecraft/SteamPower/ModelTank.java deleted file mode 100644 index 03c6ffa8..00000000 --- a/src/minecraft/SteamPower/ModelTank.java +++ /dev/null @@ -1,154 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelTank extends ModelBase -{ - //One Block Tank - ModelRenderer TANK_WALL_1; - ModelRenderer TANK_WALL_2; - ModelRenderer TANK_WALL_3; - ModelRenderer TANK_WALL_4; - ModelRenderer TANK_SUPPORT_1; - ModelRenderer TANK_TOP_1; - ModelRenderer TANK_WALL_5; - ModelRenderer TANK_SUPPORT_2; - ModelRenderer TANK_SUPPORT_3; - ModelRenderer TANK_WALL_6; - ModelRenderer TANK_TOP_2; - ModelRenderer TANK_TOP_3; - ModelRenderer TANK_VALVE; - - public ModelTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - TANK_WALL_1 = new ModelRenderer(this, 0, 49); - TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); - TANK_WALL_1.setRotationPoint(6F, 12F, -4F); - TANK_WALL_1.setTextureSize(128, 128); - TANK_WALL_1.mirror = true; - setRotation(TANK_WALL_1, 0F, 0F, 0F); - TANK_WALL_2 = new ModelRenderer(this, 0, 70); - TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); - TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); - TANK_WALL_2.setTextureSize(128, 128); - TANK_WALL_2.mirror = true; - setRotation(TANK_WALL_2, 0F, 0F, 0F); - TANK_WALL_3 = new ModelRenderer(this, 0, 34); - TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_3.setRotationPoint(0F, 12F, 8F); - TANK_WALL_3.setTextureSize(128, 128); - TANK_WALL_3.mirror = true; - setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); - TANK_WALL_4 = new ModelRenderer(this, 0, 34); - TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_4.setRotationPoint(0F, 12F, -8F); - TANK_WALL_4.setTextureSize(128, 128); - TANK_WALL_4.mirror = true; - setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); - TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); - TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); - TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_1.setTextureSize(128, 128); - TANK_SUPPORT_1.mirror = true; - setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); - TANK_TOP_1 = new ModelRenderer(this, 43, 11); - TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); - TANK_TOP_1.setRotationPoint(0F, 10F, 0F); - TANK_TOP_1.setTextureSize(128, 128); - TANK_TOP_1.mirror = true; - setRotation(TANK_TOP_1, 0F, 0F, 0F); - TANK_WALL_5 = new ModelRenderer(this, 0, 34); - TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_5.setRotationPoint(0F, 12F, -7F); - TANK_WALL_5.setTextureSize(128, 128); - TANK_WALL_5.mirror = true; - setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); - TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_2.setTextureSize(128, 128); - TANK_SUPPORT_2.mirror = true; - setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); - TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_3.setTextureSize(128, 128); - TANK_SUPPORT_3.mirror = true; - setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); - TANK_WALL_6 = new ModelRenderer(this, 0, 34); - TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_6.setRotationPoint(0F, 12F, 7F); - TANK_WALL_6.setTextureSize(128, 128); - TANK_WALL_6.mirror = true; - setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); - TANK_TOP_2 = new ModelRenderer(this, 43, 0); - TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_2.setRotationPoint(0F, 10F, 0F); - TANK_TOP_2.setTextureSize(128, 128); - TANK_TOP_2.mirror = true; - setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); - TANK_TOP_3 = new ModelRenderer(this, 43, 0); - TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_3.setRotationPoint(0F, 10F, 0F); - TANK_TOP_3.setTextureSize(128, 128); - TANK_TOP_3.mirror = true; - setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); - TANK_VALVE = new ModelRenderer(this, 84, 0); - TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); - TANK_VALVE.setRotationPoint(-1F, 9F, -1F); - TANK_VALVE.setTextureSize(128, 128); - TANK_VALVE.mirror = true; - setRotation(TANK_VALVE, 0F, 0F, 0F); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - } - public void generalRender(float f5) - { - TANK_WALL_1.render(f5); - TANK_WALL_2.render(f5); - TANK_WALL_3.render(f5); - TANK_WALL_4.render(f5); - TANK_SUPPORT_1.render(f5); - TANK_TOP_1.render(f5); - TANK_WALL_5.render(f5); - TANK_SUPPORT_2.render(f5); - TANK_SUPPORT_3.render(f5); - TANK_WALL_6.render(f5); - TANK_TOP_2.render(f5); - TANK_TOP_3.render(f5); - TANK_VALVE.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/ModelToyEngine.java b/src/minecraft/SteamPower/ModelToyEngine.java deleted file mode 100644 index 021f4565..00000000 --- a/src/minecraft/SteamPower/ModelToyEngine.java +++ /dev/null @@ -1,242 +0,0 @@ -// Date: 8/14/2012 3:20:15 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package SteamPower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelToyEngine extends ModelBase -{ - //fields - ModelRenderer BASE; - ModelRenderer PISTON_WALL_1; - ModelRenderer PISTON_HEAD_MOVES; - ModelRenderer PISTON_TURNER_MOVES; - ModelRenderer PISTON_ARM_MOVES; - ModelRenderer GEAR_A_NECK; - ModelRenderer PISTON_WALL_2; - ModelRenderer PISTON_WALL_3; - ModelRenderer PISTON_WALL_4; - ModelRenderer PISTON_SUPPORT_1; - ModelRenderer PISTON_SUPPORT_2; - ModelRenderer FORCE_CONDUCTOR_BOX; - ModelRenderer GEAR_A_TEETH_1_ROTATES; - ModelRenderer GEAR_A_TEETH_2_ROTATES; - ModelRenderer GEAR_A_TEETH_3_ROTATES; - ModelRenderer FORCE_TRANSMITTER_ROTATES; - ModelRenderer GEAR_B_TEETH_1_ROTATES; - ModelRenderer GEAR_B_TEETH_2_ROTATES; - ModelRenderer GEAR_B_TEETH_3_ROTATES; - ModelRenderer SUPPORT_PLATE; - ModelRenderer ORNAMENT_1; - ModelRenderer ORNAMENT_2; - ModelRenderer LEVER_1_CAN_BE_TURNED; - ModelRenderer LEVER_2_CAN_BE_TURNED; - - public ModelToyEngine() - { - textureWidth = 128; - textureHeight = 128; - - BASE = new ModelRenderer(this, 0, 0); - BASE.addBox(0F, 0F, 0F, 16, 1, 16); - BASE.setRotationPoint(-8F, 23F, -8F); - BASE.setTextureSize(128, 128); - BASE.mirror = true; - setRotation(BASE, 0F, 0F, 0F); - PISTON_WALL_1 = new ModelRenderer(this, 0, 18); - PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); - PISTON_WALL_1.setTextureSize(128, 128); - PISTON_WALL_1.mirror = true; - setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); - PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); - PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); - PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); - PISTON_HEAD_MOVES.setTextureSize(128, 128); - PISTON_HEAD_MOVES.mirror = true; - setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); - PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); - PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); - PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); - PISTON_TURNER_MOVES.setTextureSize(128, 128); - PISTON_TURNER_MOVES.mirror = true; - setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); - PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); - PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); - PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); - PISTON_ARM_MOVES.setTextureSize(128, 128); - PISTON_ARM_MOVES.mirror = true; - setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); - GEAR_A_NECK = new ModelRenderer(this, 65, 25); - GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); - GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); - GEAR_A_NECK.setTextureSize(128, 128); - GEAR_A_NECK.mirror = true; - setRotation(GEAR_A_NECK, 0F, 0F, 0F); - PISTON_WALL_2 = new ModelRenderer(this, 0, 18); - PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); - PISTON_WALL_2.setTextureSize(128, 128); - PISTON_WALL_2.mirror = true; - setRotation(PISTON_WALL_2, 0F, 0F, 0F); - PISTON_WALL_3 = new ModelRenderer(this, 0, 18); - PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); - PISTON_WALL_3.setTextureSize(128, 128); - PISTON_WALL_3.mirror = true; - setRotation(PISTON_WALL_3, 0F, 0F, 0F); - PISTON_WALL_4 = new ModelRenderer(this, 0, 18); - PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); - PISTON_WALL_4.setTextureSize(128, 128); - PISTON_WALL_4.mirror = true; - setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); - PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); - PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); - PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); - PISTON_SUPPORT_1.setTextureSize(128, 128); - PISTON_SUPPORT_1.mirror = true; - setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); - PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); - PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); - PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); - PISTON_SUPPORT_2.setTextureSize(128, 128); - PISTON_SUPPORT_2.mirror = true; - setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); - FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); - FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); - FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); - FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); - FORCE_CONDUCTOR_BOX.mirror = true; - setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); - GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); - FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); - FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); - FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); - FORCE_TRANSMITTER_ROTATES.mirror = true; - setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - SUPPORT_PLATE = new ModelRenderer(this, 65, 12); - SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); - SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); - SUPPORT_PLATE.setTextureSize(128, 128); - SUPPORT_PLATE.mirror = true; - setRotation(SUPPORT_PLATE, 0F, 0F, 0F); - ORNAMENT_1 = new ModelRenderer(this, 86, 0); - ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_1.setRotationPoint(6F, 19F, -5F); - ORNAMENT_1.setTextureSize(128, 128); - ORNAMENT_1.mirror = true; - setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); - ORNAMENT_2 = new ModelRenderer(this, 86, 0); - ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_2.setRotationPoint(4F, 19F, -5F); - ORNAMENT_2.setTextureSize(128, 128); - ORNAMENT_2.mirror = true; - setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); - LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); - LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_1_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); - LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); - LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_2_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - genRender(f5); - } - public void genRender(float f5) - { - BASE.render(f5); - PISTON_WALL_1.render(f5); - PISTON_HEAD_MOVES.render(f5); - PISTON_TURNER_MOVES.render(f5); - PISTON_ARM_MOVES.render(f5); - GEAR_A_NECK.render(f5); - PISTON_WALL_2.render(f5); - PISTON_WALL_3.render(f5); - PISTON_WALL_4.render(f5); - PISTON_SUPPORT_1.render(f5); - PISTON_SUPPORT_2.render(f5); - FORCE_CONDUCTOR_BOX.render(f5); - GEAR_A_TEETH_1_ROTATES.render(f5); - GEAR_A_TEETH_2_ROTATES.render(f5); - GEAR_A_TEETH_3_ROTATES.render(f5); - FORCE_TRANSMITTER_ROTATES.render(f5); - GEAR_B_TEETH_1_ROTATES.render(f5); - GEAR_B_TEETH_2_ROTATES.render(f5); - GEAR_B_TEETH_3_ROTATES.render(f5); - SUPPORT_PLATE.render(f5); - ORNAMENT_1.render(f5); - ORNAMENT_2.render(f5); - LEVER_1_CAN_BE_TURNED.render(f5); - LEVER_2_CAN_BE_TURNED.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/SteamPower/RenderBoiler.java b/src/minecraft/SteamPower/RenderBoiler.java deleted file mode 100644 index 8e023391..00000000 --- a/src/minecraft/SteamPower/RenderBoiler.java +++ /dev/null @@ -1,62 +0,0 @@ -package SteamPower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import BasicPipes.TradeHelper; -import SteamPower.boiler.TileEntityBoiler; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - private ModelCenterTank model2; - private ModelCornerTank model3; - - public RenderBoiler(float par1) - { - model = new ModelTank(par1); - model2 = new ModelCenterTank(par1); - model3 = new ModelCornerTank(par1); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; - int meta = 0; - if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) - { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - model.generalRender(0.0625F); - } - else - if(TradeHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) - { - bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); - model2.renderBlock(0.0625F); - } - else - { - int corner = TradeHelper.corner(tileEntity); - bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); - switch(corner) - { - case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - model3.renderCorner(0.0625f); - - } - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/RenderFurnace.java b/src/minecraft/SteamPower/RenderFurnace.java deleted file mode 100644 index 42f96d06..00000000 --- a/src/minecraft/SteamPower/RenderFurnace.java +++ /dev/null @@ -1,37 +0,0 @@ -package SteamPower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderFurnace extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelFurnace model; - - public RenderFurnace() - { - model = new ModelFurnace(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - 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.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/RenderGenerator.java b/src/minecraft/SteamPower/RenderGenerator.java deleted file mode 100644 index b15b7e82..00000000 --- a/src/minecraft/SteamPower/RenderGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -package SteamPower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderGenerator extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelGenerator model; - - public RenderGenerator() - { - model = new ModelGenerator(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.RenderMain(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/RenderSteamEngine.java b/src/minecraft/SteamPower/RenderSteamEngine.java deleted file mode 100644 index 5fdb2747..00000000 --- a/src/minecraft/SteamPower/RenderSteamEngine.java +++ /dev/null @@ -1,49 +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).position; - 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; - } - if(cc) - { - 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/RenderToyEngine.java b/src/minecraft/SteamPower/RenderToyEngine.java deleted file mode 100644 index 8b760e8f..00000000 --- a/src/minecraft/SteamPower/RenderToyEngine.java +++ /dev/null @@ -1,29 +0,0 @@ -package SteamPower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderToyEngine extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelToyEngine model; - - public RenderToyEngine() - { - model = new ModelToyEngine(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/SteamClientProxy.java b/src/minecraft/SteamPower/SteamClientProxy.java deleted file mode 100644 index a514f546..00000000 --- a/src/minecraft/SteamPower/SteamClientProxy.java +++ /dev/null @@ -1,34 +0,0 @@ -package SteamPower; - - -import net.minecraft.src.RenderEngine; -import net.minecraftforge.client.MinecraftForgeClient; -import SteamPower.boiler.TileEntityBoiler; -import SteamPower.burner.TileEntityFireBox; -import SteamPower.turbine.TileEntityGen; -import SteamPower.turbine.TileEntitySteamPiston; -import SteamPower.turbine.TileEntitytopGen; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.common.registry.GameRegistry; - -public class SteamClientProxy extends SteamProxy{ - - public void preInit() - { - MinecraftForgeClient.preloadTexture("/EUIClient/textures/blocks.png"); - MinecraftForgeClient.preloadTexture("/EUIClient/textures/Items.png"); - } - @Override - public void init() - { - ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); - ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderSteamEngine()); - ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); - } - public void postInit() - { - - } - -} From 3b8c25aa55bd781a7f292cc72b25afc1f87843fd Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 10:13:18 -0400 Subject: [PATCH 060/115] dido --- src/common/steampower/BlockMachine.java | 236 ++++++++++ src/common/steampower/ItemMachine.java | 65 +++ src/common/steampower/ItemParts.java | 70 +++ src/common/steampower/SteamPowerMain.java | 121 ++++++ src/common/steampower/SteamProxy.java | 69 +++ src/common/steampower/TileEntityMachine.java | 258 +++++++++++ src/common/steampower/TileEntityNuller.java | 29 ++ src/common/steampower/ap/IHeatConsumer.java | 22 + src/common/steampower/ap/IHeatProducer.java | 14 + .../steampower/boiler/ContainerBoiler.java | 59 +++ .../steampower/boiler/TileEntityBoiler.java | 271 ++++++++++++ .../steampower/burner/ContainerFireBox.java | 42 ++ .../steampower/burner/TileEntityFireBox.java | 203 +++++++++ .../steampower/turbine/BlockGenerator.java | 42 ++ .../steampower/turbine/BlockSteamPiston.java | 158 +++++++ .../turbine/ContainerGenerator.java | 45 ++ src/common/steampower/turbine/ItemEngine.java | 62 +++ .../steampower/turbine/TileEntityGen.java | 62 +++ .../turbine/TileEntitySteamPiston.java | 405 ++++++++++++++++++ .../steampower/turbine/TileEntitytopGen.java | 60 +++ src/minecraft/steampower/GUIFireBox.java | 92 ++++ src/minecraft/steampower/GUIGenerator.java | 80 ++++ src/minecraft/steampower/GuiBoiler.java | 89 ++++ src/minecraft/steampower/ModelCenterTank.java | 59 +++ src/minecraft/steampower/ModelCornerTank.java | 100 +++++ src/minecraft/steampower/ModelEngine.java | 115 +++++ src/minecraft/steampower/ModelFurnace.java | 82 ++++ src/minecraft/steampower/ModelGenerator.java | 136 ++++++ src/minecraft/steampower/ModelTank.java | 154 +++++++ src/minecraft/steampower/ModelToyEngine.java | 242 +++++++++++ src/minecraft/steampower/RenderBoiler.java | 62 +++ src/minecraft/steampower/RenderFurnace.java | 37 ++ src/minecraft/steampower/RenderGenerator.java | 29 ++ .../steampower/RenderSteamEngine.java | 49 +++ src/minecraft/steampower/RenderToyEngine.java | 29 ++ .../steampower/SteamClientProxy.java | 31 ++ 36 files changed, 3679 insertions(+) create mode 100644 src/common/steampower/BlockMachine.java create mode 100644 src/common/steampower/ItemMachine.java create mode 100644 src/common/steampower/ItemParts.java create mode 100644 src/common/steampower/SteamPowerMain.java create mode 100644 src/common/steampower/SteamProxy.java create mode 100644 src/common/steampower/TileEntityMachine.java create mode 100644 src/common/steampower/TileEntityNuller.java create mode 100644 src/common/steampower/ap/IHeatConsumer.java create mode 100644 src/common/steampower/ap/IHeatProducer.java create mode 100644 src/common/steampower/boiler/ContainerBoiler.java create mode 100644 src/common/steampower/boiler/TileEntityBoiler.java create mode 100644 src/common/steampower/burner/ContainerFireBox.java create mode 100644 src/common/steampower/burner/TileEntityFireBox.java create mode 100644 src/common/steampower/turbine/BlockGenerator.java create mode 100644 src/common/steampower/turbine/BlockSteamPiston.java create mode 100644 src/common/steampower/turbine/ContainerGenerator.java create mode 100644 src/common/steampower/turbine/ItemEngine.java create mode 100644 src/common/steampower/turbine/TileEntityGen.java create mode 100644 src/common/steampower/turbine/TileEntitySteamPiston.java create mode 100644 src/common/steampower/turbine/TileEntitytopGen.java create mode 100644 src/minecraft/steampower/GUIFireBox.java create mode 100644 src/minecraft/steampower/GUIGenerator.java create mode 100644 src/minecraft/steampower/GuiBoiler.java create mode 100644 src/minecraft/steampower/ModelCenterTank.java create mode 100644 src/minecraft/steampower/ModelCornerTank.java create mode 100644 src/minecraft/steampower/ModelEngine.java create mode 100644 src/minecraft/steampower/ModelFurnace.java create mode 100644 src/minecraft/steampower/ModelGenerator.java create mode 100644 src/minecraft/steampower/ModelTank.java create mode 100644 src/minecraft/steampower/ModelToyEngine.java create mode 100644 src/minecraft/steampower/RenderBoiler.java create mode 100644 src/minecraft/steampower/RenderFurnace.java create mode 100644 src/minecraft/steampower/RenderGenerator.java create mode 100644 src/minecraft/steampower/RenderSteamEngine.java create mode 100644 src/minecraft/steampower/RenderToyEngine.java create mode 100644 src/minecraft/steampower/SteamClientProxy.java diff --git a/src/common/steampower/BlockMachine.java b/src/common/steampower/BlockMachine.java new file mode 100644 index 00000000..9c89dfea --- /dev/null +++ b/src/common/steampower/BlockMachine.java @@ -0,0 +1,236 @@ +package steampower; + +import java.util.Random; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityItem; +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.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.TileEntityFireBox; + +public class BlockMachine extends universalelectricity.extend.BlockMachine +{ + + private Random furnaceRand = new Random(); + private static boolean keepFurnaceInventory = true; + + public BlockMachine(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + this.setCreativeTab(CreativeTabs.tabBlock); + + } + @Override + protected int damageDropped(int metadata) + { + return metadata; + } + @Override + public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) + { + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof TileEntityFireBox) + { + if(((TileEntityFireBox)tileEntity).generateRate > 0) + { + int var6 = ((TileEntityFireBox) tileEntity).getDirection(); + float var7 = (float)x + 0.5F; + float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; + float var9 = (float)z + 0.5F; + float var10 = 0.52F; + float var11 = par5Random.nextFloat() * 0.6F - 0.3F; + + if (var6 == 4) + { + par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 2) + { + par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 1) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 3) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + } + } + } + } + + @Override + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + case 4: tileEntity.setDirection(1); break; + } + + return true; + } + /** + * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the + * block. + */ + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntityBoiler) + { + TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); + } + if(blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); + } + } + + return true; + } + } + @Override + public TileEntity createNewTileEntity(World var1,int meta) + { + switch(meta) + { + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 15: return new TileEntityNuller(); + } + return null; + } + + /** + * Called when the block is placed in the world. + */ + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + } + } + /** + * Called whenever the block is removed. + */ + @Override + public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ + if (!keepFurnaceInventory) + { + TileEntityMachine var5 = null; + TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); + if(entityBox instanceof TileEntityFireBox) + { + var5 = (TileEntityFireBox)entityBox; + } + else if(entityBox instanceof TileEntityBoiler) + { + var5 = (TileEntityBoiler)entityBox; + } + if (var5 != null) + { + for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) + { + ItemStack var7 = var5.getStackInSlot(var6); + + if (var7 != null) + { + float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + + while (var7.stackSize > 0) + { + int var11 = this.furnaceRand.nextInt(21) + 10; + + if (var11 > var7.stackSize) + { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); + + if (var7.hasTagCompound()) + { + var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); + } + + float var13 = 0.05F; + var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); + var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); + par1World.spawnEntityInWorld(var12); + } + } + } + } + } + + super.breakBlock(par1World, par2, par3, par4, par5, par6); + } + + @Override + public String getTextureFile() + { + return "/EUIClient/textures/blocks/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + +} diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java new file mode 100644 index 00000000..3086957d --- /dev/null +++ b/src/common/steampower/ItemMachine.java @@ -0,0 +1,65 @@ +package steampower; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.src.*; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + this.setIconIndex(21); + this.setTabToDisplayOn(CreativeTabs.tabBlock); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + par3List.add(new ItemStack(this, 1, 15)); + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/EUIClient/Textures/Items.png"; + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 1: return 23; + case 2: return 22; + case 15: return 22; + } + return this.iconIndex+par1; + } + @Override + public int getMetadata(int metadata) + { + return metadata; + } + @Override + public String getItemName() + { + return "Machine"; + } + @Override + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalProcessor"; + case 1: return "Boiler"; + case 2: return "FireBox"; + case 3: return "SteamGen"; + case 15: return "EnergyNuller"; + } + return this.getItemName(); + } + } + diff --git a/src/common/steampower/ItemParts.java b/src/common/steampower/ItemParts.java new file mode 100644 index 00000000..f1c358b3 --- /dev/null +++ b/src/common/steampower/ItemParts.java @@ -0,0 +1,70 @@ +package steampower; + +import java.util.ArrayList; + +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; + +public class ItemParts extends Item{ + + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 3; + case 1: return 4; + case 2: return 5; + case 3: return 6; + case 4: return 7; + case 5: return 8; + case 6: return 9; + } + return this.iconIndex; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/EUIClient/Textures/Items.png"; + } + public String getItemName() + { + return "parts"; + } + + + + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "Tank"; + case 3: return "Valve"; + case 4: return "Tube"; + case 5: return "Seal"; + case 6: return "Rivits"; + } + return this.getItemName(); + } + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,1)); + itemList.add(new ItemStack(this, 1,3)); + itemList.add(new ItemStack(this, 1,4)); + itemList.add(new ItemStack(this, 1,5)); + itemList.add(new ItemStack(this, 1,6)); + + } +} + + + diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java new file mode 100644 index 00000000..92cae543 --- /dev/null +++ b/src/common/steampower/SteamPowerMain.java @@ -0,0 +1,121 @@ +package steampower; +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 steampower.turbine.BlockGenerator; +import steampower.turbine.BlockSteamPiston; +import steampower.turbine.ItemEngine; +import steampower.turbine.TileEntitytopGen; +import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.network.PacketManager; +import basicpipes.BasicPipesMain; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.Mod.PostInit; +import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.SidedProxy; +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.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +@Mod(modid = "SteamPower", name = "Steam Power", version = "V8") +@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) + +public class SteamPowerMain{ + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/SteamPower.cfg"))); + private static int BlockID= configurationProperties(); + public static int EngineItemID; + public static int EngineID; + public static int genID; + public static int genOutput; + public static int steamOutBoiler; + public static int pipeLoss; + public static int boilerHeat; + public static int fireOutput; + public static final String channel = "SPpack"; + public static Block machine = new BlockMachine(BlockID).setBlockName("machine"); + public static Block engine = new BlockSteamPiston(EngineID).setBlockName("SteamEngien"); + public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); + public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); + @Instance + public static SteamPowerMain instance; + + @SidedProxy(clientSide = "SteamPower.SteamClientProxy", serverSide = "SteamPower.SteamProxy") + public static SteamProxy proxy; + public static String textureFile = "/EUIClient/Textures/"; + public static int configurationProperties() + { + config.load(); + BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); + EngineItemID = Integer.parseInt(config.getOrCreateIntProperty("EngineItem", Configuration.CATEGORY_ITEM, 30308).value); + EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); + genID = Integer.parseInt(config.getOrCreateIntProperty("ElecGenID", Configuration.CATEGORY_BLOCK, 3032).value); + genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); + steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); + boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); + fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJMax", Configuration.CATEGORY_GENERAL,250).value); + config.save(); + return BlockID; + } + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); + GameRegistry.registerBlock(machine, ItemMachine.class); + GameRegistry.registerBlock(engine); + GameRegistry.registerBlock(gen); + } + @Init + public void load(FMLInitializationEvent evt) + { + proxy.init(); + GameRegistry.registerTileEntity(TileEntityNuller.class, "EUNuller"); + GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); + //Names............... + LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); + LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); + LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); + LanguageRegistry.addName((new ItemStack(machine, 1, 15)), "EUVampire"); + + + } + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + + proxy.postInit(); + //Crafting + /** + * case 0: return new TileEntityGrinder(); <-Removed + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityGenerator(); + case 14: return new TileEntityCondenser();<-Removed + case 15: return new TileEntityNuller();<-Just for testing Not craftable + */ + GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(BasicPipesMain.parts, 1,5), + '@',new ItemStack(BasicComponents.itemSteelPlate), + 'O',new ItemStack(BasicPipesMain.parts, 1,1), + 'V',new ItemStack(BasicPipesMain.parts, 1,6)}); + GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", + 'F',Block.stoneOvenIdle, + '@',new ItemStack(BasicComponents.itemSteelPlate)}); + GameRegistry.addRecipe(new ItemStack(itemEngine, 1, 0), new Object [] {"@T@", "PMP", "@T@", + 'T',new ItemStack(BasicPipesMain.parts, 1,0), + '@',new ItemStack(BasicComponents.itemSteelPlate), + 'P',Block.pistonBase, + 'M',new ItemStack(BasicComponents.itemMotor)}); + } + +} diff --git a/src/common/steampower/SteamProxy.java b/src/common/steampower/SteamProxy.java new file mode 100644 index 00000000..69b7d6c2 --- /dev/null +++ b/src/common/steampower/SteamProxy.java @@ -0,0 +1,69 @@ +package steampower; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import steampower.boiler.ContainerBoiler; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.ContainerFireBox; +import steampower.burner.TileEntityFireBox; +import steampower.turbine.ContainerGenerator; +import steampower.turbine.TileEntityGen; +import steampower.turbine.TileEntitySteamPiston; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; + +public class SteamProxy implements IGuiHandler{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); + GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); + GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); + + } + 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) + { + case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + case 2: return new GUIGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); + } + } + + 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) + { + case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + case 1: return new ContainerBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + case 2: return new ContainerGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); + } + } + + return null; + } +} diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java new file mode 100644 index 00000000..206bc85b --- /dev/null +++ b/src/common/steampower/TileEntityMachine.java @@ -0,0 +1,258 @@ +package steampower; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.electricity.TileEntityElectricUnit; +import universalelectricity.extend.IRotatable; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import net.minecraft.src.*; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +public class TileEntityMachine extends TileEntityElectricUnit implements IInventory, ISidedInventory +{ + public int facing = 0; + private int count = 0; + public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; + public int getTickInterval() + { + return 5; + + } + private int getInvSize() { + return 1; + } + public int getDirection() + { + return this.facing; + } + + public void setDirection(int i) + { + this.facing = i; + } + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", this.facing); + //inventory + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.storedItems.length; ++var3) + { + if (this.storedItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.storedItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + //inventory + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.storedItems = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.storedItems.length) + { + this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + //vars + this.facing = par1NBTTagCompound.getInteger("facing"); + } + + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public boolean canUpdate() + { + return true; + } + public Object[] getSendData() + { + return new Object[]{}; + } + public int getNumSide(ForgeDirection side) + { + if(side == ForgeDirection.DOWN) + { + return 0; + } + if(side == ForgeDirection.UP) + { + return 1; + } + if(side == ForgeDirection.NORTH) + { + return 2; + } + if(side == ForgeDirection.SOUTH) + { + return 3; + } + if(side == ForgeDirection.WEST) + { + return 4; + } + if(side == ForgeDirection.EAST) + { + return 5; + } + return 0; + } + + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + + if(!worldObj.isRemote) + { + PacketManager.sendTileEntityPacket(this, SteamPowerMain.channel, getSendData()); + } + } + + + ////////////////////////// + //I Inventory shit + ///////////////////////// + public int getSizeInventory() + { + return this.storedItems.length; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.storedItems[par1]; + } + + public ItemStack decrStackSize(int par1, int par2) + { + if (this.storedItems[par1] != null) + { + ItemStack var3; + + if (this.storedItems[par1].stackSize <= par2) + { + var3 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var3; + } + else + { + var3 = this.storedItems[par1].splitStack(par2); + + if (this.storedItems[par1].stackSize == 0) + { + this.storedItems[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.storedItems[par1] != null) + { + ItemStack var2 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.storedItems[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public int getStartInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public String getInvName() { + // TODO Auto-generated method stub + return "SteamMachine"; + } + @Override + public void openChest() { + // TODO Auto-generated method stub + + } + @Override + public void closeChest() { + // TODO Auto-generated method stub + + } +} \ No newline at end of file diff --git a/src/common/steampower/TileEntityNuller.java b/src/common/steampower/TileEntityNuller.java new file mode 100644 index 00000000..fb48d77f --- /dev/null +++ b/src/common/steampower/TileEntityNuller.java @@ -0,0 +1,29 @@ +package steampower; + +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.extend.IElectricUnit; + +public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { + + public float electricityRequest() + { + return 100; + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) + { + return true; + } + public float getVoltage() + { + return 1000; + } + public int getTickInterval() + { + return 10; + } + public boolean canConnect(ForgeDirection side) + { + return true; + } +} diff --git a/src/common/steampower/ap/IHeatConsumer.java b/src/common/steampower/ap/IHeatConsumer.java new file mode 100644 index 00000000..9f9c25a2 --- /dev/null +++ b/src/common/steampower/ap/IHeatConsumer.java @@ -0,0 +1,22 @@ +package steampower.ap; + +/** + * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. + * @author Darkguardsman code sourced from Calclavia + * + */ +public interface IHeatConsumer +{ + /** + * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). + * @param vol - The amount of steam this block received + * @param side - The side of the block in which the electricity came from. + * @return vol - The amount of rejected steam to be sent to back + */ + public float onReceiveHeat(float jouls, int side); + + /** + * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. + */ + public float getStoredHeat(); +} \ No newline at end of file diff --git a/src/common/steampower/ap/IHeatProducer.java b/src/common/steampower/ap/IHeatProducer.java new file mode 100644 index 00000000..1c13a5c9 --- /dev/null +++ b/src/common/steampower/ap/IHeatProducer.java @@ -0,0 +1,14 @@ +package steampower.ap; + + +public interface IHeatProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param jouls - The maximum jouls can be transfered + * @param side - The side of block in which the conductor is on + * @return jouls - Return jouls to consumer + */ + public float onProduceHeat(float jouls, int side); +} \ No newline at end of file diff --git a/src/common/steampower/boiler/ContainerBoiler.java b/src/common/steampower/boiler/ContainerBoiler.java new file mode 100644 index 00000000..b508543f --- /dev/null +++ b/src/common/steampower/boiler/ContainerBoiler.java @@ -0,0 +1,59 @@ +package steampower.boiler; +import net.minecraft.src.*; + +public class ContainerBoiler extends Container +{ + private TileEntityBoiler boiler; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) + { + this.boiler = par2TileEntityboiler; + this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + + + public void updateProgressBar(int par1, int par2) + { + if (par1 == 0) + { + // this.boiler.furnaceCookTime = par2; + } + + if (par1 == 1) + { + //this.boiler.boilerRunTime = par2; + } + + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.boiler.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..84eb4133 --- /dev/null +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -0,0 +1,271 @@ +package steampower.boiler; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; +import steampower.burner.TileEntityFireBox; +import universalelectricity.network.IPacketReceiver; +import basicpipes.TradeHelper; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, ILiquidConsumer +{ + + /** + * The ItemStacks that hold the items currently being used in the furnace + */ + + + /** The number of ticks that the boiler will keep burning */ + public int RunTime = 0; + /** The ammount of energy stored before being add to run Timer */ + public int energyStore = 0; + /** The ammount of water stored */ + public int waterStored = 0; + /** The ammount of steam stored */ + public int steamStored = 0; + /** The ammount of heat stored */ + public int heatStored = 0; + public int heatMax = 10000; + /** The ammount of heat stored */ + public int hullHeat = 0; + public int hullHeatMax = 4700; + private int heatTick = 0; + public int tankCount = 0; + private int heatNeeded = SteamPowerMain.boilerHeat; // kilo joules + int count = 0; + boolean hullHeated = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + int steamMax = 140; + public boolean isBeingHeated = false; + public String getInvName() + { + return "container.boiler"; + } + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, + (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + RunTime = dataStream.readInt(); + energyStore = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + heatStored = dataStream.readInt(); + hullHeat = dataStream.readInt(); + heatTick = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.RunTime = par1NBTTagCompound.getShort("BurnTime"); + this.energyStore = par1NBTTagCompound.getInteger("energyStore"); + this.steamStored = par1NBTTagCompound.getInteger("steamStore"); + this.heatStored = par1NBTTagCompound.getInteger("heatStore"); + this.waterStored = par1NBTTagCompound.getInteger("waterStore"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); + par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); + par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); + par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); + par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); + par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); + + } + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + @Override + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + + //update/resets connection list + TileEntity[] entityList = TradeHelper.getSourounding(this); + tankCount = 0; + for(int c = 0; c< 6; c++) + { + if(entityList[c] instanceof TileEntityBoiler) + { + connectedBlocks[c] = entityList[c]; + if(c != 0 && c != 1) + { + tankCount++; + } + } + else + { + connectedBlocks[c] = null; + } + } + + hullHeated = false; + if(hullHeat >= hullHeatMax) + { + hullHeated = true; + } + else + { + if(!worldObj.isRemote) + { + hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); + } + } + if(!worldObj.isRemote) + { + emptyBuckets();//adds water from container slot + this.waterStored = TradeHelper.shareLiquid(this, 1, false); + this.steamStored = TradeHelper.shareLiquid(this, 0, true); + if(waterStored > 0 && hullHeated && heatStored > heatNeeded) + { + heatStored = Math.max(heatStored - heatNeeded, 0); + --waterStored; + steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); + } + TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); + this.isBeingHeated = false; + if(blockE instanceof TileEntityFireBox) + { + this.isBeingHeated = true; + heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); + } + } + super.onUpdate(watts, voltage, side); + } + private void emptyBuckets() + { + if (storedItems[0] != null) + { + if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) + { + if((int)waterStored < getLiquidCapacity(1)) + { + ++waterStored; + this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); + this.onInventoryChanged(); + } + } + } + + } + public int precentHeated() { + int var1 = 0; + if(hullHeat < 100) + { + var1 = (int)(100 *(hullHeat/hullHeatMax)); + } + else + { + var1 = 100; + } + return var1; + } + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(0), 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; + } + if(type == 1) + { + int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); + this.waterStored += vol - rejectedWater; + return rejectedWater; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type,ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 1) + { + return this.waterStored; + } + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type ==1) + { + return 14; + } + if(type == 0) + { + return steamMax; + } + return 0; + } + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 0) + { + if(steamStored > 1) + { + this.steamStored -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + + } diff --git a/src/common/steampower/burner/ContainerFireBox.java b/src/common/steampower/burner/ContainerFireBox.java new file mode 100644 index 00000000..19b934ec --- /dev/null +++ b/src/common/steampower/burner/ContainerFireBox.java @@ -0,0 +1,42 @@ +package steampower.burner; + +import net.minecraft.src.*; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java new file mode 100644 index 00000000..cf2b74c6 --- /dev/null +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -0,0 +1,203 @@ +package steampower.burner; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; +import steampower.ap.IHeatProducer; +import steampower.boiler.TileEntityBoiler; +import universalelectricity.network.IPacketReceiver; +import basicpipes.TradeHelper; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer +{ + //max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + //Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + private int getInvSize() { + return 1; + } + public int getTickInterval() + { + return 5; + + } + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + addConnection(); + if(!worldObj.isRemote) + { + sharCoal(); + } + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if(blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + if (!this.worldObj.isRemote){ + + + maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*5); + + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.storedItems[0] != null && isConnected) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + if(isConnected) + { + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); + } + } + //Loose heat when the generator is not connected or if there is no coal in the inventory. + if(this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate-5, 0); + } + } + + //gets all connected fireBoxes and shares its supply of coal + public void sharCoal(){ + for(int i =0; i<6;i++) + { + + if(connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if(this.storedItems[0] != null) + { + if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) + { + if(connectedConsumer.storedItems[0] != null) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; + if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); + connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; + this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem()); + this.storedItems[0].stackSize -= 1; + } + } + } + } + } + + + } + public void addConnection() + { + connectedUnits = 0; + TileEntity[] aEntity = TradeHelper.getSourounding(this); + for(int i = 0; i<6; i++) + { + + + if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity[i]; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); + } + @Override + public String getInvName() { + return "FireBox"; + } + public float onProduceHeat(float jouls, int side) { + // TODO Auto-generated method stub + return Math.min(generateRate*getTickInterval(),jouls); + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + connectedUnits = dataStream.readInt(); + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/src/common/steampower/turbine/BlockGenerator.java b/src/common/steampower/turbine/BlockGenerator.java new file mode 100644 index 00000000..2575f7d1 --- /dev/null +++ b/src/common/steampower/turbine/BlockGenerator.java @@ -0,0 +1,42 @@ +package steampower.turbine; + +import java.util.ArrayList; + +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 BlockGenerator extends universalelectricity.extend.BlockMachine { + + public BlockGenerator(int id) { + super("Generator", id, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + } + @Override + public void addCreativeItems(ArrayList itemList) + { + itemList.add(new ItemStack(this, 1,0)); + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + @Override + public TileEntity createNewTileEntity(World world) + { + return new TileEntityGen(); + } +} diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java new file mode 100644 index 00000000..e7be1d43 --- /dev/null +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -0,0 +1,158 @@ +package steampower.turbine; + +import java.util.Random; + +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; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; + +public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ + + public BlockSteamPiston(int par1) { + super("SteamEngine", par1, Material.iron); + + } + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntitySteamPiston) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); + } + if(blockEntity instanceof TileEntitytopGen) + { + par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); + } + } + return true; + } + } + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + } + } + public TileEntity createNewTileEntity(World var1) + { + return null; + } + public void breakBlock(World world, int x, int y, int z,int par5, int par6) + { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + if(world.getBlockId(x, y+1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)> 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + else + if(meta > 4) + { + if(world.getBlockId(x, y-1, z) == this.blockID) + { + if(world.getBlockMetadata(x, y, z)< 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return -1; + } + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if(metadata < 4) + { + return new TileEntitySteamPiston(); + } + if(metadata == 14) + { + return new TileEntitytopGen(); + } + return null; + } + public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) + { + int meta = par1World.getBlockMetadata(par2, par3, par4); + boolean var7 = false; + if (meta == 1) + { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + var7 = true; + } + } + else + { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + if (var7) + { + if (!par1World.isRemote) + { + this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); + } + } + } + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return SteamPowerMain.itemEngine.shiftedIndex; + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3+1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); + } +} diff --git a/src/common/steampower/turbine/ContainerGenerator.java b/src/common/steampower/turbine/ContainerGenerator.java new file mode 100644 index 00000000..ac9dbfc4 --- /dev/null +++ b/src/common/steampower/turbine/ContainerGenerator.java @@ -0,0 +1,45 @@ +package steampower.turbine; + +import net.minecraft.src.Container; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Slot; + +public class ContainerGenerator extends Container +{ + private TileEntitySteamPiston tileEntity; + + public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java new file mode 100644 index 00000000..364e5863 --- /dev/null +++ b/src/common/steampower/turbine/ItemEngine.java @@ -0,0 +1,62 @@ +package steampower.turbine; +import java.util.List; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.World; +import steampower.SteamPowerMain; + +public class ItemEngine extends Item +{ + public ItemEngine(int par1) + { + super(par1); + this.maxStackSize = 5; + this.setTabToDisplayOn(CreativeTabs.tabBlock); + this.setIconIndex(21); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(this, 1, 0)); + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/EUIClient/Textures/Items.png"; + } + @Override + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + if (par3World.isRemote) + { + return false; + } + + Block var11 = SteamPowerMain.engine; + int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + + if (ePlayer.canPlayerEdit(par4, par5, par6)) + { + ++par5; + if (var11.canPlaceBlockAt(par3World, par4, par5, par6)) + { + par3World.editingBlocks = true; + par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, 1); + par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); + par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); + par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); + ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); + par3World.editingBlocks = false; + --par1ItemStack.stackSize; + return true; + } + } + + return false; + } +} diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java new file mode 100644 index 00000000..0817f203 --- /dev/null +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -0,0 +1,62 @@ +package steampower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import universalelectricity.extend.IElectricUnit; +import universalelectricity.network.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityGen extends TileEntityMachine implements IPacketReceiver,IElectricUnit +{ + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + // TODO Auto-generated method stub + + } + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + if(!worldObj.isRemote) + { + + } + } + + + public float electricityRequest() + { + return 0; + + } + public boolean canConnect(ForgeDirection side) + { + int face = this.facing; + if(side != ForgeDirection.UP && side != ForgeDirection.DOWN) + { + return true; + } + return false; + + } + public boolean canReceiveFromSide(ForgeDirection side) + { + return false; + } + public float getVoltage() + { + return 120; + } + + public int getTickInterval() + { + return 10; + } + +} diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java new file mode 100644 index 00000000..510f269f --- /dev/null +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -0,0 +1,405 @@ +package steampower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; +import universalelectricity.Vector3; +import universalelectricity.electricity.ElectricityManager; +import universalelectricity.extend.IElectricUnit; +import universalelectricity.extend.TileEntityConductor; +import universalelectricity.network.IPacketReceiver; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +{ + //Maximum possible generation rate of watts in SECONDS + public int maxGenerateRate = 1000; + public int waterStored = 0; + public int steamStored = 0; + public int steamConsumed = 0; + public float position = 0; + public int count = 0; + //Current generation rate based on hull heat. In TICKS. + public float generateRate = 0; + //public TileEntityConductor connectedWire = null; + /** + * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for + */ + public int genTime = 0; + /** + * The ItemStacks that hold the items currently being used in the battery box + */ + private ItemStack[] containingItems = new ItemStack[1]; + public TileEntityConductor connectedElectricUnit = null; + public boolean isConnected = false; + private boolean posT = true; + @Override + public boolean canConnect(ForgeDirection side) + { + return true; + } + public int getTickInterval() + { + return 10; + + } + /** + * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count + * ticks and creates a new spawn inside its implementation. + */ + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + super.onUpdate(watts, voltage, side); + count++; + float cPercent = (generateRate/10); + int cCount = 1; + if(cPercent > 25f) + { + cCount = 2; + } + if(cPercent > 50f) + { + cCount = 3; + } + if(cPercent > 75f) + { + cCount = 4; + } + if(generateRate > 0) + { + + if(position < 9f && posT ) + { + position+= cCount; + } + else + { + posT = false; + } + if(position > 1f && !posT ) + { + position-= cCount; + } + else + { + posT = true; + } + count =0; + } + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if(ent instanceof TileEntitytopGen) + { + isConnected = true; + } + + this.connectedElectricUnit = null; + //Check nearby blocks and see if the conductor is full. If so, then it is connected + for(int i = 0;i<6;i++) + { + TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), + ForgeDirection.getOrientation(i)); + if (tileEntity instanceof TileEntityConductor) + { + if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + { + this.connectedElectricUnit = (TileEntityConductor)tileEntity; + } + } + } + + if(!this.worldObj.isRemote) + { + + + if(!this.isDisabled()) + { + //Adds time to runTime by consuming steam + if(this.genTime <= 0) + { + if(steamStored > 0) + { + --steamStored; + ++steamConsumed; + if(steamConsumed >= SteamPowerMain.steamOutBoiler) + { + ++waterStored; + steamConsumed = 0; + } + genTime += 65; + } + } + + //Empties water from tank to buckets + if (this.containingItems[0] != null) + { + if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) + { + if(this.waterStored > 0) + { + this.containingItems[0] = new ItemStack(Item.bucketWater,1); + --waterStored; + } + } + } + + //Starts generating electricity if the device is heated up + if (this.genTime > 0) + { + this.genTime --; + + if(this.connectedElectricUnit != null) + { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); + } + } + + if(this.connectedElectricUnit == null || this.genTime <= 0) + { + this.generateRate = (float)Math.max(this.generateRate-0.05, 0); + } + + if(this.generateRate > 1) + { + ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + } + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); + this.steamStored = par1NBTTagCompound.getInteger("steamStored"); + this.generateRate = par1NBTTagCompound.getFloat("generateRate"); + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.containingItems = new ItemStack[this.getSizeInventory()]; + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if (var5 >= 0 && var5 < this.containingItems.length) + { + this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); + par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); + par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); + NBTTagList var2 = new NBTTagList(); + for (int var3 = 0; var3 < this.containingItems.length; ++var3) + { + if (this.containingItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.containingItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + par1NBTTagCompound.setTag("Items", var2); + } + @Override + public int getStartInventorySide(ForgeDirection side) + { + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { return 0; } + @Override + public int getSizeInventory() { return this.containingItems.length; } + @Override + public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } + @Override + public ItemStack decrStackSize(int par1, int par2) + { + if (this.containingItems[par1] != null) + { + ItemStack var3; + if (this.containingItems[par1].stackSize <= par2) + { + var3 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var3; + } + else + { + var3 = this.containingItems[par1].splitStack(par2); + if (this.containingItems[par1].stackSize == 0) + { + this.containingItems[par1] = null; + } + return var3; + } + } + else + { + return null; + } + } + @Override + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.containingItems[par1] != null) + { + ItemStack var2 = this.containingItems[par1]; + this.containingItems[par1] = null; + return var2; + } + else + { + return null; + } + } + @Override + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.containingItems[par1] = par2ItemStack; + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public String getInvName() { + return "SteamGen"; + } + @Override + public int getInventoryStackLimit() + { + return 64; + } + @Override + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + @Override + public void openChest() { } + @Override + public void closeChest() { } + + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + + @Override + public int onProduceLiquid(int type, int Vol, ForgeDirection side) { + if(type == 1) + { + if(this.waterStored > 0) + { + int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); + this.waterStored += waterStored - rejectedSteam; + return rejectedSteam; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + if(type == 0) + { + int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + if(type == 0) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(int type) { + if(type == 0) + { + return this.steamStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(int type) { + if(type == 0) + { + return 100; + } + return 0; + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; + } + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + waterStored = dataStream.readInt(); + steamStored = dataStream.readInt(); + steamConsumed = dataStream.readInt(); + generateRate = dataStream.readFloat(); + genTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/src/common/steampower/turbine/TileEntitytopGen.java new file mode 100644 index 00000000..ac0eb25c --- /dev/null +++ b/src/common/steampower/turbine/TileEntitytopGen.java @@ -0,0 +1,60 @@ +package steampower.turbine; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import universalelectricity.extend.IElectricUnit; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; + +public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { +public TileEntitySteamPiston genB = null; + public void onUpdate(float watts, float voltage, ForgeDirection side) + { + if(!this.worldObj.isRemote) + { + super.onUpdate(watts, voltage, side); + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); + if(ent instanceof TileEntitySteamPiston) + { + genB = (TileEntitySteamPiston)ent; + } + } + } + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.onProduceLiquid(type, maxVol, side) : 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.canProduceLiquid(type, side) : false; + } + + @Override + public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.onReceiveLiquid(type, vol, side) : vol; + } + + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + // TODO Auto-generated method stub + return genB !=null ? genB.canRecieveLiquid(type, side): false; + } + + @Override + public int getStoredLiquid(int type) { + // TODO Auto-generated method stub + return genB !=null ? genB.getStoredLiquid(type): 0; + } + + @Override + public int getLiquidCapacity(int type) { + // TODO Auto-generated method stub + return genB !=null ? genB.getLiquidCapacity(type): 0; + } + +} diff --git a/src/minecraft/steampower/GUIFireBox.java b/src/minecraft/steampower/GUIFireBox.java new file mode 100644 index 00000000..71b1253e --- /dev/null +++ b/src/minecraft/steampower/GUIFireBox.java @@ -0,0 +1,92 @@ +package steampower; + +import java.text.DecimalFormat; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.burner.ContainerFireBox; +import steampower.burner.TileEntityFireBox; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if(!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if(tileEntity.storedItems[0] != null) + { + if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Fuel"; + } + else{ + if(tileEntity.generateRate*20 < 20) + { + displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate*20)); + } + } + } + this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" KJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUIGenerator.java new file mode 100644 index 00000000..3680d240 --- /dev/null +++ b/src/minecraft/steampower/GUIGenerator.java @@ -0,0 +1,80 @@ +package steampower; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.turbine.ContainerGenerator; +import steampower.turbine.TileEntitySteamPiston; + + public class GUIGenerator extends GuiContainer + { + private TileEntitySteamPiston tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) + { + super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Steam Engine MkI", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + if(tileEntity.connectedElectricUnit == null) + { + displayText = "Not Connected"; + } + else + if(tileEntity.generateRate*20 <= 0) + { + if(tileEntity.steamStored> 0) + { + displayText = "Power Full"; + } + if(tileEntity.steamStored<= 0) + { + displayText = "No Steam"; + } + } + + else if(tileEntity.generateRate*20 < 20) + { + displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = universalelectricity.UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); + } + displayText2 = "water" + "-" + tileEntity.waterStored; + displayText3 = "steam" + "-" + tileEntity.steamStored; + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/src/minecraft/steampower/GuiBoiler.java b/src/minecraft/steampower/GuiBoiler.java new file mode 100644 index 00000000..16f47ba6 --- /dev/null +++ b/src/minecraft/steampower/GuiBoiler.java @@ -0,0 +1,89 @@ +package steampower; +import java.text.DecimalFormat; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.boiler.ContainerBoiler; +import steampower.boiler.TileEntityBoiler; + +public class GuiBoiler extends GuiContainer +{ + private TileEntityBoiler boilerInventory; + + public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) + { + super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); + this.boilerInventory = par2TileEntityGrinder; + } + + /** + * Draw the foreground layer for the GuiContainer (everythin in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Boiler", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) + { + this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); + } + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); + int var7; + int var8; + int var9; + int var10; + if (this.boilerInventory.waterStored > 0) + { + var7 = boilerInventory.getStoredLiquid(1)*4 + 1; + this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); + } + if (this.boilerInventory.steamStored > 0) + { + var8 = boilerInventory.steamStored/14*4 + 1; + this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); + } + + float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); + var9 = (int) Math.min(precentH*3.0F,30); + this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); + float precentSH = this.boilerInventory.heatStored/1000; + var10 = (int) Math.round(precentSH*5.33); + this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); + + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" kJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/minecraft/steampower/ModelCenterTank.java b/src/minecraft/steampower/ModelCenterTank.java new file mode 100644 index 00000000..fabbd6a3 --- /dev/null +++ b/src/minecraft/steampower/ModelCenterTank.java @@ -0,0 +1,59 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCenterTank extends ModelBase +{ + + ModelRenderer Block; + + public ModelCenterTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //block + Block = new ModelRenderer(this, 0, 0); + Block.addBox(0F, 0F, 0F, 16, 16, 16); + Block.setRotationPoint(-8F, 8F, -8F); + Block.setTextureSize(128, 32); + Block.mirror = true; + setRotation(Block, 0F, 0F, 0F); + } + public void renderBlock(float f5) + { + Block.render(f5); + } + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelCornerTank.java b/src/minecraft/steampower/ModelCornerTank.java new file mode 100644 index 00000000..e4089d3a --- /dev/null +++ b/src/minecraft/steampower/ModelCornerTank.java @@ -0,0 +1,100 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCornerTank extends ModelBase +{ + //Corner + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape4; + + public ModelCornerTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //corner + Shape1 = new ModelRenderer(this, 0, 1); + Shape1.addBox(0F, 0F, 0F, 1, 16, 20); + Shape1.setRotationPoint(7F, 8F, -7F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, -0.7853982F, 0F); + Shape2 = new ModelRenderer(this, 44, 0); + Shape2.addBox(0F, 0F, 0F, 2, 16, 2); + Shape2.setRotationPoint(-8F, 8F, 6F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 44, 0); + Shape3.addBox(0F, 0F, 0F, 2, 16, 2); + Shape3.setRotationPoint(6F, 8F, -8F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 44); + Shape6.addBox(0F, 0F, 0F, 1, 15, 13); + Shape6.setRotationPoint(-8F, 9F, -7F); + Shape6.setTextureSize(128, 128); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 0, 73); + Shape7.addBox(0F, 0F, 0F, 14, 15, 1); + Shape7.setRotationPoint(-8F, 9F, -8F); + Shape7.setTextureSize(128, 128); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 92); + Shape4.addBox(0F, 0F, 0F, 16, 1, 16); + Shape4.setRotationPoint(-8F, 8F, -8F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + } + public void renderCorner(float f5) + { + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape4.render(f5); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelEngine.java b/src/minecraft/steampower/ModelEngine.java new file mode 100644 index 00000000..22e04461 --- /dev/null +++ b/src/minecraft/steampower/ModelEngine.java @@ -0,0 +1,115 @@ +// Date: 8/24/2012 1:44:37 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer Base; + ModelRenderer top; + ModelRenderer TopPiston; + ModelRenderer BottomPiston; + ModelRenderer center; + ModelRenderer C1; + ModelRenderer C2; + + public ModelEngine() + { + textureWidth = 64; + textureHeight = 64; + + Base = new ModelRenderer(this, 0, 20); + Base.addBox(-6F, 0F, -6F, 12, 8, 12); + Base.setRotationPoint(0F, 16F, 0F); + Base.setTextureSize(64, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + top = new ModelRenderer(this, 0, 0); + top.addBox(-6F, 0F, -6F, 12, 8, 12); + top.setRotationPoint(0F, -8F, 0F); + top.setTextureSize(64, 64); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + TopPiston = new ModelRenderer(this, 0, 52); + TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + TopPiston.setRotationPoint(0F, 0F, 0F); + TopPiston.setTextureSize(64, 64); + TopPiston.mirror = true; + setRotation(TopPiston, 0F, 0F, 0F); + BottomPiston = new ModelRenderer(this, 16, 52); + BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + BottomPiston.setRotationPoint(0F, 8F, 0F); + BottomPiston.setTextureSize(64, 64); + BottomPiston.mirror = true; + setRotation(BottomPiston, 0F, 0F, 0F); + center = new ModelRenderer(this, 32, 52); + center.addBox(-3F, 0F, -3F, 6, 6, 6); + //center.setRotationPoint(0F, 5F, 0F); + center.setTextureSize(64, 64); + center.mirror = true; + setRotation(center, 0F, 0F, 0F); + C1 = new ModelRenderer(this, 0, 41); + C1.addBox(-2F, -3F, 0F, 4, 6, 3); + C1.setRotationPoint(0F, 8F, 3F); + C1.setTextureSize(64, 64); + C1.mirror = true; + setRotation(C1, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 15, 41); + C2.addBox(-2F, -3F, -3F, 4, 6, 3); + C2.setRotationPoint(0F, 8F, -3F); + C2.setTextureSize(64, 64); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + //renderBot(f5); + //renderTop(f5); + } + public void renderBot(float f5) + { + Base.render(f5); + BottomPiston.render(f5); + } + public void renderTop(float f5) + { + top.render(f5); + TopPiston.render(f5); + C1.render(f5); + C2.render(f5); + } + public void renderMid(float f5,float p) + { + + center.setRotationPoint(0F, p, 0F); + center.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelFurnace.java b/src/minecraft/steampower/ModelFurnace.java new file mode 100644 index 00000000..19d53f42 --- /dev/null +++ b/src/minecraft/steampower/ModelFurnace.java @@ -0,0 +1,82 @@ +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelFurnace extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public ModelFurnace() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(256, 256); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(256, 256); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(256, 256); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 0); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(256, 256); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelGenerator.java b/src/minecraft/steampower/ModelGenerator.java new file mode 100644 index 00000000..aefb0173 --- /dev/null +++ b/src/minecraft/steampower/ModelGenerator.java @@ -0,0 +1,136 @@ +// Date: 8/27/2012 3:20:21 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGenerator extends ModelBase +{ + //fields + ModelRenderer BasePlate; + ModelRenderer LeftConnection; + ModelRenderer RightConnection; + ModelRenderer Mid; + ModelRenderer Mid2; + ModelRenderer front; + ModelRenderer front2; + ModelRenderer front3; + ModelRenderer Mid3; + ModelRenderer FrontConnector; + + public ModelGenerator() + { + textureWidth = 128; + textureHeight = 128; + + BasePlate = new ModelRenderer(this, 0, 0); + BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); + BasePlate.setRotationPoint(0F, 23F, 0F); + BasePlate.setTextureSize(128, 128); + BasePlate.mirror = true; + setRotation(BasePlate, 0F, 0F, 0F); + LeftConnection = new ModelRenderer(this, 0, 112); + LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); + LeftConnection.setRotationPoint(-6F, 16F, 0F); + LeftConnection.setTextureSize(128, 128); + LeftConnection.mirror = true; + setRotation(LeftConnection, 0F, 0F, 0F); + RightConnection = new ModelRenderer(this, 12, 112); + RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); + RightConnection.setRotationPoint(6F, 16F, 0F); + RightConnection.setTextureSize(128, 128); + RightConnection.mirror = true; + setRotation(RightConnection, 0F, 0F, 0F); + Mid = new ModelRenderer(this, 0, 29); + Mid.addBox(-4F, 0F, -6F, 8, 12, 12); + Mid.setRotationPoint(0F, 10F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Mid2 = new ModelRenderer(this, 0, 53); + Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); + Mid2.setRotationPoint(0F, 12F, 0F); + Mid2.setTextureSize(128, 128); + Mid2.mirror = true; + setRotation(Mid2, 0F, 0F, 0F); + front = new ModelRenderer(this, 20, 15); + front.addBox(-2F, -4F, 0F, 4, 8, 1); + front.setRotationPoint(0F, 16F, -7F); + front.setTextureSize(128, 128); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + front2 = new ModelRenderer(this, 0, 24); + front2.addBox(-4F, -2F, 0F, 8, 4, 1); + front2.setRotationPoint(0F, 16F, -7F); + front2.setTextureSize(128, 128); + front2.mirror = true; + setRotation(front2, 0F, 0F, 0F); + front3 = new ModelRenderer(this, 0, 16); + front3.addBox(-3F, -3F, 0F, 6, 6, 1); + front3.setRotationPoint(0F, 16F, -7F); + front3.setTextureSize(128, 128); + front3.mirror = true; + setRotation(front3, 0F, 0F, 0F); + Mid3 = new ModelRenderer(this, 40, 29); + Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); + Mid3.setRotationPoint(0F, 12F, 0F); + Mid3.setTextureSize(128, 128); + Mid3.mirror = true; + setRotation(Mid3, 0F, 0F, 0F); + FrontConnector = new ModelRenderer(this, 0, 120); + FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); + FrontConnector.setRotationPoint(0F, 14F, -6F); + FrontConnector.setTextureSize(128, 128); + FrontConnector.mirror = true; + setRotation(FrontConnector, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + + } + public void RenderMain(float f5) + { + BasePlate.render(f5); + Mid.render(f5); + Mid2.render(f5); + front.render(f5); + front2.render(f5); + front3.render(f5); + Mid3.render(f5); + FrontConnector.render(f5); + } + public void RenderLeft(float f5) + { + LeftConnection.render(f5); + } + public void RenderRight(float f5) + { + RightConnection.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelTank.java b/src/minecraft/steampower/ModelTank.java new file mode 100644 index 00000000..65a916af --- /dev/null +++ b/src/minecraft/steampower/ModelTank.java @@ -0,0 +1,154 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //One Block Tank + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/ModelToyEngine.java b/src/minecraft/steampower/ModelToyEngine.java new file mode 100644 index 00000000..c465a858 --- /dev/null +++ b/src/minecraft/steampower/ModelToyEngine.java @@ -0,0 +1,242 @@ +// Date: 8/14/2012 3:20:15 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelToyEngine extends ModelBase +{ + //fields + ModelRenderer BASE; + ModelRenderer PISTON_WALL_1; + ModelRenderer PISTON_HEAD_MOVES; + ModelRenderer PISTON_TURNER_MOVES; + ModelRenderer PISTON_ARM_MOVES; + ModelRenderer GEAR_A_NECK; + ModelRenderer PISTON_WALL_2; + ModelRenderer PISTON_WALL_3; + ModelRenderer PISTON_WALL_4; + ModelRenderer PISTON_SUPPORT_1; + ModelRenderer PISTON_SUPPORT_2; + ModelRenderer FORCE_CONDUCTOR_BOX; + ModelRenderer GEAR_A_TEETH_1_ROTATES; + ModelRenderer GEAR_A_TEETH_2_ROTATES; + ModelRenderer GEAR_A_TEETH_3_ROTATES; + ModelRenderer FORCE_TRANSMITTER_ROTATES; + ModelRenderer GEAR_B_TEETH_1_ROTATES; + ModelRenderer GEAR_B_TEETH_2_ROTATES; + ModelRenderer GEAR_B_TEETH_3_ROTATES; + ModelRenderer SUPPORT_PLATE; + ModelRenderer ORNAMENT_1; + ModelRenderer ORNAMENT_2; + ModelRenderer LEVER_1_CAN_BE_TURNED; + ModelRenderer LEVER_2_CAN_BE_TURNED; + + public ModelToyEngine() + { + textureWidth = 128; + textureHeight = 128; + + BASE = new ModelRenderer(this, 0, 0); + BASE.addBox(0F, 0F, 0F, 16, 1, 16); + BASE.setRotationPoint(-8F, 23F, -8F); + BASE.setTextureSize(128, 128); + BASE.mirror = true; + setRotation(BASE, 0F, 0F, 0F); + PISTON_WALL_1 = new ModelRenderer(this, 0, 18); + PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); + PISTON_WALL_1.setTextureSize(128, 128); + PISTON_WALL_1.mirror = true; + setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); + PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); + PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); + PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); + PISTON_HEAD_MOVES.setTextureSize(128, 128); + PISTON_HEAD_MOVES.mirror = true; + setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); + PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); + PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); + PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); + PISTON_TURNER_MOVES.setTextureSize(128, 128); + PISTON_TURNER_MOVES.mirror = true; + setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); + PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); + PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); + PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); + PISTON_ARM_MOVES.setTextureSize(128, 128); + PISTON_ARM_MOVES.mirror = true; + setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); + GEAR_A_NECK = new ModelRenderer(this, 65, 25); + GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); + GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); + GEAR_A_NECK.setTextureSize(128, 128); + GEAR_A_NECK.mirror = true; + setRotation(GEAR_A_NECK, 0F, 0F, 0F); + PISTON_WALL_2 = new ModelRenderer(this, 0, 18); + PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); + PISTON_WALL_2.setTextureSize(128, 128); + PISTON_WALL_2.mirror = true; + setRotation(PISTON_WALL_2, 0F, 0F, 0F); + PISTON_WALL_3 = new ModelRenderer(this, 0, 18); + PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); + PISTON_WALL_3.setTextureSize(128, 128); + PISTON_WALL_3.mirror = true; + setRotation(PISTON_WALL_3, 0F, 0F, 0F); + PISTON_WALL_4 = new ModelRenderer(this, 0, 18); + PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); + PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); + PISTON_WALL_4.setTextureSize(128, 128); + PISTON_WALL_4.mirror = true; + setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); + PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); + PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); + PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); + PISTON_SUPPORT_1.setTextureSize(128, 128); + PISTON_SUPPORT_1.mirror = true; + setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); + PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); + PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); + PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); + PISTON_SUPPORT_2.setTextureSize(128, 128); + PISTON_SUPPORT_2.mirror = true; + setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); + FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); + FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); + FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); + FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); + FORCE_CONDUCTOR_BOX.mirror = true; + setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); + GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); + GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); + GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); + GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_A_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); + FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); + FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); + FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); + FORCE_TRANSMITTER_ROTATES.mirror = true; + setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_1_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); + GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_2_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); + GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); + GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); + GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); + GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); + GEAR_B_TEETH_3_ROTATES.mirror = true; + setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); + SUPPORT_PLATE = new ModelRenderer(this, 65, 12); + SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); + SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); + SUPPORT_PLATE.setTextureSize(128, 128); + SUPPORT_PLATE.mirror = true; + setRotation(SUPPORT_PLATE, 0F, 0F, 0F); + ORNAMENT_1 = new ModelRenderer(this, 86, 0); + ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_1.setRotationPoint(6F, 19F, -5F); + ORNAMENT_1.setTextureSize(128, 128); + ORNAMENT_1.mirror = true; + setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); + ORNAMENT_2 = new ModelRenderer(this, 86, 0); + ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); + ORNAMENT_2.setRotationPoint(4F, 19F, -5F); + ORNAMENT_2.setTextureSize(128, 128); + ORNAMENT_2.mirror = true; + setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); + LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); + LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_1_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); + LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); + LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); + LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); + LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); + LEVER_2_CAN_BE_TURNED.mirror = true; + setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + genRender(f5); + } + public void genRender(float f5) + { + BASE.render(f5); + PISTON_WALL_1.render(f5); + PISTON_HEAD_MOVES.render(f5); + PISTON_TURNER_MOVES.render(f5); + PISTON_ARM_MOVES.render(f5); + GEAR_A_NECK.render(f5); + PISTON_WALL_2.render(f5); + PISTON_WALL_3.render(f5); + PISTON_WALL_4.render(f5); + PISTON_SUPPORT_1.render(f5); + PISTON_SUPPORT_2.render(f5); + FORCE_CONDUCTOR_BOX.render(f5); + GEAR_A_TEETH_1_ROTATES.render(f5); + GEAR_A_TEETH_2_ROTATES.render(f5); + GEAR_A_TEETH_3_ROTATES.render(f5); + FORCE_TRANSMITTER_ROTATES.render(f5); + GEAR_B_TEETH_1_ROTATES.render(f5); + GEAR_B_TEETH_2_ROTATES.render(f5); + GEAR_B_TEETH_3_ROTATES.render(f5); + SUPPORT_PLATE.render(f5); + ORNAMENT_1.render(f5); + ORNAMENT_2.render(f5); + LEVER_1_CAN_BE_TURNED.render(f5); + LEVER_2_CAN_BE_TURNED.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/RenderBoiler.java b/src/minecraft/steampower/RenderBoiler.java new file mode 100644 index 00000000..15cacbbf --- /dev/null +++ b/src/minecraft/steampower/RenderBoiler.java @@ -0,0 +1,62 @@ +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.boiler.TileEntityBoiler; +import basicpipes.TradeHelper; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + private ModelCenterTank model2; + private ModelCornerTank model3; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + model2 = new ModelCenterTank(par1); + model3 = new ModelCornerTank(par1); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; + int meta = 0; + if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) + { + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); + model.generalRender(0.0625F); + } + else + if(TradeHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) + { + bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); + model2.renderBlock(0.0625F); + } + else + { + int corner = TradeHelper.corner(tileEntity); + bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); + switch(corner) + { + case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + model3.renderCorner(0.0625f); + + } + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/RenderFurnace.java b/src/minecraft/steampower/RenderFurnace.java new file mode 100644 index 00000000..2aace235 --- /dev/null +++ b/src/minecraft/steampower/RenderFurnace.java @@ -0,0 +1,37 @@ +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelFurnace model; + + public RenderFurnace() + { + model = new ModelFurnace(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + 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.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/RenderGenerator.java b/src/minecraft/steampower/RenderGenerator.java new file mode 100644 index 00000000..d5f3a83b --- /dev/null +++ b/src/minecraft/steampower/RenderGenerator.java @@ -0,0 +1,29 @@ +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderGenerator extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGenerator model; + + public RenderGenerator() + { + model = new ModelGenerator(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.RenderMain(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/RenderSteamEngine.java b/src/minecraft/steampower/RenderSteamEngine.java new file mode 100644 index 00000000..a8f66ae9 --- /dev/null +++ b/src/minecraft/steampower/RenderSteamEngine.java @@ -0,0 +1,49 @@ +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).position; + 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; + } + if(cc) + { + 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/RenderToyEngine.java b/src/minecraft/steampower/RenderToyEngine.java new file mode 100644 index 00000000..5f84187c --- /dev/null +++ b/src/minecraft/steampower/RenderToyEngine.java @@ -0,0 +1,29 @@ +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderToyEngine extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelToyEngine model; + + public RenderToyEngine() + { + model = new ModelToyEngine(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/SteamClientProxy.java b/src/minecraft/steampower/SteamClientProxy.java new file mode 100644 index 00000000..ee65ad79 --- /dev/null +++ b/src/minecraft/steampower/SteamClientProxy.java @@ -0,0 +1,31 @@ +package steampower; + + +import net.minecraftforge.client.MinecraftForgeClient; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.TileEntityFireBox; +import steampower.turbine.TileEntityGen; +import steampower.turbine.TileEntitySteamPiston; +import cpw.mods.fml.client.registry.ClientRegistry; + +public class SteamClientProxy extends SteamProxy{ + + public void preInit() + { + MinecraftForgeClient.preloadTexture("/EUIClient/textures/blocks.png"); + MinecraftForgeClient.preloadTexture("/EUIClient/textures/Items.png"); + } + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); + ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderSteamEngine()); + ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); + } + public void postInit() + { + + } + +} From 1cf72c7f8d57232da436c1bc37440af3062b0e52 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 10:17:29 -0400 Subject: [PATCH 061/115] Uploaded mcmod.info file --- src/common/steampower/SteamPowerMain.java | 2 +- src/common/steampower/mcmod.info | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/common/steampower/mcmod.info diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 92cae543..3a3c384e 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -25,7 +25,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "V8") +@Mod(modid = "SteamPower", name = "Steam Power", version = "V9") @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ diff --git a/src/common/steampower/mcmod.info b/src/common/steampower/mcmod.info new file mode 100644 index 00000000..107bea9f --- /dev/null +++ b/src/common/steampower/mcmod.info @@ -0,0 +1,21 @@ +[ +{ + "modid": "SteamPower", + "name": "Steam Power", + "description": "Basic coal fired power plant generator pack for UE", + "version": "r4", + "mcversion": "1.3.2", + "url": "", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE","BasicPipes" + ] +} +] \ No newline at end of file From 18079fb1ce1ac0bf7c8194698d322a0b2699b0da Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 14:13:35 -0400 Subject: [PATCH 062/115] Clean UP --- .gitignore | 11 +- .../basicpipes/pipes/api/ILiquidConsumer.java | 35 ++++ .../basicpipes/pipes/api/ILiquidProducer.java | 30 +++ src/common/{steampower => }/mcmod.info | 0 src/common/steampower/TradeHelper.java | 174 ++++++++++++++++++ .../steampower/{ap => api}/IHeatConsumer.java | 2 +- .../steampower/{ap => api}/IHeatProducer.java | 2 +- .../steampower/boiler/TileEntityBoiler.java | 2 +- .../steampower/burner/TileEntityFireBox.java | 4 +- src/minecraft/steampower/RenderBoiler.java | 1 - 10 files changed, 254 insertions(+), 7 deletions(-) create mode 100644 src/common/basicpipes/pipes/api/ILiquidConsumer.java create mode 100644 src/common/basicpipes/pipes/api/ILiquidProducer.java rename src/common/{steampower => }/mcmod.info (100%) create mode 100644 src/common/steampower/TradeHelper.java rename src/common/steampower/{ap => api}/IHeatConsumer.java (96%) rename src/common/steampower/{ap => api}/IHeatProducer.java (94%) diff --git a/.gitignore b/.gitignore index 13325804..456c8b29 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,16 @@ LICENSE /src/common/universalelectricity/* /src/common/basiccomponents/* /src/common/buildcraft/* -/src/common/BasicPipes/* +/src/common/BasicPipes/BasicPipesMain.java +/src/common/BasicPipes/PipeProxy.java +/src/common/BasicPipes/pipes/BlockPipe.java +/src/common/BasicPipes/pipes/BlockPump.java +/src/common/BasicPipes/pipes/ItemGuage.java +/src/common/BasicPipes/pipes/ItemParts.java +/src/common/BasicPipes/pipes/ItemPipe.java +/src/common/BasicPipes/pipes/TileEntityCondenser.java +/src/common/BasicPipes/pipes/TileEntityPipe.java +/src/common/BasicPipes/pipes/TileEntityPump.java /bin/ /conf/ /docs/ diff --git a/src/common/basicpipes/pipes/api/ILiquidConsumer.java b/src/common/basicpipes/pipes/api/ILiquidConsumer.java new file mode 100644 index 00000000..57565dbe --- /dev/null +++ b/src/common/basicpipes/pipes/api/ILiquidConsumer.java @@ -0,0 +1,35 @@ +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + + +public interface ILiquidConsumer +{ + /** + * onRecieveLiquid + * @param vol - The amount this block received. + * @param side - The side of the block in which the liquid came from. + * @parm type - The type of liquid being received + * @return vol - The amount liquid that can't be recieved + */ + public int onReceiveLiquid(int type, int vol, ForgeDirection side); + + /** + * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics + * @param forgeDirection - The side in which the electricity is coming from. + * @parm type - The type of liquid + * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + */ + public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection); + + /** + * @return Return the stored liquid of type in this consumer. + */ + public int getStoredLiquid(int type); + + /** + * @return Return the maximum amount of stored liquid this consumer can get. + */ + public int getLiquidCapacity(int type); + +} diff --git a/src/common/basicpipes/pipes/api/ILiquidProducer.java b/src/common/basicpipes/pipes/api/ILiquidProducer.java new file mode 100644 index 00000000..ec9edc55 --- /dev/null +++ b/src/common/basicpipes/pipes/api/ILiquidProducer.java @@ -0,0 +1,30 @@ +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +/** + * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. + * @author Calclavia + * + */ +public interface ILiquidProducer +{ + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param maxvol - The maximum vol or requested volume + * @param side - The side + * @return vol - Return a vol of liquid type that is produced + */ + public int onProduceLiquid(int type, int maxVol, ForgeDirection side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canProduceLiquid(int type, ForgeDirection side); +} \ No newline at end of file diff --git a/src/common/steampower/mcmod.info b/src/common/mcmod.info similarity index 100% rename from src/common/steampower/mcmod.info rename to src/common/mcmod.info diff --git a/src/common/steampower/TradeHelper.java b/src/common/steampower/TradeHelper.java new file mode 100644 index 00000000..2bb325dc --- /dev/null +++ b/src/common/steampower/TradeHelper.java @@ -0,0 +1,174 @@ +package steampower; + +import basicpipes.pipes.api.ILiquidConsumer; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class TradeHelper { +/** + * + * @param entity - entity at center of search + * @return an Array containing found entities and nulls of nonEntities + */ + public static TileEntity[] getSourounding(TileEntity entity) + { + TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; + for(int i =0; i< 6;i++) + { + int x = entity.xCoord; + int y = entity.yCoord; + int z = entity.zCoord; + + switch(i) + { + case 0: y = y - 1;break;//down + case 1: y = y + 1;break;//up + case 2: z = z + 1;break;//north + case 3: z = z - 1;break;//south + case 4: x = x + 1;break;//east + case 5: x = x - 1;break;//west + } + TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntity) + { + list[i] = aEntity; + } + } + return list; + } + /** + * Only works for steam Power's boiler. Still needs recode to work for all things + * @param blockEntity - tile entity trading the liquid + * @param type - liquid type see chart for info + * @param rise - does the liquid rise up like a gas + * @return the remaining untraded liquid + */ + public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) + { + TileEntity[] connectedBlocks = getSourounding(blockEntity); + ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; + int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); + int ammountStored = blockMachine.getStoredLiquid(type); + int tankCount = 1; + boolean bottom = false; + TileEntity firstEntity = null; + TileEntity secondEntity = null; + if(rise) + { + firstEntity = connectedBlocks[1]; + secondEntity = connectedBlocks[0]; + } + else + { + firstEntity = connectedBlocks[0]; + secondEntity = connectedBlocks[1]; + } + //checks wether or not the block bellow it is a tank to move liquid too + if(firstEntity instanceof ILiquidConsumer) + { + int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); + //checks if that tank has room to get liquid. + + if(bWater < bMax) + { + int tradeVol = 0; + int emptyVol = Math.max( bMax - bWater,0); + tradeVol = Math.min(emptyVol, ammountStored); + int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); + ammountStored = ammountStored + rejected - tradeVol; + wSum -= tradeVol; + } + else + { + bottom = true; + } + } + else + { + //there was no tank bellow this tank + bottom = true; + } + //if this is the bottom tank or bottom tank is full. Update average water ammount. + if(bottom) + { + //get average water around center tank + for(int i = 2; i<6;i++) + { + TileEntity entityA = connectedBlocks[i]; + if(entityA instanceof ILiquidConsumer) + { + //if is a tank add to the sum + wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); + tankCount += 1; + } + } + + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + for(int i = 2; i<6;i++) + { + int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average + int tradeSum = 0; + TileEntity entity = connectedBlocks[i]; + if(entity instanceof ILiquidConsumer) + { + int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); + if(targetW < average) + { + tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank + int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back + ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade + } + } + } + + if(secondEntity instanceof ILiquidConsumer) + { + int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); + if(bottom && ammountStored > 0) + { + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, ammountStored); + int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; + ammountStored =rejectedS + ammountStored - tradeVolS; + wSum -= tradeVolS; + } + } + } + } + return ammountStored; + } + /** + * + * @param entity - entity in question + * @return 1-4 if corner 0 if not a corner + * you have to figure out which is which depending on what your using this for + * 1 should be north east 2 south east + */ + public static int corner(TileEntity entity) + { + TileEntity[] en = getSourounding(entity); + if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) + { + return 1; + } + if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) + { + return 2; + } + if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) + { + return 3; + } + if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) + { + return 4; + } + + return 0; + + } +} diff --git a/src/common/steampower/ap/IHeatConsumer.java b/src/common/steampower/api/IHeatConsumer.java similarity index 96% rename from src/common/steampower/ap/IHeatConsumer.java rename to src/common/steampower/api/IHeatConsumer.java index 9f9c25a2..31accc56 100644 --- a/src/common/steampower/ap/IHeatConsumer.java +++ b/src/common/steampower/api/IHeatConsumer.java @@ -1,4 +1,4 @@ -package steampower.ap; +package steampower.api; /** * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. diff --git a/src/common/steampower/ap/IHeatProducer.java b/src/common/steampower/api/IHeatProducer.java similarity index 94% rename from src/common/steampower/ap/IHeatProducer.java rename to src/common/steampower/api/IHeatProducer.java index 1c13a5c9..879b36b1 100644 --- a/src/common/steampower/ap/IHeatProducer.java +++ b/src/common/steampower/api/IHeatProducer.java @@ -1,4 +1,4 @@ -package steampower.ap; +package steampower.api; public interface IHeatProducer diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 84eb4133..2ef0b106 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -9,9 +9,9 @@ import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import steampower.SteamPowerMain; import steampower.TileEntityMachine; +import steampower.TradeHelper; import steampower.burner.TileEntityFireBox; import universalelectricity.network.IPacketReceiver; -import basicpipes.TradeHelper; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index cf2b74c6..9c659146 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -12,10 +12,10 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import steampower.SteamPowerMain; import steampower.TileEntityMachine; -import steampower.ap.IHeatProducer; +import steampower.TradeHelper; +import steampower.api.IHeatProducer; import steampower.boiler.TileEntityBoiler; import universalelectricity.network.IPacketReceiver; -import basicpipes.TradeHelper; import com.google.common.io.ByteArrayDataInput; diff --git a/src/minecraft/steampower/RenderBoiler.java b/src/minecraft/steampower/RenderBoiler.java index 15cacbbf..1af554d7 100644 --- a/src/minecraft/steampower/RenderBoiler.java +++ b/src/minecraft/steampower/RenderBoiler.java @@ -6,7 +6,6 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import steampower.boiler.TileEntityBoiler; -import basicpipes.TradeHelper; public class RenderBoiler extends TileEntitySpecialRenderer { From 937ee33f7c3f8aa8e3352b2431f3d0156b15b7dd Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 28 Aug 2012 17:29:46 -0400 Subject: [PATCH 063/115] Testing an idea looks like jenkins will not build steam power without Basic Pipes --- .gitignore | 11 - src/common/basicpipes/BasicPipesMain.java | 126 +++++++++ src/common/basicpipes/PipeProxy.java | 54 ++++ src/common/basicpipes/pipes/BlockPipe.java | 147 ++++++++++ src/common/basicpipes/pipes/BlockPump.java | 155 ++++++++++ src/common/basicpipes/pipes/ItemGuage.java | 78 +++++ src/common/basicpipes/pipes/ItemParts.java | 58 ++++ src/common/basicpipes/pipes/ItemPipe.java | 129 +++++++++ .../basicpipes/pipes/TileEntityCondenser.java | 98 +++++++ .../basicpipes/pipes/TileEntityPipe.java | 266 ++++++++++++++++++ .../basicpipes/pipes/TileEntityPump.java | 89 ++++++ src/minecraft/basicpipes/ModelPipe.java | 98 +++++++ src/minecraft/basicpipes/PipeClientProxy.java | 23 ++ src/minecraft/basicpipes/RenderPipe.java | 58 ++++ 14 files changed, 1379 insertions(+), 11 deletions(-) create mode 100644 src/common/basicpipes/BasicPipesMain.java create mode 100644 src/common/basicpipes/PipeProxy.java create mode 100644 src/common/basicpipes/pipes/BlockPipe.java create mode 100644 src/common/basicpipes/pipes/BlockPump.java create mode 100644 src/common/basicpipes/pipes/ItemGuage.java create mode 100644 src/common/basicpipes/pipes/ItemParts.java create mode 100644 src/common/basicpipes/pipes/ItemPipe.java create mode 100644 src/common/basicpipes/pipes/TileEntityCondenser.java create mode 100644 src/common/basicpipes/pipes/TileEntityPipe.java create mode 100644 src/common/basicpipes/pipes/TileEntityPump.java create mode 100644 src/minecraft/basicpipes/ModelPipe.java create mode 100644 src/minecraft/basicpipes/PipeClientProxy.java create mode 100644 src/minecraft/basicpipes/RenderPipe.java diff --git a/.gitignore b/.gitignore index 456c8b29..109ec420 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,6 @@ LICENSE /src/minecraft/basiccomponents/* /src/minecraft/buildcraft/* /src/minecraft/EUIClient/* -/src/minecraft/BasicPipes/* /src/common/cpw/* /src/common/net/* /src/common/org/* @@ -31,16 +30,6 @@ LICENSE /src/common/universalelectricity/* /src/common/basiccomponents/* /src/common/buildcraft/* -/src/common/BasicPipes/BasicPipesMain.java -/src/common/BasicPipes/PipeProxy.java -/src/common/BasicPipes/pipes/BlockPipe.java -/src/common/BasicPipes/pipes/BlockPump.java -/src/common/BasicPipes/pipes/ItemGuage.java -/src/common/BasicPipes/pipes/ItemParts.java -/src/common/BasicPipes/pipes/ItemPipe.java -/src/common/BasicPipes/pipes/TileEntityCondenser.java -/src/common/BasicPipes/pipes/TileEntityPipe.java -/src/common/BasicPipes/pipes/TileEntityPump.java /bin/ /conf/ /docs/ diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java new file mode 100644 index 00000000..4e78f3ed --- /dev/null +++ b/src/common/basicpipes/BasicPipesMain.java @@ -0,0 +1,126 @@ +package basicpipes; +import java.io.File; + +import basicpipes.pipes.BlockPipe; +import basicpipes.pipes.BlockPump; +import basicpipes.pipes.ItemGuage; +import basicpipes.pipes.ItemParts; +import basicpipes.pipes.ItemPipe; +import basicpipes.pipes.TileEntityPump; + +import net.minecraft.client.Minecraft; +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraftforge.common.Configuration; +import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.network.PacketManager; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.Instance; +import cpw.mods.fml.common.Mod.PostInit; +import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.SidedProxy; +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 = "basicPipes", name = "Basic Pipes", version = "V4") +@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) + +public class BasicPipesMain{ + @Instance + public static BasicPipesMain instance; + + @SidedProxy(clientSide = "BasicPipes.PipeClientProxy", serverSide = "BasicPipes.PipeProxy") + public static PipeProxy proxy; + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/BasicPipes.cfg"))); + public static int pipeID = configurationProperties(); + private static int partID; + private static int ppipeID; + private static int machineID; + public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); + public static Block machine = new BlockPump(machineID).setBlockName("pump"); + public static Item parts = new ItemParts(partID); + public static Item itemPipes = new ItemPipe(ppipeID); + public static Item gauge = new ItemGuage(ppipeID+1); + + public static String channel = "Pipes"; + + public static int configurationProperties() + { + config.load(); + pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); + machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); + partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); + ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); + config.save(); + return pipeID; + } + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + proxy.preInit(); + GameRegistry.registerBlock(pipe); + GameRegistry.registerBlock(machine); + } + @Init + public void load(FMLInitializationEvent evt) + { + //register + proxy.init(); + GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + //Names + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "guage"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 6)), "MethainPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 7)), "BioFuelPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 8)), "coolentPipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 9)), "NukeWastePipe"); + LanguageRegistry.addName((new ItemStack(itemPipes, 1, 10)), "Pipe"); + LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); + LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); + //crafting parts + } + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + proxy.postInit(); + GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube + GameRegistry.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@',Item.ingotIron});//iron tube + GameRegistry.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@@", '@',Block.obsidian});//obby Tube + GameRegistry.addRecipe(new ItemStack(parts, 2,3), new Object[] { "N@N", 'N',Block.netherrack,'@',new ItemStack(parts, 2,2)});//nether tube + GameRegistry.addRecipe(new ItemStack(parts, 2,4), new Object[] { "@@","@@", '@',Item.leather});//seal + GameRegistry.addShapelessRecipe(new ItemStack(parts, 1,5), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Item.slimeBall, 1)});//stick seal + GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank + GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve + //crafting pipes + //{"black", "red", "green", "brown", "blue", "purple", "cyan", + //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; + //steam + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,4)}); + //water + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); + //lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,1)}); + //oil + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); + //fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + + } + +} diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java new file mode 100644 index 00000000..617aa677 --- /dev/null +++ b/src/common/basicpipes/PipeProxy.java @@ -0,0 +1,54 @@ +package basicpipes; + +import basicpipes.pipes.TileEntityPipe; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; + +public class PipeProxy implements IGuiHandler +{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); + } + 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; + } +} diff --git a/src/common/basicpipes/pipes/BlockPipe.java b/src/common/basicpipes/pipes/BlockPipe.java new file mode 100644 index 00000000..6f7106e7 --- /dev/null +++ b/src/common/basicpipes/pipes/BlockPipe.java @@ -0,0 +1,147 @@ +package basicpipes.pipes; + +import java.util.Random; + +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; + +public class BlockPipe extends BlockContainer +{ + + public BlockPipe(int id) + { + super(id, Material.iron); + this.setBlockName("Pipe"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return 0; + } + //Per tick + public int conductorCapacity() + { + return 5; + } + + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + + this.updateConductorTileEntity(world, x, y, z); + } + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) + { + switch(side) + { + case 0: y -= 1; break; + case 1: y += 1; break; + case 2: z += 1; break; + case 3: z -= 1; break; + case 4: x += 1; break; + case 5: x -= 1; break; + } + + //Check if the designated block is a UE Unit - producer, consumer or a conductor + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity returnValue = null; + + if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,ForgeDirection.getOrientation(side))) + { + returnValue = tileEntity; + } + } + + if (tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(type,ForgeDirection.getOrientation(side))) + { + returnValue = tileEntity; + } + } + + return returnValue; + } + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + this.updateConductorTileEntity(world, x, y, z); + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); + } + @Override + public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) + { + return true; + } + public static void updateConductorTileEntity(World world, int x, int y, int z) + { + + for(byte i = 0; i < 6; i++) + { + //Update the tile entity on neighboring blocks + TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); + int type = conductorTileEntity.getType(); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i));; + } + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return new TileEntityPipe(); + } + } + + diff --git a/src/common/basicpipes/pipes/BlockPump.java b/src/common/basicpipes/pipes/BlockPump.java new file mode 100644 index 00000000..78eddc4c --- /dev/null +++ b/src/common/basicpipes/pipes/BlockPump.java @@ -0,0 +1,155 @@ +package basicpipes.pipes; + +import java.util.ArrayList; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockPump extends BlockContainer +{ + + public BlockPump(int id) + { + super(id, Material.iron); + this.setBlockName("Pump"); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + public boolean isOpaqueCube() + { + return false; + } + @Override + public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) + { + int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); + + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + + + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + return 0; + + + } + @Override + public int getBlockTextureFromSideAndMetadata(int side, int metadata) + { + if (side == 1) + { + switch(metadata) + { + case 0: return 1; + case 1: return 3; + case 2: return 18; + case 3: return 5; + } + } + else + { + //If it is the front side + if(side == 3) + { + switch(metadata) + { + case 0: return 19; + case 1: return 6; + case 2: return 17; + case 3: return 3; + } + } + //If it is the back side + else if(side == 2) + { + switch(metadata) + { + case 0: return this.blockIndexInTexture + 2; + case 1: return this.blockIndexInTexture + 3; + case 2: return this.blockIndexInTexture + 2; + } + } + + switch(metadata) + { + case 1: return 4; + case 2: return 16; + case 3: return 2; + } + } + return 0; + } + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * 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; + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return "/eui/blocks.png"; + } + //Per tick + public int conductorCapacity() + { + return 10; + } + 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 + switch(meta) + { + case 0: return new TileEntityPump(); + } + return null; + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return null; + } + } + + diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/pipes/ItemGuage.java new file mode 100644 index 00000000..bbaeb43f --- /dev/null +++ b/src/common/basicpipes/pipes/ItemGuage.java @@ -0,0 +1,78 @@ +package basicpipes.pipes; + +import java.util.ArrayList; +import net.minecraft.src.*; + +public class ItemGuage extends Item +{ + private int spawnID; + + public ItemGuage(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("guage"); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 11; + } + return this.iconIndex; + } + @Override + public String getItemName() + { + return "guage"; + } + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + { + + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int steam = pipeEntity.getStoredLiquid(0); + int type = pipeEntity.getType(); + String typeName = getType(type); + par2EntityPlayer.addChatMessage(typeName +" " + steam); + return true; + } + + + + + return false; + } + public String getType(int type) + { + switch(type) + { + case 0: return "Steam"; + case 1: return "Water"; + case 2: return "Lava"; + case 3: return "Oil"; + case 4: return "Fuel"; + case 5: return "Air"; + default: return "unknow"; + } + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 1: return "PipeGuage"; + } + return this.getItemName(); + } + @Override + public String getTextureFile() { + return "/eui/Items.png"; + } + +} diff --git a/src/common/basicpipes/pipes/ItemParts.java b/src/common/basicpipes/pipes/ItemParts.java new file mode 100644 index 00000000..41f5ebb0 --- /dev/null +++ b/src/common/basicpipes/pipes/ItemParts.java @@ -0,0 +1,58 @@ +package basicpipes.pipes; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; + +public class ItemParts extends Item{ + String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; + int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + this.setTabToDisplayOn(CreativeTabs.tabMaterials); + } + @Override + public int getIconFromDamage(int par1) + { + if(par1 < iconID.length) + { + return iconID[par1]; + } + return par1; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return names[itemstack.getItemDamage()]; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < names.length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return "/EUIClient/Textures/Items.png"; + } + @Override + public String getItemName() + { + return "parts"; + } +} + + + + + + diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/pipes/ItemPipe.java new file mode 100644 index 00000000..c9d23a7e --- /dev/null +++ b/src/common/basicpipes/pipes/ItemPipe.java @@ -0,0 +1,129 @@ +package basicpipes.pipes; + +import java.util.List; + +import basicpipes.BasicPipesMain; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemPipe extends Item +{ + int index = 32;//32 + 4 rows alloted to pipes + String[] names = new String[]{"Steam","Water","Lava","Oil","Fuel","Air","Methain","BioFuel","coolent","NukeWaste"}; + private int spawnID; + + public ItemPipe(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("pipe"); + this.setTabToDisplayOn(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() < names.length ? names[itemstack.getItemDamage()] +" Pipe2" : "EmptyPipe"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < names.length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return "/EUIClient/Textures/Items.png"; + } + @Override + public String getItemName() + { + return "Pipes"; + } + @Override + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.pipeID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int dm = par1ItemStack.getItemDamage(); + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + +} \ No newline at end of file diff --git a/src/common/basicpipes/pipes/TileEntityCondenser.java b/src/common/basicpipes/pipes/TileEntityCondenser.java new file mode 100644 index 00000000..25ebd4a0 --- /dev/null +++ b/src/common/basicpipes/pipes/TileEntityCondenser.java @@ -0,0 +1,98 @@ +package basicpipes.pipes; + +import basicpipes.pipes.api.ILiquidProducer; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.extend.IElectricUnit; + +public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricUnit { + int tickCount = 0; + int waterStored = 0; + int energyStored = 0; + @Override + public int onProduceLiquid(int type,int maxVol, ForgeDirection side) { + if(type == 1) + { + int tradeW = Math.min(maxVol, waterStored); + waterStored -= tradeW; + return tradeW; + } + return 0; + } + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + } + + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.energyStored = par1NBTTagCompound.getInteger("energyStored"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + } + public void updateEntity() + { + if(energyStored > 100 && tickCount > 200 && waterStored < 10) + { + energyStored -= 100; + waterStored += 1; + tickCount = 0; + } + tickCount++; + } + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1) + { + return true; + } + return false; + } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + @Override + public void onUpdate(float amps, float voltage, ForgeDirection side) { + // TODO Auto-generated method stub + + } + @Override + public float electricityRequest() { + // TODO Auto-generated method stub + return 0; + } + @Override + public boolean canConnect(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public float getVoltage() { + // TODO Auto-generated method stub + return 0; + } + @Override + public int getTickInterval() { + // TODO Auto-generated method stub + return 0; + } + + + + +} diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java new file mode 100644 index 00000000..cc0da15d --- /dev/null +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -0,0 +1,266 @@ +package basicpipes.pipes; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.Vector3; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; + +import com.google.common.io.ByteArrayDataInput; +public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver +{ + //The amount stored in the conductor + protected int liquidStored = 0; + //the current set type of the pipe 0-5 + protected int type = 0; + //The maximum amount of electricity this conductor can take + protected int capacity = 5; + private int count = 0; + private boolean intiUpdate = true; + //Stores information on all connected blocks around this tile entity + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + + //Checks if this is the first the tile entity updates + protected boolean firstUpdate = true; + /** + * This function adds a connection between this pipe and other blocks + * @param tileEntity - Must be either a producer, consumer or a conductor + * @param side - side in which the connection is coming from + */ + public void addConnection(TileEntity tileEntity, ForgeDirection side) + { + int sideN = getNumSide(side); + this.connectedBlocks[sideN] = null; + if(tileEntity instanceof ILiquidConsumer) + { + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) + { + this.connectedBlocks[sideN] = tileEntity; + } + } + if(tileEntity instanceof ILiquidProducer) + { + if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) + { + this.connectedBlocks[sideN] = tileEntity; + } + } + } + + + + private int getNumSide(ForgeDirection side) { + +if(side == ForgeDirection.DOWN) +{ + return 0; +} +if(side == ForgeDirection.UP) +{ + return 1; +} +if(side == ForgeDirection.NORTH) +{ + return 2; +} +if(side == ForgeDirection.SOUTH) +{ + return 3; +} +if(side == ForgeDirection.WEST) +{ + return 4; +} +if(side == ForgeDirection.EAST) +{ + return 5; +} + + + return 0; + } + + + + /** + * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). + * @param vols - The amount of vol source is trying to give to this pipe + * @param side - The side of the block in which the liquid came from + * @return vol - The amount of rejected liquid that can't enter the pipe + */ + @Override + public int onReceiveLiquid(int type,int vol, ForgeDirection side) + { + if(type == this.type) + { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); + this.liquidStored += vol - rejectedVolume; + return rejectedVolume; + } + return vol; + } + @Override + public void updateEntity() + { + //cause the block to update itself every tick needs to be change to .5 seconds to reduce load + BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + count++; + if(count >= 30 || intiUpdate) + { + PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type}); + count = 0; + intiUpdate = false; + } + if(!this.worldObj.isRemote) + { + byte connectedUnits = 0; + byte connectedConductors = 1; + int averageVolume = this.liquidStored; + + Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); + + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + { + connectedUnits ++; + + if(connectedBlocks[i] instanceof TileEntityPipe) + { + averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + + connectedConductors ++; + } + } + } + } + //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty + averageVolume = Math.max(averageVolume/connectedConductors,0); + if(connectedUnits > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the liquid among the different blocks + if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) + { + if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) + { + int transferVolumeAmount = 0; //amount to be moved + ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); + + if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) + { + transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); + } + else if(!(connectedConsumer instanceof TileEntityPipe)) + { + transferVolumeAmount = this.liquidStored; + } + + int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); + } + } + + if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) + { + if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) + { + int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, ForgeDirection.getOrientation(i)); + this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); + } + } + } + } + } + } + } + + /** + * @return Return the stored volume in this pipe. + */ + @Override + public int getStoredLiquid(int type) + { + return this.liquidStored; + } + + + @Override + public int getLiquidCapacity(int type) + { + return 5; + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = par1NBTTagCompound.getInteger("type"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type); + } +//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe + @Override + public boolean canRecieveLiquid(int type, ForgeDirection side) { + if(type == this.type) + { + return true; + } + return false; + } + //returns liquid type + public int getType() { + return this.type; + } + + //used by the item to set the liquid type on spawn + public void setType(int rType) { + this.type = rType; + + } + + + + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + try + { + int type = data.readInt(); + if(worldObj.isRemote) + { + this.type = type; + } + } + catch(Exception e) + { + e.printStackTrace(); + } + + + } + +} + diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pipes/TileEntityPump.java new file mode 100644 index 00000000..1d39cc0c --- /dev/null +++ b/src/common/basicpipes/pipes/TileEntityPump.java @@ -0,0 +1,89 @@ +package basicpipes.pipes; + +import basicpipes.pipes.api.ILiquidProducer; +import net.minecraft.src.Block; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.electricity.TileEntityElectricUnit; +import universalelectricity.extend.IElectricUnit; + +public class TileEntityPump extends TileEntityElectricUnit implements ILiquidProducer,IElectricUnit { + int dCount = 0; + float eStored = 0; + float eMax = 2000; + int wStored = 0; + int wMax = 10; + @Override + public void onDisable(int duration) { + dCount = duration; + } + + @Override + public boolean isDisabled() { + if(dCount <= 0) + { + return false; + } + return true; + } + + @Override + public void onUpdate(float watts, float voltage, ForgeDirection side) { + super.onUpdate(watts, voltage, side); + if (electricityRequest() > 0 && canConnect(side)) + { + float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); + this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); + } + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + if(bBlock == Block.waterStill.blockID && this.eStored > 1000 && this.wStored < this.wMax) + { + eStored -= 1000; + wStored += 1; + worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + } + + } + + @Override + public float electricityRequest() { + return Math.max(eMax - eStored,0); + } + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + if(side != ForgeDirection.DOWN) + { + return true; + } + return false; + } + + @Override + public float getVoltage() { + return 240; + } + + @Override + public int getTickInterval() { + return 40; + } + + @Override + public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + if(type == 1 && wStored > 0) + { + int tradeW = Math.min(maxVol, wStored); + wStored -= tradeW; + return tradeW; + } + return 0; + } + + @Override + public boolean canProduceLiquid(int type, ForgeDirection side) { + if(type == 1 && side != ForgeDirection.DOWN) + { + return true; + } + return false; + } +} diff --git a/src/minecraft/basicpipes/ModelPipe.java b/src/minecraft/basicpipes/ModelPipe.java new file mode 100644 index 00000000..e1a21d36 --- /dev/null +++ b/src/minecraft/basicpipes/ModelPipe.java @@ -0,0 +1,98 @@ +package basicpipes; + +import net.minecraft.src.*; + +public class ModelPipe extends ModelBase +{ + //fields + ModelRenderer Middle; + ModelRenderer Right; + ModelRenderer Left; + ModelRenderer Back; + ModelRenderer Front; + ModelRenderer Top; + ModelRenderer Bottom; + + public ModelPipe() + { + textureWidth = 64; + textureHeight = 32; + + Middle = new ModelRenderer(this, 0, 0); + Middle.addBox(-1F, -1F, -1F, 4, 4, 4); + Middle.setRotationPoint(-1F, 15F, -1F); + Middle.setTextureSize(64, 32); + Middle.mirror = true; + setRotation(Middle, 0F, 0F, 0F); + Right = new ModelRenderer(this, 21, 0); + Right.addBox(0F, 0F, 0F, 6, 4, 4); + Right.setRotationPoint(2F, 14F, -2F); + Right.setTextureSize(64, 32); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + Left = new ModelRenderer(this, 21, 0); + Left.addBox(0F, 0F, 0F, 6, 4, 4); + Left.setRotationPoint(-8F, 14F, -2F); + Left.setTextureSize(64, 32); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + Back = new ModelRenderer(this, 0, 11); + Back.addBox(0F, 0F, 0F, 4, 4, 6); + Back.setRotationPoint(-2F, 14F, 2F); + Back.setTextureSize(64, 32); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + Front = new ModelRenderer(this, 0, 11); + Front.addBox(0F, 0F, 0F, 4, 4, 6); + Front.setRotationPoint(-2F, 14F, -8F); + Front.setTextureSize(64, 32); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + Top = new ModelRenderer(this, 21, 11); + Top.addBox(0F, 0F, 0F, 4, 6, 4); + Top.setRotationPoint(-2F, 8F, -2F); + Top.setTextureSize(64, 32); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Bottom = new ModelRenderer(this, 21, 11); + Bottom.addBox(0F, 0F, 0F, 4, 6, 4); + Bottom.setRotationPoint(-2F, 18F, -2F); + Bottom.setTextureSize(64, 32); + Bottom.mirror = true; + setRotation(Bottom, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() { Middle.render(0.0625F); } + public void renderBottom() { Bottom.render(0.0625F); } + public void renderTop() { Top.render(0.0625F); } + public void renderLeft() { Left.render(0.0625F); } + public void renderRight() { Right.render(0.0625F); } + public void renderBack() { Back.render(0.0625F); } + public void renderFront() { Front.render(0.0625F);} + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java new file mode 100644 index 00000000..eb707d7d --- /dev/null +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -0,0 +1,23 @@ +package basicpipes; + +import basicpipes.PipeProxy; +import basicpipes.pipes.TileEntityPipe; +import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.registry.ClientRegistry; + +public class PipeClientProxy extends PipeProxy +{ + @Override + public void preInit() + { + //Preload textures + MinecraftForgeClient.preloadTexture("/EUIClient/Textures/Items.png"); + MinecraftForgeClient.preloadTexture("/EUIClient/Textures/blocks.png"); + } + + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); + } +} diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java new file mode 100644 index 00000000..97285150 --- /dev/null +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -0,0 +1,58 @@ +package basicpipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.pipes.TileEntityPipe; + + +public class RenderPipe extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelPipe model; + + public RenderPipe() + { + model = new ModelPipe(); + } + + public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) + { + //Texture file + + type = tileEntity.getType(); + switch(type) + { + case 0: bindTextureByName("/EUIClient/Textures/SteamPipe.png");break; + case 1: bindTextureByName("/EUIClient/Textures/WaterPipe.png");break; + //case 2: bindTextureByName("/eui/lavaPipe.png");break; + //case 3: bindTextureByName("/eui/oilPipe.png");break; + //case 4: bindTextureByName("/eui/fuelPipe.png");break; + //case 5: bindTextureByName("/eui/airPipe.png");break; + default:bindTextureByName("/EUIClient/Textures/DefaultPipe.png"); break; + } + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) model.renderTop(); + if(tileEntity.connectedBlocks[2] != null) model.renderFront(); + if(tileEntity.connectedBlocks[3] != null) model.renderBack(); + if(tileEntity.connectedBlocks[4] != null) model.renderRight(); + if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); + + model.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file From 34aff9017a27a979bdf64373a4a3f8a36f463dd1 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 29 Aug 2012 13:06:30 -0400 Subject: [PATCH 064/115] Package name changes and bug fixes --- src/common/basicpipes/BasicPipesMain.java | 5 +- src/common/basicpipes/pipes/ItemParts.java | 4 +- src/common/basicpipes/pipes/ItemPipe.java | 2 +- src/common/steampower/ItemMachine.java | 2 +- src/common/steampower/ItemParts.java | 70 ------------------ src/common/steampower/SteamPowerMain.java | 9 ++- .../steampower/boiler/TileEntityBoiler.java | 35 ++++++++- src/common/steampower/turbine/ItemEngine.java | 2 +- src/minecraft/EUIClient/Textures/Items.png | Bin 30321 -> 0 bytes src/minecraft/basicpipes/RenderPipe.java | 12 ++- src/minecraft/steampower/GuiBoiler.java | 5 +- .../Textures => textures}/BoilerGui.png | Bin .../Textures => textures}/CopperWire.png | Bin .../Textures => textures}/CornerTank.png | Bin .../Textures => textures}/Engine.png | Bin .../Textures => textures}/Furnace.png | Bin .../Textures => textures}/Generator.png | Bin .../Textures => textures}/GrinderGUI.png | Bin src/minecraft/textures/Items.png | Bin 0 -> 30296 bytes .../Textures => textures}/SteamGUI.png | Bin .../Textures => textures}/blocks.png | Bin .../pipes}/DefaultPipe.png | Bin .../Textures => textures/pipes}/SteamPipe.png | Bin .../Textures => textures/pipes}/WaterPipe.png | Bin .../Textures => textures}/tankBlock.png | Bin .../Textures => textures}/tankTexture.png | Bin 26 files changed, 54 insertions(+), 92 deletions(-) delete mode 100644 src/common/steampower/ItemParts.java delete mode 100644 src/minecraft/EUIClient/Textures/Items.png rename src/minecraft/{EUIClient/Textures => textures}/BoilerGui.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/CopperWire.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/CornerTank.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/Engine.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/Furnace.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/Generator.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/GrinderGUI.png (100%) create mode 100644 src/minecraft/textures/Items.png rename src/minecraft/{EUIClient/Textures => textures}/SteamGUI.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/blocks.png (100%) rename src/minecraft/{EUIClient/Textures => textures/pipes}/DefaultPipe.png (100%) rename src/minecraft/{EUIClient/Textures => textures/pipes}/SteamPipe.png (100%) rename src/minecraft/{EUIClient/Textures => textures/pipes}/WaterPipe.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/tankBlock.png (100%) rename src/minecraft/{EUIClient/Textures => textures}/tankTexture.png (100%) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 4e78f3ed..a659402f 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -34,9 +34,9 @@ public class BasicPipesMain{ @Instance public static BasicPipesMain instance; - @SidedProxy(clientSide = "BasicPipes.PipeClientProxy", serverSide = "BasicPipes.PipeProxy") + @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") public static PipeProxy proxy; - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/BasicPipes.cfg"))); + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/BasicPipes.cfg"))); public static int pipeID = configurationProperties(); private static int partID; private static int ppipeID; @@ -48,6 +48,7 @@ public class BasicPipesMain{ public static Item gauge = new ItemGuage(ppipeID+1); public static String channel = "Pipes"; + public static String textureFile = "/textures"; public static int configurationProperties() { diff --git a/src/common/basicpipes/pipes/ItemParts.java b/src/common/basicpipes/pipes/ItemParts.java index 41f5ebb0..320fcd22 100644 --- a/src/common/basicpipes/pipes/ItemParts.java +++ b/src/common/basicpipes/pipes/ItemParts.java @@ -3,6 +3,8 @@ package basicpipes.pipes; import java.util.ArrayList; import java.util.List; +import basicpipes.BasicPipesMain; + import net.minecraft.src.CreativeTabs; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -42,7 +44,7 @@ public class ItemParts extends Item{ } } public String getTextureFile() { - return "/EUIClient/Textures/Items.png"; + return BasicPipesMain.textureFile+"/Items.png"; } @Override public String getItemName() diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/pipes/ItemPipe.java index c9d23a7e..adfb4a3b 100644 --- a/src/common/basicpipes/pipes/ItemPipe.java +++ b/src/common/basicpipes/pipes/ItemPipe.java @@ -47,7 +47,7 @@ public class ItemPipe extends Item } } public String getTextureFile() { - return "/EUIClient/Textures/Items.png"; + return BasicPipesMain.textureFile+"/Items.png"; } @Override public String getItemName() diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java index 3086957d..08e28e2f 100644 --- a/src/common/steampower/ItemMachine.java +++ b/src/common/steampower/ItemMachine.java @@ -24,7 +24,7 @@ public class ItemMachine extends ItemBlock { @Override public String getTextureFile() { // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; + return SteamPowerMain.textureFile+"/Items.png"; } @Override public int getIconFromDamage(int par1) diff --git a/src/common/steampower/ItemParts.java b/src/common/steampower/ItemParts.java deleted file mode 100644 index f1c358b3..00000000 --- a/src/common/steampower/ItemParts.java +++ /dev/null @@ -1,70 +0,0 @@ -package steampower; - -import java.util.ArrayList; - -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; - -public class ItemParts extends Item{ - - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 3; - case 1: return 4; - case 2: return 5; - case 3: return 6; - case 4: return 7; - case 5: return 8; - case 6: return 9; - } - return this.iconIndex; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; - } - public String getItemName() - { - return "parts"; - } - - - - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 1: return "Tank"; - case 3: return "Valve"; - case 4: return "Tube"; - case 5: return "Seal"; - case 6: return "Rivits"; - } - return this.getItemName(); - } - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,1)); - itemList.add(new ItemStack(this, 1,3)); - itemList.add(new ItemStack(this, 1,4)); - itemList.add(new ItemStack(this, 1,5)); - itemList.add(new ItemStack(this, 1,6)); - - } -} - - - diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 3a3c384e..174d1717 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -1,6 +1,8 @@ package steampower; import java.io.File; +import basicpipes.BasicPipesMain; + import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -11,7 +13,6 @@ import steampower.turbine.ItemEngine; import steampower.turbine.TileEntitytopGen; import universalelectricity.basiccomponents.BasicComponents; import universalelectricity.network.PacketManager; -import basicpipes.BasicPipesMain; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; @@ -29,7 +30,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/EUIndustry/SteamPower.cfg"))); + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/SteamPower.cfg"))); private static int BlockID= configurationProperties(); public static int EngineItemID; public static int EngineID; @@ -47,9 +48,9 @@ public class SteamPowerMain{ @Instance public static SteamPowerMain instance; - @SidedProxy(clientSide = "SteamPower.SteamClientProxy", serverSide = "SteamPower.SteamProxy") + @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") public static SteamProxy proxy; - public static String textureFile = "/EUIClient/Textures/"; + public static String textureFile = "/textures/"; public static int configurationProperties() { config.load(); diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 2ef0b106..a45b7f4d 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -1,4 +1,5 @@ package steampower.boiler; +import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -145,17 +146,27 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); } } + if(!worldObj.isRemote) { - emptyBuckets();//adds water from container slot - this.waterStored = TradeHelper.shareLiquid(this, 1, false); - this.steamStored = TradeHelper.shareLiquid(this, 0, true); + + count++; + emptyBuckets(); + if(count >= 16) + { + //adds water from container slot + this.waterStored = TradeHelper.shareLiquid(this, 1, false); + this.steamStored = TradeHelper.shareLiquid(this, 0, true); + count = 0; + } + if(waterStored > 0 && hullHeated && heatStored > heatNeeded) { heatStored = Math.max(heatStored - heatNeeded, 0); --waterStored; steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); } + TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); this.isBeingHeated = false; if(blockE instanceof TileEntityFireBox) @@ -179,6 +190,24 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv this.onInventoryChanged(); } } + if(storedItems[0].isItemEqual(new ItemStack(Block.ice,1))) + { + if((int)waterStored < getLiquidCapacity(1) && this.heatStored > 100) + { + ++waterStored; + int stacksize = this.storedItems[0].stackSize; + if(stacksize > 1) + { + this.storedItems[0] = new ItemStack(Block.ice,stacksize -1); + } + if(stacksize == 1) + { + this.storedItems[0] = null; + } + this.heatStored-=100; + this.onInventoryChanged(); + } + } } } diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 364e5863..34812210 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -27,7 +27,7 @@ public class ItemEngine extends Item @Override public String getTextureFile() { // TODO Auto-generated method stub - return "/EUIClient/Textures/Items.png"; + return SteamPowerMain.textureFile+"/Items.png"; } @Override public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) diff --git a/src/minecraft/EUIClient/Textures/Items.png b/src/minecraft/EUIClient/Textures/Items.png deleted file mode 100644 index d95d605693ea1a96d168b89631b0714c8e002222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30321 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 IYZm&y09jKa^#A|> diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index 97285150..21d72a5a 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -12,10 +12,12 @@ public class RenderPipe extends TileEntitySpecialRenderer { int type = 0; private ModelPipe model; + private ModelPipe model2; public RenderPipe() { model = new ModelPipe(); + model2 = new ModelPipe(); } public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) @@ -25,13 +27,9 @@ public class RenderPipe extends TileEntitySpecialRenderer type = tileEntity.getType(); switch(type) { - case 0: bindTextureByName("/EUIClient/Textures/SteamPipe.png");break; - case 1: bindTextureByName("/EUIClient/Textures/WaterPipe.png");break; - //case 2: bindTextureByName("/eui/lavaPipe.png");break; - //case 3: bindTextureByName("/eui/oilPipe.png");break; - //case 4: bindTextureByName("/eui/fuelPipe.png");break; - //case 5: bindTextureByName("/eui/airPipe.png");break; - default:bindTextureByName("/EUIClient/Textures/DefaultPipe.png"); break; + case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SteamPipe.png");break; + case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/WaterPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; } GL11.glPushMatrix(); diff --git a/src/minecraft/steampower/GuiBoiler.java b/src/minecraft/steampower/GuiBoiler.java index 16f47ba6..c32bb0e5 100644 --- a/src/minecraft/steampower/GuiBoiler.java +++ b/src/minecraft/steampower/GuiBoiler.java @@ -26,9 +26,10 @@ public class GuiBoiler extends GuiContainer protected void drawGuiContainerForegroundLayer() { this.fontRenderer.drawString("Boiler", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); if(boilerInventory.hullHeat >=10000) + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + if(boilerInventory.hullHeat >=10000) { - this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); + //this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); } this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } diff --git a/src/minecraft/EUIClient/Textures/BoilerGui.png b/src/minecraft/textures/BoilerGui.png similarity index 100% rename from src/minecraft/EUIClient/Textures/BoilerGui.png rename to src/minecraft/textures/BoilerGui.png diff --git a/src/minecraft/EUIClient/Textures/CopperWire.png b/src/minecraft/textures/CopperWire.png similarity index 100% rename from src/minecraft/EUIClient/Textures/CopperWire.png rename to src/minecraft/textures/CopperWire.png diff --git a/src/minecraft/EUIClient/Textures/CornerTank.png b/src/minecraft/textures/CornerTank.png similarity index 100% rename from src/minecraft/EUIClient/Textures/CornerTank.png rename to src/minecraft/textures/CornerTank.png diff --git a/src/minecraft/EUIClient/Textures/Engine.png b/src/minecraft/textures/Engine.png similarity index 100% rename from src/minecraft/EUIClient/Textures/Engine.png rename to src/minecraft/textures/Engine.png diff --git a/src/minecraft/EUIClient/Textures/Furnace.png b/src/minecraft/textures/Furnace.png similarity index 100% rename from src/minecraft/EUIClient/Textures/Furnace.png rename to src/minecraft/textures/Furnace.png diff --git a/src/minecraft/EUIClient/Textures/Generator.png b/src/minecraft/textures/Generator.png similarity index 100% rename from src/minecraft/EUIClient/Textures/Generator.png rename to src/minecraft/textures/Generator.png diff --git a/src/minecraft/EUIClient/Textures/GrinderGUI.png b/src/minecraft/textures/GrinderGUI.png similarity index 100% rename from src/minecraft/EUIClient/Textures/GrinderGUI.png rename to src/minecraft/textures/GrinderGUI.png diff --git a/src/minecraft/textures/Items.png b/src/minecraft/textures/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd95bb448b3bc1480676bd6bbf1ced0d3424f79 GIT binary patch literal 30296 zcmYJa1yozl*EM{DySuwnN`XR)1S{@P+zQ2^SaAyu#fw96C@w_`rMOFrYjJl7Zh?IH z{onPhZ^dRNH<^3S%$>8(K6|1y)Z}rosIUM4z*SU`)dBzzq6h*o&=4QSZe`a0)!en@ zrGc6;ngc`y%|cmT7J&cv$Zs!AMzmnMC>Xc{0A9s^FOYF18wH{f{j;L#JM?7?TKv}( z73eTK0AK(VWu67f;1V(mT;l*Ht6hcBsH7$E3W92NPg;rsO=WGMsTdLZ% zlhn2R17-YK_9_;F{Sl$!Hxls&llg9@E)O?4f!tR2T$i zXGfQklIn~}GZp9o86_XZ4Jemr4ehvP$QtpqYzyzoGez9+>*)xgfQF98`V~xAKYBqE z77C5-5NA)hiRiHM#~HZ+I4lym`P0f~e?(*?GZT|Ev^o8SiGAZM3_LtE;G>n*0jn_Y z?(XiNz4&;%KC6n%tuG^~8A83}z_*)$d5-HGvl6Wj4_5~os7AMq+_gAdQBZ6 zk;(168wHV?((UBGCwPYKF2264rWc}b6aYx0*Cp$IE;|p83STZ;P+1Ww#PdRT+L>xE z$l{)GL5anCxBWK5iID~g&NR&;VMO`a37=dC$?x{mD(ZA=E4048{!?fE`ntK;^W9bo zk}WUN#rwAHGk<4xOOUkV6>hKHkmd_`IKkeneggAOj$n*R(7!*R{DFUfF7 z9R3&;6VrQjFddX`%2m@+V&pC32cOsdQ&{!8MB7!gf#SJcJWdP6eOFBVe0Qi6jX3Cj zvwwf7nGay#b}WpJ3%dZtZouwgZt6v2uv(vK_nApKwlzvaa8GLEA* zD40kNb7I@3v)Ps-$@Bz|oSb}NX{o5Okwo)JQ5OHUzk14-2W|sCer8G^z>gW#S)1_U z&4c^Bgsos~7eBN8`?^W}VzQU}RN^P948G-@NDDF$$XoHQF;8goi;;H%aXsXfeLDb{ zo}^0d5kSsFep;abGHib(|NSD)v0l=_!8*6RncX%f?sM(;S$DtNh+JuLFHO`$vKSj@ zlK^G_my;!O%Lu&w(`)xk%kWdM%xq-(zVvt|V^nG?X|C^3JPp|aB&s7-#H$W^N8$LA1MH$&61W8De$}U#GE>QnlkXElY{9$zSx1<%klJ zlCqYe01OLjsaMd(&=}-szgq>8(aOo05AOhoRym0dl4!G2?`Wmo7OOM%MS+Gg4u+%D zl!pV&h+c3t3Sj>ChM}#^p0pNoyc8wu=Oh;71Q`P#e=w0z#@yOEVzu2*fZ`{St%HM% zl@;sQw>L$}F#a4kbr6j3@87@rb>>p@ARbl#P%bj=3UGF7AQ&OC{T+886Y$bEllbe{ z%$A(AIO4{fh?Am9FQ4V-CO}n4aocmj|D$85IaJw{mj5MpUvh*KS6-rC-dH_rB{Ctb5_ZF0F8P`M!prCz^+J&yb%Ut_Yl=x%>ZDp)*#9rlbuc2?47+vuz%eg*| zkmvY_BGWvJG2_o?8}YBn$v!_CBY*Xd#MOPOW-?L`7&^-OVCjsGFZflJmf_pCZ;ie| zzJFBVYfWB!9#80yI(}YnDkA^)EwMDOCer{&Z2~Md@%lXEmO<7Q1mK|3Rf%Z0 zh$18;QXd zf`GWVxVPu6Q7>4M+0_SXJDf+ZV zfv|IVd*sr+wH8{JiC#41WDKZ~mLJHT5?PTMl)CBPH6HpWB<~;lI!k z?o1?0sb{L5lq*#UO1H4RXNV-o|D{5~QFMi+jG^!9!hh+np))e@?0ndaB(6Wt?=OAk zptx9YOJVXD#*xckIC_28D0CLraq`obmoH~d7{mIssFIe8bzCGRD zpzG`FKQ3MKF06H%37F=n(a2pXxcprM z`iR9Usp~_})KvMP_-yC%12@3H%8JS?7dt_Lc6B(5ZDnP}ph$!w)wQ^2fW0;~6+$cO zX}^KLiWx$(w%p$@d>e~Ei|baXzWt$uFW`yAt;FSeTW17-h~ES)K|q=Z`GYnUuk zuq@MLJ<_hcQif?jU@^*gN07GVYToIvM<(3Ay*-|x;!|cToB#N_5J{IhYSUeLewvMl zi&8JU3;%e?`q#DYgu|1YJP|A}cZV{rN=+mJNlHw}Ip%+!5>+foS*b)zh7geaWJe2v zTwT|PMkdgXTsi_ecBojWXlV8#DC1_WC=4yin8)!}_b4}sKKJh4sRVv7J{IX-V{+$~~uj`7Rys@Z}V&*y{mTMySq|6ORtN%m`}kjO}M#H>g-ny(cYl)Gjp zoEZhZDY?#3f?Tg^jk;)WeBY=gcy)r$S_TQipWE+0FwGNJdHGomqAoQN&(pdwFc*pO ztg9mRJ&im&rgY~ww|f&*UE(Tq^)e{X96#5jG4}q?UFNHp^Jk;%H+#-xEURARBOri| zj!wkyHDyP~>D}$O4&U+4>%HG8@E9Rtjl}fG?*np<#xHfwo{q9m&CP1(cz~74-dIRx zHOe6yX+GQJzkgp!G+)ddcaflfdu+?iq@`GEUJ-bqZL+bx7aCFT$FL-7&iErZvLR+b zKPQ(KgML3o%LljKZ6qnhki%By?HjwB2`wA<`tahYtpoEo3m>8FSuW{At{=&Il~i_{ z$X)l!>50&W@5xTVx2FHOz*vKip=O@1w=_DiY_cWAEU?F)e z{WUY^c<2wLmNQ-{>qvz)xxO{lMi{W1o9oOb8OyXzlv4@Zxj4`)pT{SsGu*3}w=#il zg=aUTD%2X{6iQk$`ArFG#V7~;={g6#c)h)EB5kO%IM8uocehR--#wDqL)ilD{_&xs z7OnvSVG%bVz?w>fOQW%GC=w~_`Ra))J?7|i&1a*Kf6C{zKYwB zw0bWtwoLQV-kX8sJ?_UnoREB>iECOE@pl}*OQj(R)DW&Xk^OYN+JV@E=_Kf-U^O+o z!=FNcMnSJ}<3NHaU!$K|-l>W>alE+s=g)ySY7;d|Lp#JmAYHCgSn^JwtAr+xU&(y> zyK2Vb0s2Ct9kHX6(|IpG7)nH+j}$EJXYg_xe()2Oj(%p018L6Bk|deJ8SH1wGlxZR zc<%Ax=Nxz9{OXtfpJU!Co8|=fAg%=)Xje>2OB1QubRjMqm^YpHv}~oc;|D39{>QtP#M4hV8ahIfQLt7P1O#(r{5!GSWh*aj zT1^xeG`tk@jh?qV!cryFO>`;D-gBJS8lwvjiKrfEDMl|V>o`2Lmm78^1(t{?-j<+% zK%oEdxeRP(M#mIKlwtpBSn0S^ADx=o{;h4d!eNfvYIX!=*?5?Z5po0`2q)oJs6(YReHc!JP)-c~o;Wm; zdaTb}fCM`|w;2R_>-mbKAdC)=LMCu`p!EV(dV98lM}soJ{)e}22V{PctqhpCOiEWL zbQ$I=1{N%woN%LMk+`|JaYyB%V2;aSn8X@-dXb2eZm0MZM&ZZhcJ3|Dr3=YrJ@=H> z{H2wGw0^UF8w2xKGA}}XH-mek)xN!_jig>v82|L?cM-?MB`1<$V1hpcoe?eR<=ehL zSd!R4wt;}Z(Q{K1MRD+f@X9b*N~@9>paZxZ&Cj>*YH3AF*#z~G39eo&YJQFXwWq^^ zGUdA1E@I}a_W0N*Chy?jpjj*|EjY%PLO6s6%0a}3!bFF5sL)6in_T7s4CUmUM-%#7 zJhGzUv8PY_j{;W@a24;uND>9FdMM6e_x;EIFkHEf&)3TXQ45YEr^QCt9J4PHTz^Q{ zrb-%tA`G2Z>>zx6m_1_wZ`hEYyP;&_Ge9e|ea)|5C!dLXdV3Ys&XmP4n128IWw(-y z@GB~8#Mg-j8Y;eqagXp<1SCvY%Nio+p}x<5e`cWN)T%gJt8(0$*DCTQj5eu?m{5CHoNZ6 zMHwQlObGN==Xd)l!V!U2|ErU|FpjbsO_M6nu#Fo;3=bw?&%fxMnwpA2uAaAcxSU?L z?1iGX_H9n2bM_Zs649GnoQ5NLXbzZ%2L}Nyie;IkU`t#UH=gupXS=)BxcLT5NnQQ@ z@384yrdA3)1H{a&THzoXz z8qRXPH(1Q{B?YO%h7LZsT$X$*cwcYG0{a#}7eU5C-(H@4*CQnf8#HjiR2yv{s7a?; zXbv{^j!?1?5wSu^djC$y*bp-;Jp99WuDFOdlwp6yEWB`(rzxt2u~V!K-HdK2bb)@1 zSk&vZZ)Y@}lE~w$9`9>C37BEVw7TB`%=Aoy4D+9)^X!C0-( z7NQCqPt-?a#5mIhi3}yL)p{gr}^GdWB#SL9?$IeDG(Dr?udQEv{66S zmVn3C&-mK1oS-b2<#){nLNiCsu+RClcr>GO^zL4~7kmLJeydDfxD@33nE7Oqygdek z%au;O!$&ZQSch%0VpE>3J4&6agTKl%d$C8X-j|Qz7<8-Hmm#Y{8L*q1_Vdm-Bamb$ z4CkDj_mD|E5=Oy~(>*Nw84r6vOk6AUZvU!f>G7@QdN1;XhSGUlCCX=1IEDcrC^w2; z2UU4B9Xg3gA4#O6@^Yw0V0b$siP11Fk}c@Zax}}yzaqb6#QeyJAQkXp`W3M9B7~1y zLzGlcMBXg@*rYwRSld2xb&WZsI92kzls-{Qo}F9Kp_$b89wDpB)i3|Tlw1?>22_mtO1@)_P_EtRV?FFPLZ)*3+rX@zH^B%_302zr=pa!2x=LdRrNtv2Dr9Au7QW}fnhiF2p%&4y5;U{lY( zG+*+Y_HV)47FWeDu^1{V2&st$6bl^7GHZ}Idt|K>sfk}Hf}@ksf)VQg0m62iGok)s zw=Z3x>r&>cu5Pot=?d~qo^K7jF3!1cX@dv9zVRMp4w)G$Rab|T&=HRAZ^3?6GXnWe zd-GJ@JHsL>Id6%F6)_Dv#gC#FMFOuV40YnDG_7KFt93u*r&DfXXJydkJ(=~YYxt@; zID+3!Q1d;u5^Hye@{N?YnlrpF=PatHtpn*k?Wulya6^~&UqML)jHEt}RQwmtail8Y zHe{&=p8C;T@4F13C$?&{iRi44EOT~(0H@Fa1cffXM`toaDOpt&l=dgSrprEE?p3*h3H(MN<9G8Y4qWv#=TQ>%jrHCP` z_I6QUn&%$0{us;T)_W%u~K=P zw-^1_;iu&n^3+ht>}SV!4AwAusyXWHpKG!~X2J>qEO*x`AU1VOb8FPQZ;%yMupdT# z;{4Wb36l52TSjkhK1csU0*`=*E7&Q>JK)4RXS=z%InudymE;FLjpWNb)UFE<6m?;; zJqQ~jOk`>qb+)khI4{&xSWy0cqDuH9MVExGB?f`Y&4;1!CKTK7x(^>QTu;(SL1m3p zj^IUGi;YoiAKqX-{4++7`D3ez?8VJT>GXy_8UFs^(xA}*d1&4U%Sb&m>Mlj~c_UR( zcBg~6FtAcqH!1>cq=Ak|Oo7CDL;+ug=J3lx%p2d*i!dhW^73+@(4PvfoJYID&PV2* zH-S#O3e}cw?m~I4hia5tC!KyRNJn*8h^HCY9W4|Mw`YF*TX&g!qyrA|XGL3m=Wh?3 z=uZJF41ASxYKqtc@=C5p--*!G$&diIuR7wNK>xYsACaG=Of}-LGKoS5QD1K3Bi6j! z4mAoeGs*AyXRe;(+j-^ZzFJR<$>T+nUVv;81fb&qNPX%sdv<5%akAEug(brRG)X_@ z$0tgpKM5)3meOoKE+ZI)0`&ggI|J;$kJE>6DxlWVYz8{-h?YYLp7wk;uQrH_o129v z7efig?w@0w%~5xgfI9n2<&Tzj+>CQ!B;3sM@v_gtrIg$d<-iAl=38O8FsR^txn!R8 zSMh6h&oN#4Uv{jTRmWM}e@=O#2hzNPRKnVy%ynAGyKe?%OGp&=hbK6{0R~k1KIn z(S(qzFB8sQivGS|zn*X2X94qK9(@O8tM@ePIm;0aDgCa(c?%DvtT}yVxA*bAL9p3b=xe7StkNw+j5z-JD=un?%PW$O+E2otP}# zC-?4Rf$rjT1FLGO^^5U&ubA6LPxya+I2YG9$6OToUN$yVeLsVkUF~JA-@wKoQ|H1e zJ>dIz!(Vn=%4+RT@G;J0+-3+um~Vr$4@WSpjTOCI*-MRqm7K!{mvFF9^2e_`vkJBO zRQ(7RN{Gha@m%N5;T{C6Pn9UQP1~1?S}Ck>PJ62(M&=7s5CWhKxl?bfTgN4XH3hg3 zHlh(Thze!L{^4RsuR^_D`8)Va9pD|H;xHzusf!-omg@@Z|ATKc07KZTyPw!A(Y0N6 zk08I|6=8hMvp)Rccj3@D$Hw1=^CfH@ERk%OVMoOZe0wGEx>6Q_QSg3Mk+~W0E=X<7 z)*CjyZYq3b7TmMFNk44lP5gGrsdUyA`T%n_??&3@| z>KR*1(G#D@y=9bq0qoeQbiH|4xQAvae+cJ>#Ey^g0O0+v9>3)Fe&Z4~?2X^(QgQPcU$I*Xj8R zoM}bDD7`G9y_A%v#p&jwt=)IGSvm?dyp6uF(EN@gEa24~(oltI@sEF zw|~R(M)fI#)mV3#Saoc6G@9`Gh1?)(#7q43hnm;pyDFqACYy~GH~sk0-5^yNb$93e z`RxP6=Cnk}bTzx}1+ny2kmcn$=D~PaGwe-0O=1>X8I5o?f}V9rr{Gy_Lbw4 zEIw+PoeXJl4bf2L`*pQF%~SV>NKyEn9lf+X?m&P4#t*`Prf-m|*By|20PIywuvu+X z{^k^MTfW3%(h|bW@X~Vl4&n8hQhqr>&hRJa{3sKNC*TzUVs)|4e7L&JQEYu;5gZPG z#vVqXfpX7(b~iDsomF>aJk>Po+s76!@A*sJEvHiNv^1wkC=fqe>uGpYXRCrNbNhgC6rDlO_&i*-}c9scj^cLA~h`>y^`T%@Nu&x&V_4c0j zjWnl97Hl+~Z?H7)aNIKJDTm3?K$xO4mlM(!(REK9{&w)*->vqi>e+I~>SCl?J@wn! z+f{aS=m>Vq`lf}kJx=Q|GayS1&F({5B<^+p-8T z(d~IkEzLEo@Gv#mwuw*+^n@bJ=!@5gw5}uYs_`etRX6`Nx-fAf|Lhs^Jt$F%kSK)B zUn8uK;39j<2TtLgEJpD6nCrvyz`Lv06!0jg`8E7xoHPDK4`daKuetSriUpBWG>+@U zzqCXHc(X5BZQF%XdS`Ic+iQBM#x}aohIQ-S>L0}c#>w;qxXs{Evbw}Q3Sv;?Ra9bi zwFr#Ra7(`nIG5V0&6ARm6{_b+pyj2T+D4gr?@J|t#U{v#Ld(CJ-tTZBLV&IJNRO+p z91qU>8ebhte6@f&LpN+cM9N_gUmwl?u;|Bf?K^{ko&E{Nd3u0TAqCd}BFnw^9kroi zFdmUI{C`@2cjH7GR6g*}C=8FCHLN{$uv~FJl<~Z@G`1F5k+}bkE^%8URPf^ZyczVH zfGdhz37Je8rkGr&)PP8|&-onZZxG^~FXmxmV{7W_vKeC5>5+>Desfd#n>EW}h#AFO z$TV}rmwg!5nua&iq%m8tVp8Q&`xBQ=jVuabCM~2#e3P!td*a5xv%d-B-Qz1XF?;F+ zVi9SqM?rHM7|Ul5VW$7$bPBOoJ-XmXhUqJ{MQ{H*`fvnArf zgj!Nk!okHw^e#|_8AORnKx-j4Ck^T{^9ojud|NM&YqHg{Par^aLaE>4g8v`Z_J?+( z>;G~qi6C0|<<9=_k0dF;2MP?0Maad{iBlnRqyL1QaM{wa-$)E0z$FfP)JHF_!%tyM zi{@ekO5QF0>YTAzs8s07^^dVBqj~GJ5|fv3>FZ|%`5N(%ea3uafp_Nm0Ch+6wm2JXq!O-!(O^H_h9abQ9>~wf0EFcep6_JN8fgw;8p^Yu6RR7BA^5BLTZ0W~ao0P64 z?!w`*51?*cBtePNa^W8j;e$z;Uij#0#p~PL_jd=)zHP2USfXIC!l|h`Y7{iDlfX@U z9;~6IfcMb^+%55|z#(=TJY^zw68G8NotPAR{H+`^d`4UO{I9T|$L5>CD~#vcz(BS( zOlO`|>3s$X9}S0Z?t8tgM3_2Usir$!Y@B)f%wFmn^xK!&Z-{M&UgLp1d0g%<=+BU1pp%H_AmG&wzxx8GxBiTm(bNxn>a72Hd$#^Cr*^88t0LoN{Mz_NcfAwsX=Ib z0#&)nk454@LJa_-7wRHX@x!6fJ0A79BS zLWjj8Ut%+8+Tg3v_Z~4eVWYa>4!#iMa*1efu>oTMK^p{?^R{~u;B*7nc&Fs{rP+xS z_X2WM_wPSc^VOHau_bPEdc9;BtTr|BefNxoPZ$#5%Q2hE%BQRt?`LVsT8q53|I%aU z=znztce2WVB4JfgTJs+GE~PP^j2DW2k4XGXUOPHdN*eNl(4k_Dugxybm-u-+guTUd zNH`Loy}p9#2VZ+^=4nwWdP4=(xygq#H9lyzAK#_!(@KL4zUS$3bk>r5c-smKVBGGT zx~_IRdDqw|*aq#v4l(u5ue?yFE&MQFvQ1eRaddk?P^V4fZ_Q1bjrbg)K9*(@49G3ug zmxP3eEC4_{bOUbrYMWSq_0b^B(UdiDH=45)qoR&*SqiV&l9ZqQt(1WQY>WKO5NY#fGpO^mXCz*$}gyaivPOR`*O_f#aDKMC2jX$T95 z-aOPLG3(&n$3kdYh;;}OPemX&@99H?@$yTYk$(1+pU;lkQKRZQJBThM10dCj(bk+3u|_{<(n?8_cg&12a|7GF8|pNIvsc z;+c-6rSN_KS=mFF4SU$0#+R6|U6!D$;i#+{$a}Y$j13KPRvnxNug)=bFy7`dmL7sg z^Ay|9<{i7|fpDtt6pM(JzZR9DF^AjE&JN9K?~4W@!H<5ayOF@7e`=%C>fpHAjt4At z@RQ&Ruzk4*~k^TipFR3m<*zS9kboNBDoO!Cx zyaT?!&1<{cj46cD2i_GN>}2$@u-#wA3?sc9HZy#H~Q!3%kbb2u>FF+vMNT$ z8p%c}#bRb=z8_q~#6-&(lyHk0xQz&F1g|tyl;t0)BXVF=?_iiR-vobBSDN2; zD@Y~7so(1fu9;)|T|IiDFViOwk}8s+#i8m_vgY%BImYazI*dCE0_LR`WjI2CVrM$7ti6<)Lgo04h(F&24es2ot66{1(o_AcRpU$ zmX&oS6Svuk(R~z$WDM?p*c%Jl7{AXe*tLTKc ze0NI&GsyZs9R>H_)vI0uID$f9ePO~I{UhgFgH375!YF1-3m~xk))>9t;Y%+2;QhqT zvrBfsJ}cqo6uiiu0p!2OH@D9h4Ouyc$|+%C+I~lk3=ijDeOlxTlADbf8~?{4g0>%@tJGjCtd$sm;Wdz=t{RS@NnI%E%ZWSv zs`96SAk6!!Ra&7t9oZ{yfBl$4l}tt>qMPBox+e?FM-&V}w2r@(=+vq7lT$oKl|emuP_nxzB7z?%8yF zH(%j72qIQ?6#({mo8~hxhrrE>?9ZV^&6xj=)W?B|HH5_?9;%29z13}$!<0o80PpK| z?Y>oBIHW3Mq-?3~5}kyc92tPYV0Bxmg9<I`T~ShyAFlBKA`jv>=M>Cvyp<|&W;J#P3B=_iD4RSuy*YuPSkWncg*b*rWQ z{l(ssLz*N2RTslMdpJTQ3%l)v?}$gRiA*c_xILF>aq^fwgI6tWL(UXTWjo$(0^Mw2 z>L6E#d4HZYen4n;?~J$mzLBe2l3wE6ogI3em0!MCzfa{J7M`zV2W%6AR$4t`n;2Mf$I>Y1Pospv?Zuih zoh>aCfq{Vwcdvv3(#+I2(IocPstmev#b>Vaq?1P8!m)Gq=AZDAYfb?JgRmq433Ci* zQ#~X@Mwi>m6|gAlTfqsu>$vKCQfX&Cu9d86h8C2)$C@JwInc5tDm8{xp{pLQH8&70 z-Cc#o)98ZcHEaGFw8&?SF>Z2wn-GG??U(J5S0dDm!(W8GNhOal?I(#DFQ&2b*P2B& ze!(efk?O9_!#0n$LO@cVq4>f$(YoM=kdS=}NOv!tMbz2)IwV`T2AH5H5pN6(6wOzRVav}#@RC{`1xkwV%(`F~EvC|Z+D@*~C$w!%=A&|$ImcNGxu?Tz~Y zhyQ0mE7L{_Q;e zIbzcny8HWp66s&GVzsH)l9&l9v}{d^v%Z7x0sCx>TM&h>~)i zfWkHu1|!q1MD!dT&c9t-?i?BuTB0cquQF)R(AGvq$aIUMh^eV#j*lI2C|-7z<%0Kz z25rZ9LsY>*MZW)aRaD%9+Wu4(_tTW;=u;uY=Dud%mfinmQ4WywSl5pW$lK9g%Jciw zYqm-i6%}PJ(J)=u{}vT~db@Dk--IEm7F^jPXl0-aFoT~bm~U32sN!k{UZ zNtA-%ssog}u6{~qqNe6W1}jnLMUu;c{t|G-i4F4d5}w=(x?S;Vy7BSxd153Do*R+$ zzdv@oC|%`w$`USd))|K7ZpvHDh?H_}2~@V{nP%XFfNNH5AOl#QL8{z^bh zOzcVm{u8Pm?OW;kQec{9#n8Zrai#$Xm#3fec{acYONFf|$>t3{LcEKG0f?AUh@Z__ zLEx^K<1>^u=Pn_BjWMiB+j5ByXoJJ1p>aOOpC4nse3|N+23ddi1^x>ydj!0-#R1~g zFgW!V!X+(ORG>qDOTf`h@VjQ7RjvWSejWUEuYl)Hd2vXm-=n}R^2-g?yH0*n2QtZ; zde)xDx9hresU4Y`3+9RBEsIV#|G61!e)Uft<^kT6i+KpDfK_7OnC&e$_b3Bw#}nLh zxp-f82O}uaamT{_9e4}s+hpxn=u8+1`t8p-ZO+$%;9Mf`n?se8zo0> zwHmVtPOP#@N=0*L5!YVk(0q42oW(BOc_8%9n}MFbPG zZ_A)95V6sqeMU$ha20PFM=Q~vOtE$tqB{S@XFRVcpX4?wFza%C_}5H3$@{~Oz!$k} zofI%)b&Zc;AEJ!casQs5A0^j1X7-vKf>TI@y2;7A#Dc^N8|l^R^4O`>Z3r)ho6EId zj%>&jofCpP5|*VBDC5i!n8GyR`hCvbm@j~{@dQJn+#LOw14r$-J-D6UsJ>r9D6$dD zj+~+*Ccuz89hf<+)jI!hej)ymOelmUxOKqu&i7x}z!XkuQ!6>U`Id9>UiZidmQo23 z!o9e-xmi@yM|Iom3@4?hM}~wTiNT<~Wwo{QL-X^Ie0*iH${#olV@B3rN+2CZur=z< zANJ#4b1W&C1W{I0RwL{c7OhFAQR$>FL>wQ^erId+D93m%PS4R*Y z9$r^pFKu8zd3boJp{pB#VEGZ8m;ECO+D!q{3s^fV6&v^b75Ud6mgNzLXNFb5rG5dv zorx&u=w7*WX%K%fF6Xju&XRcf_%3gkCyjVIRgzvEMIh>6D+&iA?FY5p?&< zAtQDDa^HJtH-%Wc{@BQDkH?>35?1h(>>yJt4ANa?nDHF^!h+CUx(_~Du!x9I{QoU6 ztm1m03Clnk#adT--$PI$%dFo;QXX$_q;_XR!0)_)oA;GpDBqpyk$dup8-2dc4Pu3b zk{|)L++Bzu>2xPf6L9=r@h4L3f5m)Jto+h&T@**`ZWcEFXhj5VoD9okefu_x)BeKi zYtfz?bhie%6Facqg&fDl{gseJJcThngv_!6G?@wkwkkkB6fISR7+Q%4%#HuwhrbYm z$u;mCwaMNz|4*04dH*Mqw}sXOayK9TrDV1TwXunDuyiH2~xzwys1+ zN6XD31CSVUJ`02}@_*$Bhw{X;yPh&%03m_1CVt(Kv{>y64CvyUP8`U>a!K?UTXsv* zGsed{I?7Uq*Xte9Z7<-?J~+z(=v`AiIHZe;E*?z?P3bsw3CilS2k^zuii5Xcw=p5` z_hZK`jULPBWd;vIhd8Wp7XP>iAg20Y;HZ;h{ zUojjRVOzmjsj)ITWE@dXlzPCx+E=?c_TRrlAY zn@YF))TqI1%+6S=SmSLSwF*S`(Ecs`+gRfx5lX#vxjx2(xk;$9uU?kVBOuF_*oA4%56X8fLH3QZZT)dEQX4X$+N(mH~4;@Yir_s(eFz^6Yn(WvTUat=zb zxDK<|Pd+9HcqyA(*@S=7BDFs`Y=rU`d}0`;A_A7H+M-RALr^g@VLcda_ zBbfbx?B?<>_dl@CBHX4xIaeoQ3+Ipf?axW~X()g-+4|^$zHDUJx~U26l(KRX#lm;u z&d1C=3;>E-po^4drKSD7>3z!k`kTJ#e+_^mzh}T>C(`qOAxq&AdUUQx&|MK6ly8DB zsgU-U?#nkKR= zz4r?WfJsm}{H4w^x0LET%6ezx$od)(ZCd<7(5oC_H1qxr{PXj#+jTO^FnfbH9qL~T#xOO6 zk>X!VwtfZUF|f_x)~XgLOb;5kV?alO9ow310W1g3wXWYb7l=3zKm@AF3$v7F{D{<( zx6q1Z6uzVm!NeuE-q#wxo6o*CzZKNgQIQ@(L-r3k-?@{&?DO(;?+&K#D7|4190j9b z+%(8QnyV+JxPnmqC$B?gy+S@Oh$Bq2>AFS-!y2JRPt-0H{Bq}bUy=`W@|adNnMB<= za#mJIX~CQmMMO3|r*Hw&)SEz6wqcfJz2v~PjDkL*S57#d3;)Y+T@Zr+~Upw|USAP7k^8GtoXq5VBDZRfWpd(43>Rr)1MnVhpv9@%apqOo)eA*J; zpw3Lu;BSXFqj&a{(0elSR^sqIdu40(A@;pQ5acyM@{7ijqdwOB?*Tsm5E7GKEvGDc&1Ojojaw;wB~z0_UH zdx!Cf`2~mbE8n=sP61Ohae!Yb|99UR=Z8T!HPOY9aGA1e6l$5IO6N-|6I>= z+N)#rz^9)pec2w!%18`~Nzrel?@n{q!r*@E$jm%`h)4*n{BG}Sk4xAJXRbWZg&;}85OCppeNqi0n$Z}GF42mPX~^9hWHF%*`r(?F z7;7t+$dIDUo71;KoK(&>zu=AgN^snphTgB79r_LIMu}I%k*$T2YO1WL3aoOXG#-S{ z3ZAIDIMBWsNiUS&9uKS)RIYE$x{s#|2vAsiVqP_VJ&mrkT(^~D@Ypur{cUB-@$YoG zd!jGfm=&>^w4YGQ*6B!+Po4b=_b`&nhjWhh_sDysw!U<=QhRy9avhBUlgUyH+2LEh zn;uxRiK}N2uG{Ts9n(9po9gNSmuGvSO|_YBf~jdDA#RlOLCy>LzAHH`N6c!JR@Sy8 z2#ey^)YN$pfc1_G=voOtq&RDm)YbjIL2uL6r}M%_{nz-!fcnBss`CNx-rD@-^g$V0Ua$V)k-lu`s!S#ih!W78w23nev zZ}}XZ2xa{e^wP6?chM3h6@nN{6tK+SpgmJX^Pi&cz$^n)6HAxsOC2OOU^r1+Bn~q? z{Ktp76fv~edpbJP8<9JMOpc4`;!@whm)o^^H^%&wAxkm3I>we!Tc;8v2=*Oyu7-Au zjd36$ip`tq47nFuA8AFrQw`g^H+x1|;r_X1EI0cn$`{_kNzDs^vC{W;9GHf8bLjh+ z+z>Wj-S^CvpqG2K_I({!uZ+LWeqnCU|?u5JjBr0_>2;TQ#10<~GMn(>ykC_8r}7 zAQXDjTPzXZ*8Y5wo;!FlOiavwWL%@O+^e_&M6(8eAYVlC(! zb`3~?riE|q7#RSH477p*7*8xl6oa(v)tknEKztKB=p zyPv%#0i`$of0eyuR2)qdCOo(YcZWa-!QCN1Ai*Ix!67&VcLsM0gaE-qa0~7l+#$FP z1ZQv%NcAGL!`@ui|3GqRVKniy5le z#wb|^>SbQfPZnebEffHD#(cLnYjRw+<@{G^ES`PK z&k0@V4EBVYfI#rvJK%h9b3c#_{->eGDr~k*of&T$tS+V$q@bV>8L7Vc_WJqL$2^DU zIKf-H)Vx#JvQqFf@wdryoiW}*q%wTDps{I<{8G#)w@c0PKOr{NtTQz=_%9c}mud*S zU0*;VC&!S-r47G%A$a;-JKwmPGzsQOMmHt(W%BFJ(WZ0<<0GB#RJ?b74_UFi4u z1)1cYi>|g{xw4t}$>HnEbld%*m zD?*K)6wBG!o5-_;6<-0i?aYEd7u$2Z^`9vt@$n%tzvDuwfEUf&qBr4)20Vu) zkI*7E^pb@vfqD_2dINWc3LP_osNM#H4)xyi9%&(aim(C1)Ztj`@mqW^iRu?%^!yS9 zO8kua_o{hbquWK)oJqqVBykj*K#8R*J&jpTGlCe8o%0GZIZFhkr;L1fU=>Jt3GXy6 zaMbSo

A51B6%60!H#g<8IahrTNf@?=LuUdR{*;3Vi=oP^C~-1R7ueWOjHOnrxTE z05HRbIcW9RMdIb3{KR@rspIpD8y@%Hiv9+o9R9bnqNtehzvuYw|E6MZo>~s+ zBVW#9zoiEmA^jdv2Xjr9%UTLziR&R7kZX@?^l%6Z$A4-(V*krL8*b3<)uMa$A+;vY z6Es@Kc0xz?nWC%J7u(!nm9*WGjSf_6t^9rF4pOd2L`GMQehUX|tGxSXfjcW{R^c2W z(m#(o%X+Gpv=cURov^asRQ?IMW)FI0RubbvNu^`}YV|IdoCs-6BL&D(sA~{K&Auh! z8Pkd9cY70DQpoS7#J0gSugY}C>LviN{Mn=5RmN&nlCx7Da zC)V4ZIo6E{&bz^JuMiTgnmZ-_LHrp00Uz{bj3GS%&9vlY5I4(AI36Az?)`dTyHddG z(eRwb0RtVX9UI*Gin-s(O~^haNJ+HJy#7KVlK$1^Ly25x_bZKmDBWnK)pRfuDJmqN z3F7kj(17%2UMh83@gCcbZPcFPyzbIm)8SRf>eLT%a)z``3H8-cc4v7Y2)saV!T^qks%*?F)q+26kGV5Uf_b$i7k z?Yv4Ms_>NS&v=Rqgk)q2r_1#v^--T9gPvyJX8ry2Zzf}yz~-|m$nqR8%bSmbEzcc4 zu26Jrhkp&->&~d`aov81;X@qqN(Vox1y$d3?@$wnDi&cT zl?R=(O+srLf`z}r>;q(Xn(G_FyW>7Hj=d1Xx|%eI_(?VDHmw-+IL!E)f}lqP9>5gU zJMt$d25Wl$kzW$QX&N?ySXhwCcxeEN3)K=ZR+?V25$DnhgQwk6`PhJ3)Fi!4sl(r) z@+gJSQAOuG<5!;IeVYc(DH4Xfdj!KETvmQR3yVj-rN88Zx;kN9 zk(%mHRGAN9*qsyY;{k#FB}KJWc<*xLybKAaCA%p8)kh&WfY;q*Ks1)% z{;-FDJ!#rQ#Vq*oSz9EM;}(%=-t~7@Bix&t zzkSJmyI?c9Uc_bxsKr&RZC22AMcnp28h2@m`8S&pMD3Ko=0d&Ukr~3$}(53otKY9C< z#w=6|b)8f$G%&ViY{u)ObMi6($^j^^jDF~(%x|Y)&?6XvhX`OrAeFpI_*I%xW7A`s z;U8e4u00!@je+|#>U3}mq)7QJ2vkOSazq|v;G6mL(+Fj{?80cQ))JnAdre` z@S`UFW)c(bJyK5}dg?y6tdpixQwOYE%|WJ$)ptbN)fP-L@}|~&))YdO{{bI#Wud@) z@tO6f{v)0y`dQUMxpN25nQyQ1wrInkEYhF`&tzL?O=iCq@s#>B^sn@wm6a6@KWMnE zL>3%0y|fhV@JgB_!6ua+G^fgrE9I>%kgFO5vUO(tda0bN)*-u$ZeY!?%ZV9oaCZ1b zdw+Xq>{dg+TGr5+cGeA=th0t0QHLkT#L6Hojo@BR_Rn$2?<;r#9$mo4VYz0WQ4+BNBL zfDnc6t9!;vG3Q=8eAST+JUuxLzG?Dm(f`U;X-BI190Bbl5Za&y}o*fReJI~!cR>ZZ=r89QdgBh})P>@`tdzOhcDhNgG z1vrj#!dK&LxcBN4;)H1)Y+sZWt0fY7(tiC|^6#PSqmTO^ba}NL`?=0a<5ieV>9=%G zohMOaqmZ^6FU=M)7Qz0>$u~W_*T^cg;v^;9B}^3>iGA3ve_Te_Zu|ORR~k91q0~|K zypCP`qnCyQMxdhD&jO`l8Xh&26P)&UK1=y+)ubpWG-e6}Y&r)f!92pkR5Y#bc& zhgHOw*m=RgnC0VRBCD!60mrT9zpJY&*WFRlY^gx1MYW*l<+$evzi^H|UoPnm>EJ|Mt*Q?rJp*(aOZ_&S@_;N7Da6oI$Y}pWPvQ?bZ+q4c?;Ksp0-b z)U%RBot&x{4Y{;07z50C*nQIEoU*FMv}$>h4!=o%dvTuMta|y}ZRtwDe@hY(fBc&D zri&!Ke+~CFo|5AMZFu&c0$k&r0kV3F@3yUHYyP3B$$D^^WmMn#JeughF6L#b?D|6d zY&m-PU8`kZG>^c%Hl`tx$CQh1No0fp;f?|40j)ENjwgn;r+xT~uV%p&qLyd}4Im;u zhpi(sEMO-Tq^#L9KQo#i<+C?Vna@u7yg@{>a?1rIVd3@-4Gi?wow5RM7yX+#ZCo0W zX@-FH2ziNL?7`j5sQuk0kuO_n-rgyvyJb=ZBm5p{9#EGK1`aAP&hDX?0xF0Ie(7;hvMq>BGH^i`yjcL*|u1ljO9fbFLF$r)U_J5nyh%8w6zD$ z+c&qb>gqzBbyutH$j6j8IcCN$LvKNv-^9mxdd7Kh|9p9R;?3P2=Rx7ee1GRFMJKU2 zKJG9XaTNsK$QyeM3|7={Z%S!s2yu==xPK!Izq?y%eAeXUb^NQ>g8NjHC6E%*`#eW+ zy^}kV&K%0W>$j)!VN0deB#~gn;oilBFZrB}epKC%BJfWFX#e>I;TKw59?d}&MgyMB(eKgGQI_zvsdo|bv2*ZZtXw#(3l{9&J_zWV&? z;^t>@a=fy`5z2O6Mec|^?N9Eq5gEf* z-P&9gB(cB#d}s$MXE9qM|MMGULkx7#LKkc~a^7VNCwl0sw^hcb$n|>T-Oao}N8;X93^$E7 z`Elehg>`+n0MS-H6<&>wPpst+GBmV3+#g#`aqGxgb8Ui_T+WLT6;`&wi&OX)Tv2ii zg@Qn)c{fAVw=S!Lby4(tm4*o$Ru&V=+_m7&+N*|wChzLI8upm8C=-ZP>d*i!XFSI5nV|BA>c=yDnab;yqeZar*h5$ssJK&GpHV<~Hf zE8cydVflE&^Hlu^a=9+4U+z8|^3p>>XX|*q@rZPxx86HiL2T;``!@*vJRJBO(3mKF zHe7PgRQcrl4@<<)BY$ptx_O;3t`+pQaXH(Tz&G0-o`tA4N!W)_mh3(*#W8{ zbkwR){X&C2|GfCJhZUJ*<1#7#k??-bIG-E_I%W=;Jdzafb43`pn0%5c=;jGr@vlj} z*?|6gc*2F9cvb%r15LLYg0yHs2cI}Ws~Thj}*1eEZwubN; zxWI`Y(ONu^o7N<`qhE)GwIWzxQyU^dhPjc3RmJ7S-|tOt0~E|R52TR@ge*9^U_qrg zFSOEO&0OnIMua`P%;*FM`xD+n9&XNnDUrOD7D?rYKuk}MjMvEu%RYKbVLDUrtGs}e z;o7tW|M(i`v++bV zz59q%L#J|1@G46$7rnXa77fYP*+oLu_wR$hKImHFYP($PO9N4IxdE3SKsQb;5X->f z>kslZcbuTOrmo{!6F)kJo`Qsum3ieUWRAQMHk}y0Z#AGTra{z{8^I# zGI)sP2oeq3Q)9L81t?-{o;lF|a^C|rNe~YShMDv<SPlO7`^o}R7wU{t7{>4lB%DBwi)N>n_DbI1gqAWfQHb!QY<*zH#K!(P zX_W%j(=}|Te0sbs>FUbeOeR2&tl*iS*RtUo8Kf7U&P$eAj1ddMc7X>zZn-(OtoB|pQJzf1Nf#y=f+h@}vvl-4vS z2il5jhJD1s#FaP7RV?&MQr-q{l?_GHeh*Co^Kkac-NORMq7#*SmblSXn*xPbszk}{ zBG$;IwUd2kH+_v|Ue|s;`M4xSy7cjhv;NiP^B3!3%VocJ$n;xW=rt;kwWzIYe~kXnKuSu1>o>k91{~PfmsogsMP;>LD=W91j3mfk ztee^Qnc4r8H&WLP(R6;I#lk$mm|5_+m`y0K-FqN*SC{@VI(MAwmN_)oZJ{9%CB51k zZZyc_R@u1lEXbVdyR~525QCe22&SYNX?lYEKFu|~7~33vA=nwiR|Ny}-bPkvO*|KW_MErU-8^3U9Zoc_aNw2HzYn|0*fD z%|MyfJ)#ivz_ecRyE&1TzbQDWyQsi<(X@JrQi>i~P*wSP{NO7^g2IhWg>}^C0cyv( zeJeLZ?Vi@ms#t8J!|DRcfpcsew$JInVrl905~XDDfW@E{pW9=oxItS0nqk%8q4#^W zp3E)k3DvbMvi-Tc-D-<89X&JWe7L3bi*c;{n`@9PtH582O4u;g-2i?u%TMV7X4c<` z64}`D29>PiXNFHB-%oZv2Mie)qmYu(CnZR8aV4gt5Zw!^=g3%EG6N`z*-p$^3)_3-oeT45n3ewEZ)$Sh@;%56Xn>;;i z(XQpCfEQfdiefKSv5C43jg9TgV?D3}7gAA-Hn^tNk{BlG z*x%zM>Nc%D&_CX}Hi4fB%R|g<1*lqg_3&_0+fi3W?fJlW3(i6^fQVRhzBzt_;^~Bt zhL#ZbfLooObLxm&9FLcT6l%2IUCtCE+-}Axf%TwdNEjI2F(y$V%JBk6%N0i$pE8ck z)N=$Q*e`Na(p00_M*4?Sel&iO>sZtrEGy}9k7U94LN;qacKM(Htu9`sZT>^qn*>x0 z7&9wJ^d(c_>c^0#Jn9IdB6W~J3s{xb2mz#|exAxbxj+>E{22=5n4x%xTzQVc2LhT7 zIibAjDk!t1)#bm6DUN=Ko1j`rPk3k1+@M%JpI4<$iHLw^E-Se1UiY4CXs_#&^v_^{ zyao|lg9u~|hf3?=>4JSJ$ifE$JZZI4qGK_`-5WWT=ldW${57=vUk!Vj#cF{_#T)M} z0%&kQp!PHfhT#n%h8fA#DV;4hMO!6=Y?w-JNG{4Ww=X=uen!n7VaAx&36E$+$o#lY z!Y33I(Q&?ak_+-CM~GxWUCunYXWYDVHfl4XEe*e@lb}&b?(sQifnPyRHhLQl5mVN2 z5V|HPLfoB`uH_9X7;LJ5F9PY3XAg|VyY1Ds+!I$NR3!sf)YLDaHEo!9+Ui+T0a!9qO^E+kZ9B{XP#+GEHP`W-Z!b zck7tD{sZ@jHJJ4NqaKM-yNsWuREO2wZE+6$$Z2)R1db$F?*XEwB>&MpXsyqzoS8)k z9rQ8IQ{W7OaoO&KAR;$ZFKFIoR%tog96x6{RgHrRz1oaTd!whNqcZ@l@i*Z-7=4cU z#ztM{VEeMTI-*_)MThf=2l~eD+^c3iRw;)SQ6+V-oMLA52ZKV=uTl|4vY-}T6y=AI zWM&GMvVu?ILcZpHL4KoGjkaMNnBU2AKWzCLyD6^(oSq+V*@uw;ww)YxuBpF39W=eRY8-SqFI)%B%^hu-~$iE z($&*#JhgP~A3yAr3+|D%QR;M42s9`73n*O%3Q1Kn1JHZdeD`xeKK}lHyTM>=92`3* zr`@Mph_^VE&*M==Syk1$E$G;V0PLr(TI>>{m^+_Uax0F+^p8EI7)Vt~5& zLHm3xLwd;xYWfMLr$jnS-hP zqFCmL@H?HGGhCSt*~AV4ypF+B*%-%=rM+C{WL!jncuU{Es2skzH!V7%`fp_3gv$P<}aMrrJF9<~1@L!Dpw6|?-FugKu z08@WnAEcK=rz-m^#a2h4i}UyE zisZf@O=Ay4HEod@jD!-dLnkzo&oNpM@WlnSQL9(4{HT)PT1s8~l-Eh0bPqW!hNB%? zGH)Lp8*47}9?ZwjKLds7bC6y8Ndic`fCz?$hGu;GF}l$SX>JW#9cBEd+?eB9lVclb z9MoNEx!r9ui4spAB-+>}7JyR8vSjb+86QipsNd}qYS<@gx3)ifN8h%6`^j~g)N9c6 zleUVAtpIUk(KLi&`0dku7=gOU0kg#IKZlO%GPTKrRKo}Fru1RWw>p6Y+=1ophWPmv z=T}#Sjq_sS^J{DI0~Q4Z1-*qVwZQNtuCl~^FT*B45p(PngoXzA!k~(o!ZsW;VGqP#`HCiB;$GJT=wTrS z^`Fga^?&Pg0NM>MI!a?>BM>`n!9%e|b)9MmZzQgg-psvNJUS|!pP!Ky&=3lW5p$>2 zWBCLr_BV5Y6Qx{0J^ez%!eWwQ6kX=rCzdKs+A#W%t_go}^r+v=k69vVxg}ZM(axi^ zOfMh+nN}#!*xcQHCnp!ScDd@dXzX3P*;h~9h2Wd`w5@xr z@pU4X6kK28~CO{m3%pq2yo-=)}Y-+wZA$q%sUNHjxHEq9=ef8e3=Q!No;# zZfu4pIr^X(*#{Vmf-Egky)SC2Vn@JjUTp-oTOr}cLvQ}S%J*R|3@yYIuW0#2+CP0As=P?}QRJVw*LL%7U3Y!+mp8r!EIZa|!<=9f-5AF^&pok3Z7UI4 z%uiX}iRw4b#Vw^7|9)D0D^QA8D1@E4N7e`*-QV1)wTH;?VlH7!>uTo%QW{79Qat3r zkGN1F!P5}mY+qQMhoY^i|K@bP9SaBNKiqEt0fFJckH*GMzagotdgaa`{0hsEqzXrcXE%MQ%wd54x+F(cZ5%j zQ~9GHeEcy!JF&2Oe*FtA(M;!aU!dW`KP@aOLW__M8L{ef6e?VVV&UVLl$H)Vqi;S? zyib@asZ~f&w*b}F`hN)Yc!ME*_ic`p{!cpfW*v=I*j&Q{tnfg)LPErL?8CMcuui-d z${t)L2-UPHp8OOgTd*l(AZGvZZF@Zk0~U4Qg8Q;WB#PmT;fVUE%%yY)GL=`AxjMYK z)0~M$U>qzZs|Vf-;Dk{U@YZOcVvF>@J1~jFLt&OBYa!kj$Dnqw(be4-g_Jn3pRPL zw@wOQ`0Et!>UX7`qq7SC*b}}HZ_djwuMh#rx2HN zYVh!ghP<)S`(oQ1T1RXkAS|##*ZA_}a94 zB1^b^PD!EjnxGO*AH&9d>srz@nEU$g+lVsnUCd~Y&A9w@x}wgfTh|YEieBqN1V)9&L2uxzu!US_M_K zcHzL;?Zv*i2k+DD2Oi&|D%?2OKdTX0g?^`l>ER?AQ6`tOH4%(p(y4UQZwQ-nLERy1 zxL4TFik{7FIwFXtvuT|d^p>7C$R_gay}C$2AmvEWR6YuMPJg z*lwoA?D||_G`Tsy{AAFuCI$k+X~%A8-*M#xM}r;+fWgp;g`6g$0vJ>S(*<%D7Z;2p zb28>@4Ej9uyIp@IF8YZj9*^tSgJ@%w@x4ZFziDT#h(smQ^l~O8f;Nw+x8Gx9%hfpk z`Z@Q$zgCyM(Co^;)tM5}AWpxjF}MhlkN?p4c;YOtQP@Za9u3zp@$^x5!?a*Aqn9Bi ze5fEYc#RqKeJSqwhlbbD?`jFh4!6=+DO{ahu(C zx&sq@b$1*kE|QWvAl<~dDetEnRV6J0q(`ma{DVaDdaCdo`cF0I+BdEgJ?BP@d;)J1 zoT^h}aGJy?M(h=rrPz(4R1c<$9RK`}A8zJl58gnwXz!|h-= z{lEV5*{?WysBQ@CCeu$ z{;VHenFd;}Dyir|z7gBL*lUV)lwEilzN=NOq!L&wx}Ywv0D2u9!(U@PTv{8hIAAer zN6BZ;5z@;DG@2aXf`-Jv@mdd$akrciS2gw}n?$l%k+edfWHI}rqwE&w0aJ@Ce{YS- za|Ek@aBwsdk^=)d`<#1!>b83QEF~45RvJ^vYi{e9-!>`lczmCAQ@*R5DTP>Y7Jl{@ znta7{L;j7Z7eCXcwHf8r`HI7WA*icsVcK^(|Lxr3n{&L{JwcT$p@esFWUXsw!6~{a zp?wsDyy3%}?J>ArS&`q$^pygpPaZ;1HafX(bMEAr{j8bMYp^ea zI9{C%xmje@QBW+)O!G>Q=arVxo+`Vm;_y;Qmp~Zt9*`)?D@yqn^b_V5^HLS@Eobdk zB@vgY`w;b3`)CPFAA8f<#y30yDyP_(7}FTcAjMbHsj&Yln7roV8l0OOwu=yksj9wo zC|?OstF;tPz+1n~*Z@{90TiO$`{+9gtnt8xCd^UbsO z4)#nC+kC_p@tlB=)>Rw>kG( zT37&il7Ae9R_D2|@id3$L(-Irjwxt-t<||Sy)!ksNZ+kL@l&dhZCH~fcIC)v8xX4s z<1w*IrZY#lRW3t?l2n{XuUA1b1Uv!1Qxtx@r^9^~m^N7hti!$I znfxbAp%d*~7&2wrqcE%}JnFqmais~QW4HsU-e>T@_cF$Ksnu}4KG|fjZqc|Yx!RM?|xd-Ld8%z)n{uY1cLbzqW`oT#Y8)+mk^QV^TvC66#VxUom%Dg?T)F3Aw@T?6my= zaAQcE4xn5lf@kv?0qa5P*T8HPQ^$SKYP%=otqC|8<1SbK_XjUbO7I+red|BS5v0Md?){1RS?B)3#J4-z4@CZ! z`v}PcEY-DxSy?6N6?t~}?1b?o~*MoNC?;r_seU@~GcOJs`Cydr8F_>DC zgGxmZ%C~p^fA6QVnlly_boVBVj^_wP{8i(TFi|_dm3?#pnN8(#OU`y)41S~$)nao2 z!!L}+fgjIT(5E(|A;0Ao@LA1UTl*ySbZxXu*z)&5Pg`3)_Jjh?z*5chLT!bMJVe0oMrYLBZFk=ORun=> zX;lC7WVUQj5RjzJoGD;OL`q6lSI_^BT!!I5m4vMPHD{Ii&U**Rs2@}~++BC%biTi~ zor6ghYD}Ie*mVf-rQv!eeuq=GjfSn_`SU;YyPv^K$OM>vMo`4RIB>6p9V-`C`1G^} zJ3H>T?+f`_XoU3ADM$9qSXdukzI>^v?J;Uc{$ExzDwSrL_OFsNMlNT961B9{+-Jdv z2$r3FaxH!RzN7i15lujIK@E)?&y_U29A-WT9&SgBwX)(oG)tmzUAJ@<^A10V@719%P~ht0qK@q^4qG)fVHc=Vpg%Q66YF z`@t-&Y{<{yS5PZC(}n{*r+A>0)V}8O90tJ)fD$a<(zD*bk4{OTuf)<86eI(-^uv=} zwQk)%m_I^24?veHRyau+A#f% zqN0(}AwZDPu_@~32N=SU_*vN<-n@Pz?pqChdO(a+{dcwS_wVq>(?`75ud%!gw}640 z?4g3lIQ>9He974~RgQPn56@Z-&h0%mu%n@!_nWmtr#2%gh;37ZUzYHOkJ2aGko@ND z7PetxfY~^>F&`eFVVD2%e6PsHaKcbKL0=UaE-~A1>|l9?wc^fkT){Ha7_N;QkYy+n zZA%nP=&1m)E5SssAE?Bb9`JKT!R(wi?eqJ;KI8xRn@+l~YOk+l!7)eg-ZA{Y z-i#cQug82@7GZM0t=U|wJK=DDfA0(idK##ABsmic-Ot<@%4B0? zELf)%dE_e~e>k1n-`^k0BV4S3UQ4AcX_5e1t6B-OfI!0^ZbH9;GweX1A{ksV#iUAi zdw+i@nvfZ=a}h1p#KBCOEDryO7zK%r5YtZ{Uf_6bwPR z#0EX9*7m8KT7pSd*dm$T#@o?B=_i&3XiUth@h@awC4$ZEBLm>nFD9?`5ktn5YfIRs zKD|FEbD`cRV&Es6@pJecKi?!hVmvcv32`ud^*A-_ad@F@IF!}>=Bzs|5OF*A+(|1L zc`}*mq7=HLd;i&Xs&MJ((dPJH|JkOt8_}zvr~sbRBbMzv&rdiEF6|Y0T~Kk5)O)Hy z_KsaAZ&=F3E0*qF8j~$e{3M_==vk)W=}j-|@84P3Y*w4JZ2;(JAUad0(@CYQ-i z5-2G~BNG#8M!|rvh~xi@uIlpI!{zcPPH|IrUCvr?Qoq)ULrmzWb)3Wm0W_-o86mE= zJF=R4V45Ks<|NTyw#MRyx)~Gnr#Evv5S6Y=G`%%RzgcodnbX;(rhCpJSIkps<8kBkAw& zU-Bhh<@O{2+zm5JOKedLvfS6kRp~ULC;GuV4E->uSZDf6pycNzhGX}*?#qIC`;#v1 zgNUy7YoK}uaC Date: Sat, 1 Sep 2012 21:31:07 -0400 Subject: [PATCH 065/115] clean up,updates,bug fixes nothing major --- LICENSE.txt | 21 +++ Textures/EUIClient/Textures/BoilerGui.png | Bin 1876 -> 0 bytes Textures/EUIClient/Textures/CopperWire.png | Bin 3196 -> 0 bytes Textures/EUIClient/Textures/CornerTank.png | Bin 2658 -> 0 bytes Textures/EUIClient/Textures/DefaultPipe.png | Bin 770 -> 0 bytes Textures/EUIClient/Textures/Engine.png | Bin 2686 -> 0 bytes Textures/EUIClient/Textures/Furnace.png | Bin 2426 -> 0 bytes Textures/EUIClient/Textures/Generator.png | Bin 1423 -> 0 bytes Textures/EUIClient/Textures/GrinderGUI.png | Bin 1284 -> 0 bytes Textures/EUIClient/Textures/Items.png | Bin 30321 -> 0 bytes Textures/EUIClient/Textures/SteamGUI.png | Bin 3762 -> 0 bytes Textures/EUIClient/Textures/SteamPipe.png | Bin 3196 -> 0 bytes Textures/EUIClient/Textures/WaterPipe.png | Bin 3192 -> 0 bytes Textures/EUIClient/Textures/blocks.png | Bin 22475 -> 0 bytes Textures/EUIClient/Textures/tankBlock.png | Bin 2478 -> 0 bytes Textures/EUIClient/Textures/tankTexture.png | Bin 658 -> 0 bytes src/common/basicpipes/BasicPipesMain.java | 14 +- src/common/basicpipes/pipes/BlockMachine.java | 83 ++++++++++ src/common/basicpipes/pipes/BlockPump.java | 155 ------------------ src/common/basicpipes/pipes/ItemGuage.java | 46 ++++-- src/common/basicpipes/pipes/ItemMachine.java | 12 ++ src/common/basicpipes/pipes/ItemParts.java | 7 + src/common/basicpipes/pipes/ItemPipe.java | 1 + .../basicpipes/pipes/api/ILiquidConsumer.java | 10 +- .../basicpipes/pipes/api/ILiquidProducer.java | 4 +- src/common/mcmod.info | 18 +- src/common/steampower/ItemMachine.java | 2 +- src/common/steampower/SteamPowerMain.java | 10 +- src/common/steampower/turbine/ItemEngine.java | 2 +- .../turbine/TileEntitySteamPiston.java | 4 +- src/minecraft/basicpipes/PipeClientProxy.java | 5 +- src/minecraft/steampower/GUIGenerator.java | 3 +- .../steampower/SteamClientProxy.java | 4 +- src/minecraft/textures/Items.png | Bin 30296 -> 30349 bytes 34 files changed, 198 insertions(+), 203 deletions(-) delete mode 100644 Textures/EUIClient/Textures/BoilerGui.png delete mode 100644 Textures/EUIClient/Textures/CopperWire.png delete mode 100644 Textures/EUIClient/Textures/CornerTank.png delete mode 100644 Textures/EUIClient/Textures/DefaultPipe.png delete mode 100644 Textures/EUIClient/Textures/Engine.png delete mode 100644 Textures/EUIClient/Textures/Furnace.png delete mode 100644 Textures/EUIClient/Textures/Generator.png delete mode 100644 Textures/EUIClient/Textures/GrinderGUI.png delete mode 100644 Textures/EUIClient/Textures/Items.png delete mode 100644 Textures/EUIClient/Textures/SteamGUI.png delete mode 100644 Textures/EUIClient/Textures/SteamPipe.png delete mode 100644 Textures/EUIClient/Textures/WaterPipe.png delete mode 100644 Textures/EUIClient/Textures/blocks.png delete mode 100644 Textures/EUIClient/Textures/tankBlock.png delete mode 100644 Textures/EUIClient/Textures/tankTexture.png create mode 100644 src/common/basicpipes/pipes/BlockMachine.java delete mode 100644 src/common/basicpipes/pipes/BlockPump.java create mode 100644 src/common/basicpipes/pipes/ItemMachine.java diff --git a/LICENSE.txt b/LICENSE.txt index e69de29b..e0cd5523 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MCP - Minecraft Coder Pack +MCP is (c) Copyright by the MCP Team + +License and terms of use. + +No warranties. If MCP does not work for you, or causes any damage, it's your problem. Use it at own risk. + +You are allowed to: +- Use MCP to decompile the Minecraft client and server jar files. +- Use the decompiled source code to create mods for Minecraft. +- Recompile modified versions of Minecraft. +- Reobfuscate the classes of your mod for Minecraft. + +You are NOT allowed to: +- Use MCP to do anything that violated Mojangs terms of use for Minecraft. +- Release Minecraft versions or modifications that allow you to play without having bought Minecraft from Mojang. +- Release modified or unmodified versions of MCP anywhere. +- Use any of MCPs scripts, tools or data files without explicit written permission. +- Make money with anything based on MCP (excluding Minecraft mods created by using MCP). +- Use MCP to create clients that are used for griefing or exploiting server bugs. +- Release the decompiled source code of Minecraft in any way. diff --git a/Textures/EUIClient/Textures/BoilerGui.png b/Textures/EUIClient/Textures/BoilerGui.png deleted file mode 100644 index 2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 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 ig|t)N0U^=M(bfh2XR}B$G=L!h0000 zLEKQrc?k%KIEKeThM+rCH1*TzltoF{_%W>AiRgjZ(#~wSr!v=;zYM4S<}Y7E@p4h$p z9lh-S3`z@$6LE5@2RKc?AB(jK%Of{HPHnNv%xOD60PH21N9B=o0KnbENnZmtT;iJT z+q~CME2TW`=kX)7Ezc)(hhvps4(}4Rv>pcqp3TkAz2zlyI#QAZxToiIT$!a8cvhRk zzz?h7Gp`m$EXcS)J{zR$CZ#ezF_^mtn!gpJi_4_aP{(g-Yh@e+pqsTVrYhxt%3(v| z)*aK8cWQ!*Ixc{YkU!xY;fY%Qi!q#ui&dK+yD@-l*;8Ko@BB6;d$lK@Y7X-CP{q&>? z=r2J}mGul^z!9PGrWCfPI9t{VW7Fb7}~&XWWpYqYM?X}8O5!i*WahLCUsrF zrqm(>Z^;sLIITp~x5iMCb@oAbM|rwEliB=Xjk_}OclBS6AclcRJRAD=-coz)A4(vE^jRC8e?S1eE3hx4vY2Yg7;=25 z(o}BHKR9^KdY2Rinpkloo^E)*InWF{*lj_WO{lD37~K6rV=@~e6l0pOgtbV!u?Q1>-5{00%2P8#dJk&~O1=UJJ^WVv3^Wu3Gx8aj$x_9X2i;maluaPGJLdbZ zx?LQlSbq0x6aa$#5H|$pBPUdcBdzA|h0@6C>sQ~ep-@j1mhaRQ!C>bqkaE~s0Q;?l zNIF6IobfiCwooX=*bQY83)WUx%zXbgiX|{MasJbb$bzp7<`!k#0rpypTH`ka)*2Fh z2h3omx1G=R9Hbm|+@`b({uK{y6aT8bmU1JjG|x__Xt5}E8QftsrzAURA3kwAxoByV zf7u>C3%vAvyJj}mX*}#CJr!nYZH*xmIqN#>dZbsJYUN4ccJOi9x8J;Tui35TT(t@# zn-?FxbbT&IKnzkO;I?P_^d9^!PnWvR-Algzc{5sF5fb;o@O_0(OwY>|9==%p?JG6Y z9jFAO^onILfnenS!_UTnS`qAARcAih+VFFU+pj=DQ#k92j&zi5Pii$Ay0l$uG+k@rZ6`-*<>WNzmTs>5cZL0*Fi~2n_L592l%HBr`Em-c#)Y(!Q3K<99U=OF)511H3LTI1(|d%^8Oy>&0`zqruTZ z%X^aW$4n^us@(y0{460?ys+jvm@c$Fo~4l$2p6^JqJ=EjLdy6egRWX1J~u6!a$Zr09R)0IRICs@&5(;LkccS z53m1fSYGQlDOi(=X5ThcX=f1jJb1(##> z#8o%1LF^izMSC=3JWo*?E3pS5qoAu?Tk)dGFec)T_fg+je0TISc7`skMG@gTVu(#N zj*$1bcm*s0<#hf9o43EX`oSu0qS8&d@ObY5E|!?a;f_ zVii|%1@yrx1?fj`=p4N-Py`AirypG#1T!_(C+4x1khknB- zp4y8ZZSJy)3wZ=6W?x_HC~cYHEec#T>*)@?Q+F+%`MZ9kCte)^KN_0i&-*8w6Nc;4 z@>!AMn3kyCu~M6-S`bPC#mrbZl^TxE?}z;$kwWV|O>M^m0pOn0uud%{0Gxpuo_ z+SI;jYD!;UCyGiH)ur+>EO&w7N+8~V4CSP9nkqfy8o)CE{}{h9JN7tKo!^4+M$jBo z6Qjdg3sPux>F8IM=bfyZyl}gH;k7zo%ZJeB4Ev{8AbZ~i$FLQ|L;jZx`(Mbo<#oO# zj~^{|VD}&5T6IS6Sh3b!ZSfv`9C@AEgQUHvS)I&o6jeoLZFo-33hm3-B`lEwrA0t&Ign6slkY@yKnEDmOHZ1L=$V7-#;d^+#J-g|N*ujS!VIF0*d{Hu&r-P*umg^kY69GGgEH41Etn^?e^|Y)_ zkQ_R=vO7p*QhTc(X=@WLiX0pq%zOR%aE$N93&!4jQO3C`Dk-UF9Vt|YK$Zum{UqCg zZk|5>N8w%mQ0nhlVVvns@t2kQOlsK~@z)q<6PqF;$+^;07P9<+$xO&$c-ePjB_HpP yKaEZgH-ei)7Jg2hhkoyQ)t$!Q=*RyPo)|RBpyi`Ze0G&AfWR@F3$_MBO!^PoNA-UI diff --git a/Textures/EUIClient/Textures/DefaultPipe.png b/Textures/EUIClient/Textures/DefaultPipe.png deleted file mode 100644 index 05cb6ff1ead8095fba54f0530b3febf09e3f333f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 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 O65!_K7<;la~Sh8*NzzJbJ`z z3jGcQ0yZ?Knru9;G>uyND^jluRN~gQc$snlwSRDjd2ES(WP;V=#ty@uFtDp0Uo5a?flVJf)xZxv%#HLsc@V_h_7qT$ zQ1_4YifQ{~)DaghbJs8YMCGhgIae*40&W)z>dG;fh#TJX(?QI&Rj-%1qS-k3s;lF* z{t&(BhIgsEXlQu#!!evyAu_gP*t&{-A#_MK2I0eltT?WSseKrOX90+C@V7;UeNNCT zK~Zj_tJN(TOmygz{UV^ynyl~VQ@UN{B%wdI07jL(Aqgl9gm^M~%`al2wfP&DO2aH) zEd;vNDV|&OP+>IRqXMBES9E%fqt0q=p6ixV$-s3kue^McQS&1?0AyG0qEyfcteZ1w zp{3t8H(eaGO4uFznwkd^MGmSd9;7}emSKaweiM3q6O~>(Kks**e)CtJ3u9`f(b<;h z>gaQ=w8&m%W*ogveO6?zI=j->a#+rv?mQuB*n^UL;3Mu!cDSrlMqsduoX^e#KMSV> zBV+%R^RRhYw4At@aF6hmQXd4*RXnfN-NBZ3Y8d#%%(6;nq~y~bBlV+;#t7UcY^BI^ zm;NFP$x~1~ON-Hfa%oVY%=O%_X@d16YsvZ7o>m?deXkT=f$Hw&+f^X1D98H!Bqo8) z{3N18R&u{I847HmcfG)U8q5F9z->{wvG z$Fyi*RAFgYj^}j{mPlab9QS~Zg26T8VMj7yByBtz38%Y!Q{vX$=PnRDja~c8;!i)%uB?r*?(*~yeN-gw3zB)-}9kt%p#LI(yrm2&- zJrDI=KNWK_48_K_XN}SMgX+yj!5HKCWKg_dxXd4;ud)V+n+XF60_G`68;Y2qg%}th z_AhwCGd_&iXkM|Hp$I?A|JI%S`<2A71G8<`68E-#anETkhIz{su~^(yc&BPN{|^+`uS_=)UVT{nb^~Q%g5tE=WP_*w8tB zBuJ6^(iW7<+W&3!M7C&*IuJAud0t$D_&7DmXgoZhVxwu6!tBaM_*tUyoR3o~NTg4C zaa?Oiwe_0Wz?P)TB9shZvok~R10_@H%{-)vE>^8@3mOMmF>PIi;&%?h<7}}Nr%AW| E28)4(K>z>% diff --git a/Textures/EUIClient/Textures/GrinderGUI.png b/Textures/EUIClient/Textures/GrinderGUI.png deleted file mode 100644 index 498818ae1f6e4a365c24187fcaefdc6ffe170970..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn`1yx4R3& ze-K=-cll(X2xoyuWHAE+-$4*&+%YlxEl`lX#M9T6{SK=HlQ~o8i^)w43@k04E{-7; zx8B}0^cQiIXn2_4dLuAGVzK>!84;O!iaWWIUH7+~JJc7nnbrPaA77Pq(e-R+r&156 z0wifAXi|c6_jZSjlmzmE&<$oI;M zXOy{pH^NNYSRO0d0%sg!tdZ!fLhWb=A`yu3~A&6nzI>npe?Zd$6YAH!I3_1Cw=w}zi=`tRN8 zn|kRZ$C6(%KF_x^RL;Bp>(?TUq;h8lmjhx9IqWQ8+Gu5i8J~>bS+!<1f$t{IS`a^S}?*6^k{xB>38o8Tvgf ztogT47oT|?4Vu7wBV_W?rorYsP~WZlM=XvloVlq(2TRi(dKmn}tdf z3Z?A(gd6oy7KUd^y4eC$2%R~F=7oANB}f2%wQ5=P;m5PG4gwSJh4n|9tVr> z6BmVO1_w~)*P2-&d|~AQh*MdgH8B~~F}^BzwYKn8-{X)3s3H~y0f=f8h5$n_&|Z}j zAl-i~&h!O0X38#Sx($h;ld=DdWj_l}OpOfdb5owo-5JN2^0)4O&IPGF2EXGcIdyzF kb!*=<0gDfs00;Iz4DXut%rjDsZva`~>FVdQ&MBb@0Q70SS^xk5 diff --git a/Textures/EUIClient/Textures/Items.png b/Textures/EUIClient/Textures/Items.png deleted file mode 100644 index d95d605693ea1a96d168b89631b0714c8e002222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30321 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 IYZm&y09jKa^#A|> diff --git a/Textures/EUIClient/Textures/SteamGUI.png b/Textures/EUIClient/Textures/SteamGUI.png deleted file mode 100644 index ac81171315361eec20cf1f7eb53d5f6cdff48132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3762 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 WU59UubRrj*0?^SgRIgOC4f_YtG&Dv4 diff --git a/Textures/EUIClient/Textures/SteamPipe.png b/Textures/EUIClient/Textures/SteamPipe.png deleted file mode 100644 index 5f4bb528d01814f47003ede29cf06b68de001a59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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%0AbMeZq%L-(Jd-Vy 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 WV**nd(hB$(kd4LhqoqgAUH>ok(3-da diff --git a/Textures/EUIClient/Textures/tankBlock.png b/Textures/EUIClient/Textures/tankBlock.png deleted file mode 100644 index 21b97d4c5a4126ae7d0dd46dcbe118bad20f6b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2478 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 P3?%L8>gTe~DWM4fP^b7L diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index a659402f..17e27835 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -2,7 +2,7 @@ package basicpipes; import java.io.File; import basicpipes.pipes.BlockPipe; -import basicpipes.pipes.BlockPump; +import basicpipes.pipes.BlockMachine; import basicpipes.pipes.ItemGuage; import basicpipes.pipes.ItemParts; import basicpipes.pipes.ItemPipe; @@ -32,7 +32,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; public class BasicPipesMain{ @Instance - public static BasicPipesMain instance; + public BasicPipesMain instance; @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") public static PipeProxy proxy; @@ -41,11 +41,12 @@ public class BasicPipesMain{ private static int partID; private static int ppipeID; private static int machineID; + private static int toolID; public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); - public static Block machine = new BlockPump(machineID).setBlockName("pump"); + public static Block machine = new BlockMachine(machineID).setBlockName("pump"); public static Item parts = new ItemParts(partID); public static Item itemPipes = new ItemPipe(ppipeID); - public static Item gauge = new ItemGuage(ppipeID+1); + public static Item gauge = new ItemGuage(toolID); public static String channel = "Pipes"; public static String textureFile = "/textures"; @@ -57,6 +58,7 @@ public class BasicPipesMain{ machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); + toolID = Integer.parseInt(config.getOrCreateIntProperty("ToolID", Configuration.CATEGORY_ITEM, 23024).value); config.save(); return pipeID; } @@ -65,7 +67,7 @@ public class BasicPipesMain{ { proxy.preInit(); GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(machine); + GameRegistry.registerBlock(machine,basicpipes.pipes.ItemMachine.class); } @Init public void load(FMLInitializationEvent evt) @@ -74,7 +76,7 @@ public class BasicPipesMain{ proxy.init(); GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); //Names - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "guage"); + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); LanguageRegistry.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); diff --git a/src/common/basicpipes/pipes/BlockMachine.java b/src/common/basicpipes/pipes/BlockMachine.java new file mode 100644 index 00000000..701e3a3f --- /dev/null +++ b/src/common/basicpipes/pipes/BlockMachine.java @@ -0,0 +1,83 @@ +package basicpipes.pipes; + +import java.util.ArrayList; +import net.minecraft.src.*; + +import java.util.Random; + +public class BlockMachine extends BlockContainer +{ + + public BlockMachine(int id) + { + super(id, Material.iron); + this.setBlockName("Machine"); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setRequiresSelfNotify(); + this.blockIndexInTexture = 19; + } + + public boolean isOpaqueCube() + { + return false; + } + + public boolean renderAsNormalBlock() + { + //TODO change later when custom models are added + return true; + } + + /** + * 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; + } + //Per tick + public int conductorCapacity() + { + return 10; + } + 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 < 4) + { + return new TileEntityPump(); + } + if(meta > 3 && meta < 8) + { + return new TileEntityCondenser(); + } + return null; + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return null; + } + @Override + public String getTextureFile() + { + return basicpipes.BasicPipesMain.textureFile + "/items.png"; + } + } + + diff --git a/src/common/basicpipes/pipes/BlockPump.java b/src/common/basicpipes/pipes/BlockPump.java deleted file mode 100644 index 78eddc4c..00000000 --- a/src/common/basicpipes/pipes/BlockPump.java +++ /dev/null @@ -1,155 +0,0 @@ -package basicpipes.pipes; - -import java.util.ArrayList; -import net.minecraft.src.*; - -import java.util.Random; - -public class BlockPump extends BlockContainer -{ - - public BlockPump(int id) - { - super(id, Material.iron); - this.setBlockName("Pump"); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - @Override - public int getBlockTexture(IBlockAccess par1iBlockAccess, int x, int y, int z, int side) - { - int metadata = par1iBlockAccess.getBlockMetadata(x, y, z); - - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - - - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - return 0; - - - } - @Override - public int getBlockTextureFromSideAndMetadata(int side, int metadata) - { - if (side == 1) - { - switch(metadata) - { - case 0: return 1; - case 1: return 3; - case 2: return 18; - case 3: return 5; - } - } - else - { - //If it is the front side - if(side == 3) - { - switch(metadata) - { - case 0: return 19; - case 1: return 6; - case 2: return 17; - case 3: return 3; - } - } - //If it is the back side - else if(side == 2) - { - switch(metadata) - { - case 0: return this.blockIndexInTexture + 2; - case 1: return this.blockIndexInTexture + 3; - case 2: return this.blockIndexInTexture + 2; - } - } - - switch(metadata) - { - case 1: return 4; - case 2: return 16; - case 3: return 2; - } - } - return 0; - } - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * 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; - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return "/eui/blocks.png"; - } - //Per tick - public int conductorCapacity() - { - return 10; - } - 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 - switch(meta) - { - case 0: return new TileEntityPump(); - } - return null; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; - } - } - - diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/pipes/ItemGuage.java index bbaeb43f..29effc9e 100644 --- a/src/common/basicpipes/pipes/ItemGuage.java +++ b/src/common/basicpipes/pipes/ItemGuage.java @@ -1,6 +1,10 @@ package basicpipes.pipes; import java.util.ArrayList; +import java.util.List; + +import basicpipes.BasicPipesMain; + import net.minecraft.src.*; public class ItemGuage extends Item @@ -14,35 +18,54 @@ public class ItemGuage extends Item this.setHasSubtypes(true); this.setIconIndex(10); this.setItemName("guage"); + this.setTabToDisplayOn(CreativeTabs.tabTools); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(this, 1, 0)); } @Override public int getIconFromDamage(int par1) { switch(par1) { - case 0: return 11; + case 0: return 24; } return this.iconIndex; } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } @Override public String getItemName() { return "guage"; } - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7) + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { - + if(par1ItemStack.getItemDamage() == 0) + { TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); if(blockEntity instanceof TileEntityPipe) { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int steam = pipeEntity.getStoredLiquid(0); + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; int type = pipeEntity.getType(); + int steam = pipeEntity.getStoredLiquid(type); String typeName = getType(type); - par2EntityPlayer.addChatMessage(typeName +" " + steam); + String print = "Error"; + if(steam < 0) + { + print = "No pressure or Volume"; + } + else + { + print = typeName +" " + steam + 1*Math.random() +" @ 16PSI"; + } + par2EntityPlayer.addChatMessage(print); return true; } - + } @@ -58,7 +81,7 @@ public class ItemGuage extends Item case 3: return "Oil"; case 4: return "Fuel"; case 5: return "Air"; - default: return "unknow"; + default: return "???"; } } public String getItemNameIS(ItemStack par1ItemStack) @@ -66,13 +89,8 @@ public class ItemGuage extends Item int var3 = par1ItemStack.getItemDamage(); switch(var3) { - case 1: return "PipeGuage"; + case 0: return "PipeGuage"; } return this.getItemName(); } - @Override - public String getTextureFile() { - return "/eui/Items.png"; - } - } diff --git a/src/common/basicpipes/pipes/ItemMachine.java b/src/common/basicpipes/pipes/ItemMachine.java new file mode 100644 index 00000000..cdf33905 --- /dev/null +++ b/src/common/basicpipes/pipes/ItemMachine.java @@ -0,0 +1,12 @@ +package basicpipes.pipes; + +import net.minecraft.src.ItemBlock; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int par1) { + super(par1); + // TODO Auto-generated constructor stub + } + +} diff --git a/src/common/basicpipes/pipes/ItemParts.java b/src/common/basicpipes/pipes/ItemParts.java index 320fcd22..c9d1a1b4 100644 --- a/src/common/basicpipes/pipes/ItemParts.java +++ b/src/common/basicpipes/pipes/ItemParts.java @@ -6,8 +6,10 @@ import java.util.List; import basicpipes.BasicPipesMain; import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; +import net.minecraft.src.World; public class ItemParts extends Item{ String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; @@ -43,6 +45,11 @@ public class ItemParts extends Item{ par3List.add(new ItemStack(this, 1, i)); } } + public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + //TODO add block place event for some items like valves,tanks + return false; + } public String getTextureFile() { return BasicPipesMain.textureFile+"/Items.png"; } diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/pipes/ItemPipe.java index adfb4a3b..857ac301 100644 --- a/src/common/basicpipes/pipes/ItemPipe.java +++ b/src/common/basicpipes/pipes/ItemPipe.java @@ -8,6 +8,7 @@ import net.minecraft.src.Block; import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; import net.minecraft.src.ItemStack; import net.minecraft.src.TileEntity; import net.minecraft.src.World; diff --git a/src/common/basicpipes/pipes/api/ILiquidConsumer.java b/src/common/basicpipes/pipes/api/ILiquidConsumer.java index 57565dbe..dc8e0b7c 100644 --- a/src/common/basicpipes/pipes/api/ILiquidConsumer.java +++ b/src/common/basicpipes/pipes/api/ILiquidConsumer.java @@ -1,7 +1,11 @@ package basicpipes.pipes.api; import net.minecraftforge.common.ForgeDirection; - +/** + * Based off of Calclavia's old wire API + * @author DarkGuardsman + * + */ public interface ILiquidConsumer { @@ -16,9 +20,9 @@ public interface ILiquidConsumer /** * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param forgeDirection - The side in which the electricity is coming from. + * @param forgeDirection - The side in which the volume is coming from. * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive electricity at this given tick or moment. + * @return Returns true or false if this consumer can receive a volume at this given tick or moment. */ public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection); diff --git a/src/common/basicpipes/pipes/api/ILiquidProducer.java b/src/common/basicpipes/pipes/api/ILiquidProducer.java index ec9edc55..3368ee1d 100644 --- a/src/common/basicpipes/pipes/api/ILiquidProducer.java +++ b/src/common/basicpipes/pipes/api/ILiquidProducer.java @@ -3,8 +3,8 @@ package basicpipes.pipes.api; import net.minecraftforge.common.ForgeDirection; /** - * The UEIProducer interface is an interface that must be applied to all tile entities that can produce electricity. - * @author Calclavia + * Based off of Calclavia's old wire API + * @author DarkGuardsman * */ public interface ILiquidProducer diff --git a/src/common/mcmod.info b/src/common/mcmod.info index 107bea9f..2ce4ae31 100644 --- a/src/common/mcmod.info +++ b/src/common/mcmod.info @@ -1,21 +1,21 @@ [ { - "modid": "SteamPower", - "name": "Steam Power", - "description": "Basic coal fired power plant generator pack for UE", - "version": "r4", + "modid": "UniversalElectricity", + "name": "Universal Electricity", + "description": "Universal Electricity is a modular electricity API for modders to create to add electricity to Minecraft. The mod alone does not add many things to the game. It requires add-ons in order to work. Universal Electricity is basically a structure that integrates a universal electric system for modders to easily implement into their mods.", + "version": "0.7.0", "mcversion": "1.3.2", - "url": "", - "updateUrl": "", + "url": "http://calclavia.com/universalelectricity", + "updateUrl": "http://calclavia.com/universalelectricity", "authors": [ - "DarkGuardsman" + "Calclavia" ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", + "credits": "Authored by Calclavia", "logoFile": "", "screenshots": [ ], "parent":"", - "dependencies": ["UE","BasicPipes" + "dependencies": [ ] } ] \ No newline at end of file diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java index 08e28e2f..e84b0322 100644 --- a/src/common/steampower/ItemMachine.java +++ b/src/common/steampower/ItemMachine.java @@ -24,7 +24,7 @@ public class ItemMachine extends ItemBlock { @Override public String getTextureFile() { // TODO Auto-generated method stub - return SteamPowerMain.textureFile+"/Items.png"; + return SteamPowerMain.textureFile+"Items.png"; } @Override public int getIconFromDamage(int par1) diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 174d1717..ff896960 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -26,7 +26,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "V9") +@Mod(modid = "SteamPower", name = "Steam Power", version = "0.0.10") @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ @@ -105,14 +105,14 @@ public class SteamPowerMain{ case 15: return new TileEntityNuller();<-Just for testing Not craftable */ GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(BasicPipesMain.parts, 1,5), + 'T',new ItemStack(BasicPipesMain.parts, 1,6), '@',new ItemStack(BasicComponents.itemSteelPlate), - 'O',new ItemStack(BasicPipesMain.parts, 1,1), - 'V',new ItemStack(BasicPipesMain.parts, 1,6)}); + 'O',new ItemStack(BasicPipesMain.parts, 1,0), + 'V',new ItemStack(BasicPipesMain.parts, 1,7)}); GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", 'F',Block.stoneOvenIdle, '@',new ItemStack(BasicComponents.itemSteelPlate)}); - GameRegistry.addRecipe(new ItemStack(itemEngine, 1, 0), new Object [] {"@T@", "PMP", "@T@", + GameRegistry.addRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"@T@", "PMP", "@T@", 'T',new ItemStack(BasicPipesMain.parts, 1,0), '@',new ItemStack(BasicComponents.itemSteelPlate), 'P',Block.pistonBase, diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 34812210..65b978f8 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -27,7 +27,7 @@ public class ItemEngine extends Item @Override public String getTextureFile() { // TODO Auto-generated method stub - return SteamPowerMain.textureFile+"/Items.png"; + return SteamPowerMain.textureFile+"Items.png"; } @Override public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 510f269f..d28ae4cc 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -113,7 +113,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR ForgeDirection.getOrientation(i)); if (tileEntity instanceof TileEntityConductor) { - if (ElectricityManager.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + if (ElectricityManager.instance.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) { this.connectedElectricUnit = (TileEntityConductor)tileEntity; } @@ -173,7 +173,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR if(this.generateRate > 1) { - ElectricityManager.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + ElectricityManager.instance.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); } } } diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index eb707d7d..f20a9a49 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -1,5 +1,6 @@ package basicpipes; +import steampower.SteamPowerMain; import basicpipes.PipeProxy; import basicpipes.pipes.TileEntityPipe; import net.minecraftforge.client.MinecraftForgeClient; @@ -11,8 +12,8 @@ public class PipeClientProxy extends PipeProxy public void preInit() { //Preload textures - MinecraftForgeClient.preloadTexture("/EUIClient/Textures/Items.png"); - MinecraftForgeClient.preloadTexture("/EUIClient/Textures/blocks.png"); + MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/Items.png"); + MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/blocks.png"); } @Override diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUIGenerator.java index 3680d240..310dfd89 100644 --- a/src/minecraft/steampower/GUIGenerator.java +++ b/src/minecraft/steampower/GUIGenerator.java @@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL11; import steampower.turbine.ContainerGenerator; import steampower.turbine.TileEntitySteamPiston; +import universalelectricity.electricity.ElectricUnit; public class GUIGenerator extends GuiContainer { @@ -55,7 +56,7 @@ import steampower.turbine.TileEntitySteamPiston; } else { - displayText = universalelectricity.UniversalElectricity.getWattDisplay((int)(tileEntity.generateRate*20)); + displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); } displayText2 = "water" + "-" + tileEntity.waterStored; displayText3 = "steam" + "-" + tileEntity.steamStored; diff --git a/src/minecraft/steampower/SteamClientProxy.java b/src/minecraft/steampower/SteamClientProxy.java index ee65ad79..6c133f63 100644 --- a/src/minecraft/steampower/SteamClientProxy.java +++ b/src/minecraft/steampower/SteamClientProxy.java @@ -12,8 +12,8 @@ public class SteamClientProxy extends SteamProxy{ public void preInit() { - MinecraftForgeClient.preloadTexture("/EUIClient/textures/blocks.png"); - MinecraftForgeClient.preloadTexture("/EUIClient/textures/Items.png"); + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); } @Override public void init() diff --git a/src/minecraft/textures/Items.png b/src/minecraft/textures/Items.png index 7cd95bb448b3bc1480676bd6bbf1ced0d3424f79..6d87aa272331419259daf82d56aff926c7404607 100644 GIT binary patch literal 30349 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 U`A2+UuUODKd9}AyvgQ&052htBS^xk5 literal 30296 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 Date: Sun, 2 Sep 2012 00:48:40 -0400 Subject: [PATCH 066/115] jenkins changes --- BasicPipesVersion.txt | 1 + modversion.txt => SteamPowerVersion.txt | 0 2 files changed, 1 insertion(+) create mode 100644 BasicPipesVersion.txt rename modversion.txt => SteamPowerVersion.txt (100%) diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt new file mode 100644 index 00000000..56a6051c --- /dev/null +++ b/BasicPipesVersion.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/modversion.txt b/SteamPowerVersion.txt similarity index 100% rename from modversion.txt rename to SteamPowerVersion.txt From 5629758503c3b6920181723f5ec718cd974f660c Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 2 Sep 2012 13:13:14 -0400 Subject: [PATCH 067/115] fixed mcmod.info files Not sure why but both of these vanished and were replaced by UE's mcmod file. --- src/common/basicpipes/mcmod.info | 21 +++++++++++++++++++++ src/common/mcmod.info | 21 --------------------- src/common/steampower/mcmod.info | 21 +++++++++++++++++++++ 3 files changed, 42 insertions(+), 21 deletions(-) create mode 100644 src/common/basicpipes/mcmod.info delete mode 100644 src/common/mcmod.info create mode 100644 src/common/steampower/mcmod.info diff --git a/src/common/basicpipes/mcmod.info b/src/common/basicpipes/mcmod.info new file mode 100644 index 00000000..72a86a53 --- /dev/null +++ b/src/common/basicpipes/mcmod.info @@ -0,0 +1,21 @@ +[ +{ + "modid": "basicPipes", + "name": "Basic Pipes", + "description": "Simple liquid transport system for UE based mods", + "version": "r9", + "mcversion": "1.3.2", + "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Textures thanks to Atrain;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE" + ] +} +] \ No newline at end of file diff --git a/src/common/mcmod.info b/src/common/mcmod.info deleted file mode 100644 index 2ce4ae31..00000000 --- a/src/common/mcmod.info +++ /dev/null @@ -1,21 +0,0 @@ -[ -{ - "modid": "UniversalElectricity", - "name": "Universal Electricity", - "description": "Universal Electricity is a modular electricity API for modders to create to add electricity to Minecraft. The mod alone does not add many things to the game. It requires add-ons in order to work. Universal Electricity is basically a structure that integrates a universal electric system for modders to easily implement into their mods.", - "version": "0.7.0", - "mcversion": "1.3.2", - "url": "http://calclavia.com/universalelectricity", - "updateUrl": "http://calclavia.com/universalelectricity", - "authors": [ - "Calclavia" - ], - "credits": "Authored by Calclavia", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": [ - ] -} -] \ No newline at end of file diff --git a/src/common/steampower/mcmod.info b/src/common/steampower/mcmod.info new file mode 100644 index 00000000..8a1863b5 --- /dev/null +++ b/src/common/steampower/mcmod.info @@ -0,0 +1,21 @@ +[ +{ + "modid": "SteamPower", + "name": "Steam Power", + "description": "Basic coal fired power plant generator pack for UE", + "version": "r4", + "mcversion": "1.3.2", + "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE","BasicPipes" + ] +} +] \ No newline at end of file From 638df386d323b9f1d0442646f6d447d7d2a40e62 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 3 Sep 2012 01:08:40 -0400 Subject: [PATCH 068/115] SMP bug fix think this will fix the SMP crash cased by pipes --- src/common/basicpipes/pipes/BlockPipe.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/basicpipes/pipes/BlockPipe.java b/src/common/basicpipes/pipes/BlockPipe.java index 6f7106e7..e99064c6 100644 --- a/src/common/basicpipes/pipes/BlockPipe.java +++ b/src/common/basicpipes/pipes/BlockPipe.java @@ -131,9 +131,13 @@ public class BlockPipe extends BlockContainer for(byte i = 0; i < 6; i++) { //Update the tile entity on neighboring blocks - TileEntityPipe conductorTileEntity = (TileEntityPipe)world.getBlockTileEntity(x, y, z); - int type = conductorTileEntity.getType(); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i));; + TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + if(tileEntity instanceof TileEntityPipe) + { + TileEntityPipe conductorTileEntity = (TileEntityPipe) tileEntity; + int type = conductorTileEntity.getType(); + conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i)); + } } } From 18aef1ff28f3c23e00f54026f6d9fb0290d50a3f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 3 Sep 2012 17:52:07 -0400 Subject: [PATCH 069/115] Texture updates and Gui opening change nothing big. Just updated the textures and reverted the gui to open on right click instead of with a wrench --- .../steampower/turbine/BlockSteamPiston.java | 2 +- src/minecraft/steampower/ModelFurnace.java | 54 +++++++++--------- src/minecraft/textures/Engine.png | Bin 2686 -> 1033 bytes src/minecraft/textures/Furnace.png | Bin 2426 -> 1455 bytes src/minecraft/textures/SteelPiston.png | Bin 0 -> 1033 bytes src/minecraft/textures/YellowPiston.png | Bin 0 -> 1051 bytes 6 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 src/minecraft/textures/SteelPiston.png create mode 100644 src/minecraft/textures/YellowPiston.png diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java index e7be1d43..fda19383 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -18,7 +18,7 @@ public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ } @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) { if (par1World.isRemote) { diff --git a/src/minecraft/steampower/ModelFurnace.java b/src/minecraft/steampower/ModelFurnace.java index 19d53f42..798a0a5c 100644 --- a/src/minecraft/steampower/ModelFurnace.java +++ b/src/minecraft/steampower/ModelFurnace.java @@ -25,33 +25,33 @@ public class ModelFurnace extends ModelBase public ModelFurnace() { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(256, 256); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(256, 256); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(256, 256); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 0); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(256, 256); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(64, 32); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(64, 32); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(64, 32); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 27); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(64, 32); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) diff --git a/src/minecraft/textures/Engine.png b/src/minecraft/textures/Engine.png index 52a2d997f7cc7f3fc255c52b3aeb77277fd89f34..0f68fe758befe90e39392f330cb363dd0cf91623 100644 GIT binary patch delta 952 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 DZza#8 literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/YellowPiston.png b/src/minecraft/textures/YellowPiston.png new file mode 100644 index 0000000000000000000000000000000000000000..b0134785c73ba4fd6b2f663654c589c7cbc00a2c GIT binary patch literal 1051 zcmV+$1mydPP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2iyq* z6(Spfw^cj<00WyzL_t(|+U;7;YZE~f{$_U@2sAYmPyGX|RFNL^svz|wxp?#7sYsf7 zuoOb^P!NI$O(_;ZTeJu9Q0T1`Pl}-6Ne?0(inL%aDTPuhtx3AsWIV*(ZqofVJKfn$ zvk#Wtnf>0Q^L6IUn{PwFXt@k10<@QFAP{JZAEzg8Rv<}9G#V91QWBKbjCYmFrtw_J z=8fm4Z`U00W~@k){5VysTPT;;jeDiCXb;+{7UjGXKNF>hN;vc_$(Sk2z z^GKyGA}sSofId(^cvjy?5}>NP7K5w+0Ax9NVhNb>`m>G)5Zd(jodh-Q5VhJLbJ-bmDXdBuSX#xlFam-eP|(JEc2NA(_EE!g6Hu*gF`osZgy$x}Pi-G1JU0P6 z`+5}c+ywB{_EErd6Tnm3M*$yigQ6?JAZ@>TjV!VScP zJUNvdV76z=V@+A>?t*38$#{Ijss|!H12#4uP^UUzaBzux1`xMD+-X2OzFu%UJ1?ly z_IMggKr&BN0N6NaUhUIbe>S(>-aEzhS`V17!0G_6_UhpR*Lzm8(;H5`6ppI(_m7y! zIR4pCZ!e&#JK_nrKkuB?-QKfWU*E03i=0R&!PsIGTnYmK{Xi%H+?b^JG)IiP-uL;3 z^YrEQ*Nyd%=J!x!OMtDz2=zpOUw<-MrAeTlM=TKNT-L5PSNeI-vwB*y`O$3`v+w8 VQjG~4b)EnK002ovPDHLkV1iC8=0^Yk literal 0 HcmV?d00001 From dd410bb78136d6377c8bfaeb80c9222fa2a5ddc6 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 3 Sep 2012 19:30:24 -0400 Subject: [PATCH 070/115] Updated Pump,and some textures Again nothing major changed. Just a model for the pump and made it possible to craft --- src/common/basicpipes/BasicPipesMain.java | 12 +- src/common/basicpipes/PipeProxy.java | 2 + src/common/basicpipes/TradeHelper.java | 174 ++++++++++++++++++ src/common/basicpipes/pipes/BlockMachine.java | 4 +- .../basicpipes/pipes/TileEntityPump.java | 32 ++-- src/common/steampower/ItemMachine.java | 2 +- src/minecraft/basicpipes/ModelPump.java | 146 +++++++++++++++ src/minecraft/basicpipes/PipeClientProxy.java | 3 + src/minecraft/basicpipes/RenderPump.java | 43 +++++ src/minecraft/textures/BoilerGui.png | Bin 1876 -> 1900 bytes src/minecraft/textures/Items.png | Bin 30349 -> 30215 bytes src/minecraft/textures/Pump.png | Bin 0 -> 733 bytes src/minecraft/textures/SteamGUI.png | Bin 3762 -> 3750 bytes 13 files changed, 403 insertions(+), 15 deletions(-) create mode 100644 src/common/basicpipes/TradeHelper.java create mode 100644 src/minecraft/basicpipes/ModelPump.java create mode 100644 src/minecraft/basicpipes/RenderPump.java create mode 100644 src/minecraft/textures/Pump.png diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 17e27835..ecb39559 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -74,8 +74,9 @@ public class BasicPipesMain{ { //register proxy.init(); - GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + //Names + LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); @@ -124,6 +125,15 @@ public class BasicPipesMain{ //fuel GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + //pump + GameRegistry.addRecipe(new ItemStack(machine, 1,0), new Object[] { "@T@","BPB","@M@" + , '@',BasicComponents.itemSteelPlate + , 'M',BasicComponents.itemMotor + , 'B',new ItemStack(parts, 1,7) + , 'P',new ItemStack(Block.pistonBase) + , 'C',BasicComponents.blockCopperWire + , 'V',new ItemStack(parts, 2,1) + });//bronze tube } } diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java index 617aa677..69ad27f9 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/src/common/basicpipes/PipeProxy.java @@ -1,6 +1,7 @@ package basicpipes; import basicpipes.pipes.TileEntityPipe; +import basicpipes.pipes.TileEntityPump; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; import net.minecraft.src.World; @@ -17,6 +18,7 @@ public class PipeProxy implements IGuiHandler public void init() { GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); + GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); } public void postInit() { diff --git a/src/common/basicpipes/TradeHelper.java b/src/common/basicpipes/TradeHelper.java new file mode 100644 index 00000000..b03ecb7b --- /dev/null +++ b/src/common/basicpipes/TradeHelper.java @@ -0,0 +1,174 @@ +package basicpipes; + +import basicpipes.pipes.api.ILiquidConsumer; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class TradeHelper { +/** + * + * @param entity - entity at center of search + * @return an Array containing found entities and nulls of nonEntities + */ + public static TileEntity[] getSourounding(TileEntity entity) + { + TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; + for(int i =0; i< 6;i++) + { + int x = entity.xCoord; + int y = entity.yCoord; + int z = entity.zCoord; + + switch(i) + { + case 0: y = y - 1;break;//down + case 1: y = y + 1;break;//up + case 2: z = z + 1;break;//north + case 3: z = z - 1;break;//south + case 4: x = x + 1;break;//east + case 5: x = x - 1;break;//west + } + TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); + if(aEntity instanceof TileEntity) + { + list[i] = aEntity; + } + } + return list; + } + /** + * Only works for steam Power's boiler. Still needs recode to work for all things + * @param blockEntity - tile entity trading the liquid + * @param type - liquid type see chart for info + * @param rise - does the liquid rise up like a gas + * @return the remaining untraded liquid + */ + public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) + { + TileEntity[] connectedBlocks = getSourounding(blockEntity); + ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; + int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); + int ammountStored = blockMachine.getStoredLiquid(type); + int tankCount = 1; + boolean bottom = false; + TileEntity firstEntity = null; + TileEntity secondEntity = null; + if(rise) + { + firstEntity = connectedBlocks[1]; + secondEntity = connectedBlocks[0]; + } + else + { + firstEntity = connectedBlocks[0]; + secondEntity = connectedBlocks[1]; + } + //checks wether or not the block bellow it is a tank to move liquid too + if(firstEntity instanceof ILiquidConsumer) + { + int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); + //checks if that tank has room to get liquid. + + if(bWater < bMax) + { + int tradeVol = 0; + int emptyVol = Math.max( bMax - bWater,0); + tradeVol = Math.min(emptyVol, ammountStored); + int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); + ammountStored = ammountStored + rejected - tradeVol; + wSum -= tradeVol; + } + else + { + bottom = true; + } + } + else + { + //there was no tank bellow this tank + bottom = true; + } + //if this is the bottom tank or bottom tank is full. Update average water ammount. + if(bottom) + { + //get average water around center tank + for(int i = 2; i<6;i++) + { + TileEntity entityA = connectedBlocks[i]; + if(entityA instanceof ILiquidConsumer) + { + //if is a tank add to the sum + wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); + tankCount += 1; + } + } + + //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. + for(int i = 2; i<6;i++) + { + int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average + int tradeSum = 0; + TileEntity entity = connectedBlocks[i]; + if(entity instanceof ILiquidConsumer) + { + int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); + if(targetW < average) + { + tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank + int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back + ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade + } + } + } + + if(secondEntity instanceof ILiquidConsumer) + { + int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); + int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); + if(bottom && ammountStored > 0) + { + if(bWater < bMax) + { + int emptyVolS = Math.max( bMax - bWater,0); + int tradeVolS = Math.min(emptyVolS, ammountStored); + int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; + ammountStored =rejectedS + ammountStored - tradeVolS; + wSum -= tradeVolS; + } + } + } + } + return ammountStored; + } + /** + * + * @param entity - entity in question + * @return 1-4 if corner 0 if not a corner + * you have to figure out which is which depending on what your using this for + * 1 should be north east 2 south east + */ + public static int corner(TileEntity entity) + { + TileEntity[] en = getSourounding(entity); + if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) + { + return 1; + } + if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) + { + return 2; + } + if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) + { + return 3; + } + if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) + { + return 4; + } + + return 0; + + } +} diff --git a/src/common/basicpipes/pipes/BlockMachine.java b/src/common/basicpipes/pipes/BlockMachine.java index 701e3a3f..481a9e13 100644 --- a/src/common/basicpipes/pipes/BlockMachine.java +++ b/src/common/basicpipes/pipes/BlockMachine.java @@ -14,7 +14,7 @@ public class BlockMachine extends BlockContainer this.setBlockName("Machine"); this.setCreativeTab(CreativeTabs.tabBlock); this.setRequiresSelfNotify(); - this.blockIndexInTexture = 19; + this.blockIndexInTexture = 26; } public boolean isOpaqueCube() @@ -33,7 +33,7 @@ public class BlockMachine extends BlockContainer */ public int getRenderType() { - return 0; + return -1; } /** diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pipes/TileEntityPump.java index 1d39cc0c..5031f0e8 100644 --- a/src/common/basicpipes/pipes/TileEntityPump.java +++ b/src/common/basicpipes/pipes/TileEntityPump.java @@ -1,7 +1,9 @@ package basicpipes.pipes; +import basicpipes.TradeHelper; import basicpipes.pipes.api.ILiquidProducer; import net.minecraft.src.Block; +import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import universalelectricity.electricity.TileEntityElectricUnit; import universalelectricity.extend.IElectricUnit; @@ -12,6 +14,8 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro float eMax = 2000; int wStored = 0; int wMax = 10; + public TileEntity[] sList = {null,null,null,null,null,null}; + private int count = 0; @Override public void onDisable(int duration) { dCount = duration; @@ -29,17 +33,23 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro @Override public void onUpdate(float watts, float voltage, ForgeDirection side) { super.onUpdate(watts, voltage, side); - if (electricityRequest() > 0 && canConnect(side)) - { - float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); - this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); - } - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - if(bBlock == Block.waterStill.blockID && this.eStored > 1000 && this.wStored < this.wMax) + sList = TradeHelper.getSourounding(this); + if(!worldObj.isRemote) { - eStored -= 1000; - wStored += 1; - worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + count++; + if (electricityRequest() > 0 && canConnect(side)) + { + float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); + this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); + } + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + if(bBlock == Block.waterStill.blockID && this.eStored > 500 && this.wStored < this.wMax && count>=2) + { + eStored -= 500; + wStored += 1; + worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + count = 0; + } } } @@ -64,7 +74,7 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro @Override public int getTickInterval() { - return 40; + return 10; } @Override diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java index e84b0322..73ddf712 100644 --- a/src/common/steampower/ItemMachine.java +++ b/src/common/steampower/ItemMachine.java @@ -33,7 +33,7 @@ public class ItemMachine extends ItemBlock { { case 1: return 23; case 2: return 22; - case 15: return 22; + case 15: return 25; } return this.iconIndex+par1; } diff --git a/src/minecraft/basicpipes/ModelPump.java b/src/minecraft/basicpipes/ModelPump.java new file mode 100644 index 00000000..4be9d07a --- /dev/null +++ b/src/minecraft/basicpipes/ModelPump.java @@ -0,0 +1,146 @@ +// Date: 9/3/2012 6:12:15 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelPump extends ModelBase +{ + //fields + ModelRenderer Main; + ModelRenderer sidePort; + ModelRenderer FrontPort; + ModelRenderer pivit; + ModelRenderer crank; + ModelRenderer Rope; + ModelRenderer pivit2; + ModelRenderer Piston; + ModelRenderer pPlate; + ModelRenderer Rope2; + ModelRenderer BackPort; + + public ModelPump() + { + textureWidth = 128; + textureHeight = 128; + + Main = new ModelRenderer(this, 0, 0); + Main.addBox(-5F, 0F, -5F, 10, 13, 10); + Main.setRotationPoint(1F, 11F, 0F); + Main.setTextureSize(128, 128); + Main.mirror = true; + setRotation(Main, 0F, 0F, 0F); + sidePort = new ModelRenderer(this, 0, 76); + sidePort.addBox(-6F, -3F, -3F, 6, 6, 6); + sidePort.setRotationPoint(8F, 16F, 0F); + sidePort.setTextureSize(128, 128); + sidePort.mirror = true; + setRotation(sidePort, 0F, 0F, 0F); + FrontPort = new ModelRenderer(this, 0, 63); + FrontPort.addBox(-3F, -3F, 0F, 6, 6, 6); + FrontPort.setRotationPoint(0F, 16F, -8F); + FrontPort.setTextureSize(128, 128); + FrontPort.mirror = true; + setRotation(FrontPort, 0F, 0F, 0F); + pivit = new ModelRenderer(this, 0, 40); + pivit.addBox(-1F, 0F, -1F, 2, 3, 1); + pivit.setRotationPoint(0F, 8F, 1F); + pivit.setTextureSize(128, 128); + pivit.mirror = true; + setRotation(pivit, 0F, 0F, 0F); + crank = new ModelRenderer(this, 48, 0); + crank.addBox(-8F, 0F, -1F, 14, 2, 1); + crank.setRotationPoint(0F, 7F, 0F); + crank.setTextureSize(128, 128); + crank.mirror = true; + setRotation(crank, 0F, 0F, 0F); + Rope = new ModelRenderer(this, 0, 28); + Rope.addBox(0F, 0F, 0F, 1, 7, 1); + Rope.setRotationPoint(4F, 8F, -1F); + Rope.setTextureSize(128, 128); + Rope.mirror = true; + setRotation(Rope, 0F, 0F, 0F); + pivit2 = new ModelRenderer(this, 0, 40); + pivit2.addBox(-1F, 0F, -1F, 2, 3, 1); + pivit2.setRotationPoint(0F, 8F, -1F); + pivit2.setTextureSize(128, 128); + pivit2.mirror = true; + setRotation(pivit2, 0F, 0F, 0F); + pPlate = new ModelRenderer(this, 34, 30); + pPlate.addBox(0F, 0F, 0F, 1, 12, 1); + pPlate.setRotationPoint(-5F, 12F, -1F); + pPlate.setTextureSize(128, 128); + pPlate.mirror = true; + setRotation(pPlate, 0F, 0F, 0F); + Piston = new ModelRenderer(this, 20, 30); + Piston.addBox(0F, 0F, 0F, 3, 12, 3); + Piston.setRotationPoint(-8F, 12F, -2F); + Piston.setTextureSize(128, 128); + Piston.mirror = true; + setRotation(Piston, 0F, 0F, 0F); + Rope2 = new ModelRenderer(this, 0, 28); + Rope2.addBox(0F, 0F, 0F, 1, 7, 1); + Rope2.setRotationPoint(-7F, 8F, -1F); + Rope2.setTextureSize(128, 128); + Rope2.mirror = true; + setRotation(Rope2, 0F, 0F, 0F); + BackPort = new ModelRenderer(this, 0, 50); + BackPort.addBox(-3F, -3F, -6F, 6, 6, 6); + BackPort.setRotationPoint(0F, 16F, 8F); + BackPort.setTextureSize(128, 128); + BackPort.mirror = true; + setRotation(BackPort, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + } + public void renderMain(float f5) + { + Main.render(f5); + pivit.render(f5); + crank.render(f5); + Rope.render(f5); + pivit2.render(f5); + Piston.render(f5); + pPlate.render(f5); + Rope2.render(f5); + } + public void renderC1(float f5) + { + sidePort.render(f5); + } + public void renderC2(float f5) + { + FrontPort.render(f5); + } + public void renderC3(float f5) + { + BackPort.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index f20a9a49..9fb72e9c 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -3,8 +3,10 @@ package basicpipes; import steampower.SteamPowerMain; import basicpipes.PipeProxy; import basicpipes.pipes.TileEntityPipe; +import basicpipes.pipes.TileEntityPump; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.common.registry.GameRegistry; public class PipeClientProxy extends PipeProxy { @@ -20,5 +22,6 @@ public class PipeClientProxy extends PipeProxy public void init() { ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); + ClientRegistry.registerTileEntity(TileEntityPump.class, "pump", new RenderPump()); } } diff --git a/src/minecraft/basicpipes/RenderPump.java b/src/minecraft/basicpipes/RenderPump.java new file mode 100644 index 00000000..dd652020 --- /dev/null +++ b/src/minecraft/basicpipes/RenderPump.java @@ -0,0 +1,43 @@ +package basicpipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.pipes.TileEntityPipe; +import basicpipes.pipes.TileEntityPump; + + +public class RenderPump extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelPump model; + + public RenderPump() + { + model = new ModelPump(); + } + + public void renderAModelAt(TileEntityPump tileEntity, double d, double d1, double d2, float f) + { + + bindTextureByName(BasicPipesMain.textureFile+"/Pump.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + model.renderMain(0.0625F); + model.renderC1(0.0625F); + model.renderC2(0.0625F); + model.renderC3(0.0625F); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPump)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/src/minecraft/textures/BoilerGui.png b/src/minecraft/textures/BoilerGui.png index 2eb1fa5cbe5f7f4330864804ad3ab01e055bfe25..f7ba4f4b5f930d630bc3c9ed7794b41482ac715d 100644 GIT binary patch delta 1745 zcmY*ZX;hO}8h*22f?yIr1uCRz1XOSd(H3otd@48w3PnrVX{cZUm7ugpPC&j;t4>{j z4vT;Yv4aAlEDn?bS#pp~jv_5oB4Lx@VPB#kYoIsI{FwRfIp4YOeYfX%-g|BbZJd@U z#C1u=`egF{OV84XWl2%ncLFEl;XhHm1NUz@9o&08Sk2F zv}x0(lMeOiwvF?>dsghV@q1R&AnyzX@=bHe^L3@Vkn#G#HU}=OXsu~ks;pCbUOKb!0hS~Y`hgegL zkRRv)f80J|&bykDa`Fz&CV$sxa1&qj@JMy3)4wbQj7lX~Lc1Q}jr`1xuI?5B4|oJ_ zudae%@tcvNyW4E>U1jfy=T9518S7xTGtL@$Y6fFF7{&4e?*}(`345cePIuNAKxBl` zn6CTXmWB-FKqo29cH`>nNs9>IWeHp<_L{RXpF!gArC;FT0~de#Sx2NEBPav`=AWLs~(Sgu!Wwjx^YW96w_EM(QFrW#~ z`!arkojBvwPwdAI49{(554`a&x}fRr87id~HLl0)YDdjR#%7pVs zBkej5PST~x(xRq?xX#w>dEP*MWPyM#r^!Z`eKDWm$TPJdv6$wwCBQV1fYCQ?7pn>> ziRB$1BTHLVddm4HWH?Em?aX7M;?PEtlMd4{I`ELL+QkD)DQfxO#@Z?pP!NK8Ns8Xy zm!vktvsqBvmmoe{ue|Gglg%D@Kbn1x7qbhc;O5vr%ajwtv&*d?tN0vdtc_a|)5Kdx zzPOl@Q>!WO5&f;az*Q~Jb3K-N($v7#9zSKh`XnXgjZgSMsD{7SOiwR&Gy6nf;AWqP z9$}Vs?{-z0I38Q?lKmoo3XbDzlRVJ~;?sx>z%IvU5RZGz4FMU330nz3fUN`!r(=L% z7($4G79g5b)L$%DPW)246mF){-_(?QWUOpziumlg`K|f6_m6u-+js8#sA+Ft!fvr} z(H}8yL+nsJ7N9+MKx{|A8aEmnqsNRDT(jjM9T*@5n1SXexx$z4bj&MaG(Q3>^j%Sv z$S_&!O2%POH90h;uUSxg+V2sl$k^9Hhfp(B$5UeVvo_Mf`~TL>6bEJs8cp{bgiK?J zmBju6J7EOt=!PwoXGEe8U{psrS|khzi1U1|lp-*eh#?gnxe-3(!)F^M71O zp-kL8Fw@)Qie#Tb^WNS3);y!QQEP)t>Uvi)xAk?x?okJpcEA`wN-A*1Vrb~Gveom` z1u9^=THOu;x^RYCo`xunj0TTHg*4)Sn$F)$I(2=wo@$uTak|eaE@0!jEULRF3`VdM znc6@)h68qD`*a3To-c1qzjW@1`C6wNJjng?qoLv^1919(S_DK3TPvx~5-?!U`pSz@ z8|@Sk6hJgTNKJ<6<`#-;R?MRP>Vt<5Q@-ZJpR=+R3(tRk`%(KyvcWN*>ZI?jIf7Rg ztj{{kTgVKpKjg_4l=%JcOSfKCbainn5=UqQHzn;K#oJ37PTk delta 1721 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 U`A2+UuUODKd9}AyvgQ&052htBS^xk5 diff --git a/src/minecraft/textures/Pump.png b/src/minecraft/textures/Pump.png new file mode 100644 index 0000000000000000000000000000000000000000..c59427b9d7a5fb5a0bcdfd87dc572f0aaf90d7d6 GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!oXldXIwia})-o_K#d^9phE&{o zd&e;Ewt)ykz$%VCq8z)@dYBcf^B(e8X0<;PyUTp=-HWXp7j(OgJOx;GPh&c@?BsW~ z$Ysp#f0X{KvxX-w+Eth1?Be@5?C1~c^RuU~xS!n>zutcJgwEMA|2p5U`+4cP+_kUM z?V_*u=dNMcwN z!;Vu%24$7vvx^KT$~*{}WPXM@XKr7D&8&lo~sOw!7vt(dmU~FJ;U?@1JmEae) zFC;bK+?8+c|9!1? z;JmCmAJ^~yU%|3^OKHPWnd*BVZWPzWR-b2_cm9$0!T0a$`Q`rWM+DUegfg7j@jE}i z{>$^W<0)3GK0B-1b9uf?_Awkb{iAt2We)R%A0i9h7z3Rxz%V76t*<^?fBF4`kB@MC z*i)IgefP3@o9x}$YmUrh5@1Nbww5DG(q{b&@#=S979M6~P?)OaV3sed&?0cCZa>%W zzgeFujkp>T+5Iim4hu3cI;>CF&G)K2(FIl$Sc-ZX4dmACzFs`p;p9S<03nWWQzn_}!)X&#Hk^N!%O)ztaLQJh zfvF*h*;Wr>XE|&$nR3`pGHO^eZ7GJM@v%J7 literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/SteamGUI.png b/src/minecraft/textures/SteamGUI.png index ac81171315361eec20cf1f7eb53d5f6cdff48132..c68427369418297ae9a762b1f57959b01482cdf7 100644 GIT binary patch delta 685 zcmdlayG(Y1@-%cojT`8=OK^BX@| zXU`FNpLKxoO4Q`l8+yOg`OdB9`?Sp0lf~@QqYuR&DIR<@{>RE>Q27TD^xF*@$a|&g>7$NNm@RC@%x^?aGzMiamKjCuXp(} z8}KwQcp&)TOj}}spa6p)1ET;Vl&awBb^g7((oXh(Y=bqUK!b4+dxLv}y8W8?zthTp z6tX`sx94a$%+K`TLo8HC zI2aTd8W^CA$%fn}j(-+D+pWJXclR&pCvzT`?Vg!@?vZ8fee0F=Dy}YTx8D0d@zQdJ zCv(DUo7cU5RJ3yjNc!{lR83VSrDKIXQQ1X3lM{JG+~8({88$0_2?)x^9X7b43)CP5 zQonRs(5u_k=6j~?uZ!W>G_BYC*_ye=_c>A&Pn6}b7^QzN&SCjvKKTN#jG_R;bOsg% z3r*?9GaCg@xG8|?7dfb^EYMUfIM3~v(67Vtkpt|-14?JhuZK5-hHwYY228T_-uG{t7F5Z#<8$5T} z$)l~4?=dcU{q#UTHXr)K6gIs@d2hM={Dh4kly)^d5S*;YS3HSNZgM=I cnfTmF))?c8r(Kol6%0V&>FVdQ&MBb@04U5DiU0rr delta 706 zcmZ1`yGeF}^5h9zq8pWCxat*>J%W507^+km7#f-x7=Hc-(k~epN(~qoUL`OvSj}Ky z5YL|!f7FeEf%&edi(^Q|tv7cA`(_)6I9z+oIWdz_0GcpE+kY>BvnC`n2%w zOTGu&8P>ec3bojhD50d3B;#JrWPOM6#-GXjJW7-0d4zzNyZ%Gd?dAWOYww$%KVj*9 zy>y-099@RnYn6u2>=d&kQz93``6h3(xPio z%1Zw%Dh_r!Jd;U0_qfyHuz`!q5sSXSY~O7kXTM|E#(m*Xr}?uj=L(f3lus7mkc%RT+Vjb|+X$fz^bzTivP&7eD{BH8aXkXy+PveuRjF!Ie*q?_N-tNs5gPA>#B|g4ZHRF{N-w-8q?#s=)`wl)j>bj-jf#BqeyzY|=c)2F$@F`8c&ucI_ kn@>fy`6nj>!~g%x4B@LjC4Wc}(qRAsPgg&ebxsLQ0PBAn1^@s6 From ccbadd6c4b5ebdec5a3d1a3f906beee803d41f69 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 3 Sep 2012 19:31:09 -0400 Subject: [PATCH 071/115] changed version --- BasicPipesVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index 56a6051c..d8263ee9 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -1 \ No newline at end of file +2 \ No newline at end of file From 34f2d5572e48c3f82b0e08f2f630832b9e6d26ba Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 3 Sep 2012 19:44:52 -0400 Subject: [PATCH 072/115] Fixed pump recipe --- src/common/basicpipes/BasicPipesMain.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index ecb39559..70d5dd56 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -67,7 +67,7 @@ public class BasicPipesMain{ { proxy.preInit(); GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(machine,basicpipes.pipes.ItemMachine.class); + GameRegistry.registerBlock(machine); } @Init public void load(FMLInitializationEvent evt) @@ -132,8 +132,8 @@ public class BasicPipesMain{ , 'B',new ItemStack(parts, 1,7) , 'P',new ItemStack(Block.pistonBase) , 'C',BasicComponents.blockCopperWire - , 'V',new ItemStack(parts, 2,1) - });//bronze tube + , 'T',new ItemStack(parts, 1,6) + }); } } From df6e890c43abda196162b05639d2172fd5c3ffef Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 4 Sep 2012 01:01:54 -0400 Subject: [PATCH 073/115] fixed infinite water bug *again* i think i fixed it this time threw but knowing how its been it might crop up again. Need to clean up my code badly and find a way to recyle code better. --- src/common/basicpipes/pipes/ItemGuage.java | 46 +++++++------ .../basicpipes/pipes/TileEntityPipe.java | 69 +++++++++++-------- .../turbine/TileEntitySteamPiston.java | 25 ++++--- 3 files changed, 77 insertions(+), 63 deletions(-) diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/pipes/ItemGuage.java index 29effc9e..f4ce6611 100644 --- a/src/common/basicpipes/pipes/ItemGuage.java +++ b/src/common/basicpipes/pipes/ItemGuage.java @@ -44,30 +44,32 @@ public class ItemGuage extends Item } public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { - if(par1ItemStack.getItemDamage() == 0) + if(!par3World.isRemote) { - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int type = pipeEntity.getType(); - int steam = pipeEntity.getStoredLiquid(type); - String typeName = getType(type); - String print = "Error"; - if(steam < 0) - { - print = "No pressure or Volume"; - } - else - { - print = typeName +" " + steam + 1*Math.random() +" @ 16PSI"; - } - par2EntityPlayer.addChatMessage(print); - return true; - } - } + if(par1ItemStack.getItemDamage() == 0) + { + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + int type = pipeEntity.getType(); + int steam = pipeEntity.getStoredLiquid(type); + String typeName = getType(type); + String print = "Error"; + if(steam <= 0) + { + print = "No pressure or Volume"; + } + else + { + print = typeName +" " + steam +" @ 16PSI"; + } + par2EntityPlayer.addChatMessage(print); + return true; + } + } - + } return false; } diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index cc0da15d..e75e224a 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -54,32 +54,33 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke - private int getNumSide(ForgeDirection side) { + private int getNumSide(ForgeDirection side) + { -if(side == ForgeDirection.DOWN) -{ - return 0; -} -if(side == ForgeDirection.UP) -{ - return 1; -} -if(side == ForgeDirection.NORTH) -{ - return 2; -} -if(side == ForgeDirection.SOUTH) -{ - return 3; -} -if(side == ForgeDirection.WEST) -{ - return 4; -} -if(side == ForgeDirection.EAST) -{ - return 5; -} + if(side == ForgeDirection.DOWN) + { + return 0; + } + if(side == ForgeDirection.UP) + { + return 1; + } + if(side == ForgeDirection.NORTH) + { + return 2; + } + if(side == ForgeDirection.SOUTH) + { + return 3; + } + if(side == ForgeDirection.WEST) + { + return 4; + } + if(side == ForgeDirection.EAST) + { + return 5; + } return 0; @@ -98,9 +99,9 @@ if(side == ForgeDirection.EAST) { if(type == this.type) { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); - this.liquidStored += vol - rejectedVolume; - return rejectedVolume; + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); + this.liquidStored = Math.min(Math.max((liquidStored + vol - rejectedVolume),0),this.capacity); + return rejectedVolume; } return vol; } @@ -175,7 +176,7 @@ if(side == ForgeDirection.EAST) { if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) { - int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,5-this.liquidStored, ForgeDirection.getOrientation(i)); + int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,this.capacity-this.liquidStored, ForgeDirection.getOrientation(i)); this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); } } @@ -191,14 +192,22 @@ if(side == ForgeDirection.EAST) @Override public int getStoredLiquid(int type) { + if(type == this.type) + { return this.liquidStored; + } + return 0; } @Override public int getLiquidCapacity(int type) { - return 5; + if(type == this.type) + { + return 5; + } + return 0; } /** diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index d28ae4cc..dc1c92c1 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -133,7 +133,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { --steamStored; ++steamConsumed; - if(steamConsumed >= SteamPowerMain.steamOutBoiler) + if(steamConsumed >= 10) { ++waterStored; steamConsumed = 0; @@ -321,11 +321,10 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public int onProduceLiquid(int type, int Vol, ForgeDirection side) { if(type == 1) { - if(this.waterStored > 0) - { - int rejectedSteam = Math.max(Math.max((this.waterStored - Vol), 0),waterStored); - this.waterStored += waterStored - rejectedSteam; - return rejectedSteam; + if(this.waterStored >= 1) + { + this.waterStored--; + return 1; } } return 0; @@ -344,9 +343,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public int onReceiveLiquid(int type, int vol, ForgeDirection side) { if(type == 0) { - int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; + int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); + this.steamStored += vol - rejectedSteam; + return rejectedSteam; } return vol; } @@ -364,7 +363,11 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public int getStoredLiquid(int type) { if(type == 0) { - return this.steamStored; + return this.steamStored; + } + if(type == 1) + { + return this.waterStored; } return 0; } @@ -373,7 +376,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public int getLiquidCapacity(int type) { if(type == 0) { - return 100; + return 100; } return 0; } From ce3d3afcfec5c120d7646b4c5d0dfea5c1ac3e46 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 5 Sep 2012 23:15:16 -0400 Subject: [PATCH 074/115] minor cleanup --- src/common/basicpipes/BasicPipesMain.java | 2 +- src/common/basicpipes/pipes/BlockMachine.java | 9 +++++---- src/common/basicpipes/pipes/ItemMachine.java | 12 ------------ src/common/steampower/SteamPowerMain.java | 2 +- src/minecraft/textures/pipes/LavaPipe.png | Bin 0 -> 3196 bytes src/minecraft/textures/pipes/SteamPipe.png | Bin 3196 -> 770 bytes 6 files changed, 7 insertions(+), 18 deletions(-) delete mode 100644 src/common/basicpipes/pipes/ItemMachine.java create mode 100644 src/minecraft/textures/pipes/LavaPipe.png diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 70d5dd56..3ee0e29b 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -31,7 +31,7 @@ import cpw.mods.fml.common.registry.LanguageRegistry; @NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class BasicPipesMain{ - @Instance + public BasicPipesMain instance; @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") diff --git a/src/common/basicpipes/pipes/BlockMachine.java b/src/common/basicpipes/pipes/BlockMachine.java index 481a9e13..94b9c4fe 100644 --- a/src/common/basicpipes/pipes/BlockMachine.java +++ b/src/common/basicpipes/pipes/BlockMachine.java @@ -5,6 +5,8 @@ import net.minecraft.src.*; import java.util.Random; +import basicpipes.BasicPipesMain; + public class BlockMachine extends BlockContainer { @@ -74,10 +76,9 @@ public class BlockMachine extends BlockContainer return null; } @Override - public String getTextureFile() - { - return basicpipes.BasicPipesMain.textureFile + "/items.png"; - } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } } diff --git a/src/common/basicpipes/pipes/ItemMachine.java b/src/common/basicpipes/pipes/ItemMachine.java deleted file mode 100644 index cdf33905..00000000 --- a/src/common/basicpipes/pipes/ItemMachine.java +++ /dev/null @@ -1,12 +0,0 @@ -package basicpipes.pipes; - -import net.minecraft.src.ItemBlock; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int par1) { - super(par1); - // TODO Auto-generated constructor stub - } - -} diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index ff896960..546bb31c 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -45,7 +45,7 @@ public class SteamPowerMain{ public static Block engine = new BlockSteamPiston(EngineID).setBlockName("SteamEngien"); public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); - @Instance + public static SteamPowerMain instance; @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") diff --git a/src/minecraft/textures/pipes/LavaPipe.png b/src/minecraft/textures/pipes/LavaPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..5f4bb528d01814f47003ede29cf06b68de001a59 GIT binary patch literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( zX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3$DNjUR8-d%htIutdZEoQ0#b(FyTAa_ zdy`&8VVD_UC<6{NG_fI~0ue<-nj%P0#DLLIBvwSR5EN9f2P6n6F&ITuEN@2Ei>|D^ z_ww@lRz|vC zuzLs)$;-`!o*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2h zoGcOF60t^#FqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTX za!E_i;d2ub1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqK zG_|(0G&D0Z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY z_n(^h55xYX#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^b zXThc7C4-yrInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qj zZ=)yBuQ3=54Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK% z>{;v(b^`kbN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<) z0>40zCTJ7v2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01) zS~6}jY?%U?gEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j z*2tcg9i<^OEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfKTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761 zjmyXF)a;mc^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQq zHZJR2&bcD49Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^ zTY0bZ?)4%01p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK z8LKk71XR(_RKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS z<&CX#T35dwS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@ zqL5!WvekBL-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW z%ue3U;av{94wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#oSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%o zZ=0JGnu?n~9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8N zo_-(u{qS+0<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-U zsyQuty7Ua;Ou?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimk zUAw*F_TX^n@STz9kDQ z$NC=!KfXWC8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgU zAAWQEt$#LRcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6 z?<+s(e(3(_^YOu_)K8!O1p}D#{JO;G(*OVf32;bRa{vGi!T3_dTf3C{3Lmhbt6KN zr^ia28sEG9d2qdNk+P}laC|ri)hS3FfX}%cw6*y9gO`SI{>Loz200ZGu0MjwmB+QlQH1?Pzx9+`kV?h)_O7k zVjaNOZZZIxb}L|@=yTtLaP^}A067me1P12+>ZKMiP}I4)|MmHSdlr^n6aZL}bV|G5 zqmR0?uJnBg>K>t@!;Ru?zinFDyUbH|g$k*t|3c7erMBJYd<8dFxVsccjmO=k!27lm zo1arM9In0ulSROEgx$rrUStaZ6E{O`^fjOW5Q<8<+9?dk_2xpwT^JAwN$AVeKR=;- ig|t)N0U^=M(bfh2XR}B$G=L!h0000C*rJ00DDSM?wIu&K&6g000DMK}|sb0I`n?{9y$E z000SaNLh0L01m?d01m?e$8V@)0007)NklZElzquj7cm)#w>f(bUFaMf4_vp&XIKf%fQX+ zGg@IJFXy3zM2Yt?Vc0I6mGxixPR&j8MyhMpTS8}F4@jzSYDZe%KxHnf?lA`l`Owb+ zT=DUv0~Z>lz(bay*0(;q^)fyX$9TGMb$H;@0bKF%qsPtwo5&(S83C?;{{34g-~a*6ebepk{)UeqELAC; zB{4mC6N8U-D{D0*^Ke8F42+X-Pj54110vU!MlFRuaO@t&^v;s75V8SV(7X(M-_2s2 zgnN3MVSgN0oPY}z+Opl+mvqYT@uQV3a>8W0jR|cWda8HT*U%mM`0=wp^ozz8LNegC zZKY6v5-La{#-Wa*2-CD2$f4P6!g~PY;jSL6ag-exOot{1j;y`<4@2MaF_hnI<)k8J z*Ecty4e{~Q)sQsO?24!Cz@i9qy3~Oj!eIcfGj5D&)*3qZUpE?fg004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( zX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3$DNjUR8-d%htIutdZEoQ0#b(FyTAa_ zdy`&8VVD_UC<6{NG_fI~0ue<-nj%P0#DLLIBvwSR5EN9f2P6n6F&ITuEN@2Ei>|D^ z_ww@lRz|vC zuzLs)$;-`!o*{AqUjza0dRV*yaMRE;fKCVhpQKsoe1Yhg01=zBIT!&C1$=TK@rP|Ibo3vKKm@PqnO#LJhq6%Ij6Hz*<$V$@wQAMN5qJ)hzm2h zoGcOF60t^#FqJFfH{#e-4l@G)6iI9sa9D{VHW4w29}?su;^hF~NC{tY+*d5%WDCTX za!E_i;d2ub1#}&jF5T4HnnCyEWTkKf0>c0%E1Ah>(_PY1)0w;+02c53Su*0<(nUqK zG_|(0G&D0Z{i;y^b@OjZ+}lNZ8Th$p5Uu}MTtq^NHl*T1?CO*}7&0ztZsv2j*bmJyf3G7=Z`5B*PvzoDiKdLpOAxi2$L0#SX*@cY z_n(^h55xYX#km%V()bZjV~l{*bt*u9?FT3d5g^g~#a;iSZ@&02Abxq_DwB(I|L-^b zXThc7C4-yrInE_0gw7K3GZ**7&k~>k0Z0NWkO#^@9q0fwx1%qj zZ=)yBuQ3=54Wo^*!gyjLF-e%Um=erBOdIALW)L%unZshS@>qSW9o8Sq#0s#5*edK% z>{;v(b^`kbN5rY%%y90wC>#%$kE_5P!JWYk;U;klcqzOl-UjcFXXA75rT9jCH~u<) z0>40zCTJ7v2qAyk54cquI@7b&LHdZ`+zlTss6bJ7%PQ)z$cROu4wBhpu-r)01) zS~6}jY?%U?gEALn#wiFzo#H}aQ8rT=DHkadR18&{>P1bW7E`~Y4p3)hWn`DhhRJ5j z*2tcg9i<^OEt(fCg;q*CP8+7ZTcWhYX$fb^_9d-LhL+6BEtPYWVlfKTBusSTASKKb%HuWJzl+By+?gkLq)?+BTu761 zjmyXF)a;mc^>(B7bo*HQ1NNg1st!zt28YLv>W*y3CdWx9U8f|cqfXDAO`Q48?auQq zHZJR2&bcD49Ip>EY~kKEPV6Wm+eXFV)D)_R=tM0@&p?(!V*Qu1PXHG9o^ zTY0bZ?)4%01p8F`JoeS|<@=<@RE7GY07EYX@lwd>4oW|Yi!o+Su@M`;WuSK z8LKk71XR(_RKHM1xJ5XYX`fk>`6eqY>qNG6HZQwBM=xi4&Sb88?zd}EYguc1@>KIS z<&CX#T35dwS|7K*XM_5Nf(;WJJvJWRMA($P>8E^?{IdL4o5MGE7bq2MEEwP7v8AO@ zqL5!WvekBL-8R%V?zVyL=G&{be=K4bT`e{#t|)$A!YaA?jp;X)-+bB;zhj`(vULAW z%ue3U;av{94wp%n<(7@__S@Z2PA@Mif3+uO&y|X06?J#oSi8M;ejj_^(0<4Lt#wLu#dYrva1Y$6_o(k^&}yhSh&h;f@JVA>W8b%o zZ=0JGnu?n~9O4}sJsfnnx7n(>`H13?(iXTy*fM=I`sj`CT)*pTHEgYKqqP+u1IL8N zo_-(u{qS+0<2@%BCt82d{Gqm;(q7a7b>wu+b|!X?c13m#p7cK1({0<`{-e>4hfb-U zsyQuty7Ua;Ou?B?XLHZaol8GAb3Wnxcu!2v{R_`T4=x`(GvqLI{-*2AOSimk zUAw*F_TX^n@STz9kDQ z$NC=!KfXWC8h`dn#xL(D3Z9UkR7|Q&Hcy#Notk!^zVUSB(}`#4&lYA1f0h2V_PNgU zAAWQEt$#LRcH#y9#i!p(Udq2b^lI6wp1FXzN3T;~FU%Lck$-deE#qz9yYP3D3t8{6 z?<+s(e(3(_^YOu_)K8!O1p}D#{JO;G(*OVf32;bRa{vGi!T3_dTf3C{3Lmhbt6KN zr^ia28sEG9d2qdNk+P}laC|ri)hS3FfX}%cw6*y9gO`SI{>Loz200ZGu0MjwmB+QlQH1?Pzx9+`kV?h)_O7k zVjaNOZZZIxb}L|@=yTtLaP^}A067me1P12+>ZKMiP}I4)|MmHSdlr^n6aZL}bV|G5 zqmR0?uJnBg>K>t@!;Ru?zinFDyUbH|g$k*t|3c7erMBJYd<8dFxVsccjmO=k!27lm zo1arM9In0ulSROEgx$rrUStaZ6E{O`^fjOW5Q<8<+9?dk_2xpwT^JAwN$AVeKR=;- ig|t)N0U^=M(bfh2XR}B$G=L!h0000 Date: Wed, 12 Sep 2012 19:38:16 -0400 Subject: [PATCH 075/115] updates to UE 8 minor changes nothing big --- SteamPowerVersion.txt | 2 +- src/common/basicpipes/pipes/TileEntityCondenser.java | 2 +- src/common/basicpipes/pipes/TileEntityPump.java | 4 ++-- src/common/steampower/TileEntityMachine.java | 2 +- src/common/steampower/TileEntityNuller.java | 7 +++++-- src/common/steampower/mcmod.info | 2 +- src/minecraft/steampower/GUIGenerator.java | 6 ++++-- 7 files changed, 15 insertions(+), 10 deletions(-) diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index fa6609c4..57500fa4 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -1.3.2r4 \ No newline at end of file +r5 \ No newline at end of file diff --git a/src/common/basicpipes/pipes/TileEntityCondenser.java b/src/common/basicpipes/pipes/TileEntityCondenser.java index 25ebd4a0..18a27cbb 100644 --- a/src/common/basicpipes/pipes/TileEntityCondenser.java +++ b/src/common/basicpipes/pipes/TileEntityCondenser.java @@ -67,7 +67,7 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, } @Override - public float electricityRequest() { + public float ampRequest() { // TODO Auto-generated method stub return 0; } diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pipes/TileEntityPump.java index 5031f0e8..d225623f 100644 --- a/src/common/basicpipes/pipes/TileEntityPump.java +++ b/src/common/basicpipes/pipes/TileEntityPump.java @@ -37,7 +37,7 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro if(!worldObj.isRemote) { count++; - if (electricityRequest() > 0 && canConnect(side)) + if (ampRequest() > 0 && canConnect(side)) { float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); @@ -55,7 +55,7 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } @Override - public float electricityRequest() { + public float ampRequest() { return Math.max(eMax - eStored,0); } @Override diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index 206bc85b..bb934439 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -77,7 +77,7 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven } @Override - public float electricityRequest() { + public float ampRequest() { // TODO Auto-generated method stub return 0; } diff --git a/src/common/steampower/TileEntityNuller.java b/src/common/steampower/TileEntityNuller.java index fb48d77f..bd915d44 100644 --- a/src/common/steampower/TileEntityNuller.java +++ b/src/common/steampower/TileEntityNuller.java @@ -4,8 +4,8 @@ import net.minecraftforge.common.ForgeDirection; import universalelectricity.extend.IElectricUnit; public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { - - public float electricityRequest() + @Override + public float ampRequest() { return 100; } @@ -14,14 +14,17 @@ public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { return true; } + @Override public float getVoltage() { return 1000; } + @Override public int getTickInterval() { return 10; } + @Override public boolean canConnect(ForgeDirection side) { return true; diff --git a/src/common/steampower/mcmod.info b/src/common/steampower/mcmod.info index 8a1863b5..7a4a675c 100644 --- a/src/common/steampower/mcmod.info +++ b/src/common/steampower/mcmod.info @@ -3,7 +3,7 @@ "modid": "SteamPower", "name": "Steam Power", "description": "Basic coal fired power plant generator pack for UE", - "version": "r4", + "version": "r5", "mcversion": "1.3.2", "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", "updateUrl": "", diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUIGenerator.java index 310dfd89..612922ff 100644 --- a/src/minecraft/steampower/GUIGenerator.java +++ b/src/minecraft/steampower/GUIGenerator.java @@ -8,7 +8,8 @@ import org.lwjgl.opengl.GL11; import steampower.turbine.ContainerGenerator; import steampower.turbine.TileEntitySteamPiston; -import universalelectricity.electricity.ElectricUnit; +import universalelectricity.electricity.ElectricInfo; +import universalelectricity.electricity.ElectricInfo.ElectricUnit; public class GUIGenerator extends GuiContainer { @@ -56,7 +57,8 @@ import universalelectricity.electricity.ElectricUnit; } else { - displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); + //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); + displayText = ElectricInfo.getDisplay(ElectricInfo.getWatts(tileEntity.generateRate*20, tileEntity.getVoltage()), ElectricUnit.WATT); } displayText2 = "water" + "-" + tileEntity.waterStored; displayText3 = "steam" + "-" + tileEntity.steamStored; From ad45a0ce59b59581000acf381d273227613ea278 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Thu, 20 Sep 2012 03:34:07 -0400 Subject: [PATCH 076/115] Changed Liquid to store as a Type rather than Int This is a major change in how everything is stored and is only first step. This change water being ID I to Liquid.WATER. Makes it so much easier to understand what a liquid is and carries extra info like the block that is linked to the liquid. The Name of the liquid. I also started on a way to stored beams by create a class like Clac's Vectors. It stores a beam as a new beam with intensity, canProduce light,and direction moving. --- src/common/basicpipes/BasicPipesMain.java | 44 ++-- src/common/basicpipes/TradeHelper.java | 3 +- src/common/basicpipes/pipes/BlockPipe.java | 5 +- src/common/basicpipes/pipes/ItemGuage.java | 5 +- src/common/basicpipes/pipes/ItemPipe.java | 8 +- .../basicpipes/pipes/TileEntityCondenser.java | 9 +- .../basicpipes/pipes/TileEntityPipe.java | 28 ++- .../basicpipes/pipes/TileEntityPump.java | 9 +- src/common/basicpipes/pipes/api/Beam.java | 26 +++ .../basicpipes/pipes/api/IBeamProducer.java | 26 +++ .../basicpipes/pipes/api/ILiquidConsumer.java | 8 +- .../basicpipes/pipes/api/ILiquidProducer.java | 4 +- src/common/basicpipes/pipes/api/Liquid.java | 51 +++++ src/common/steampower/TileEntityNuller.java | 4 +- src/common/steampower/TradeHelper.java | 3 +- .../steampower/boiler/TileEntityBoiler.java | 43 ++-- .../turbine/TileEntitySteamPiston.java | 27 +-- .../steampower/turbine/TileEntitytopGen.java | 23 +- src/minecraft/basicpipes/ModelLargePipe.java | 200 ++++++++++++++++++ src/minecraft/basicpipes/RenderPipe.java | 63 ++++-- src/minecraft/steampower/GuiBoiler.java | 4 +- src/minecraft/textures/pipes/SixSteamPipe.png | Bin 0 -> 1906 bytes 22 files changed, 470 insertions(+), 123 deletions(-) create mode 100644 src/common/basicpipes/pipes/api/Beam.java create mode 100644 src/common/basicpipes/pipes/api/IBeamProducer.java create mode 100644 src/common/basicpipes/pipes/api/Liquid.java create mode 100644 src/minecraft/basicpipes/ModelLargePipe.java create mode 100644 src/minecraft/textures/pipes/SixSteamPipe.png diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 3ee0e29b..bd0b9f50 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -7,6 +7,7 @@ import basicpipes.pipes.ItemGuage; import basicpipes.pipes.ItemParts; import basicpipes.pipes.ItemPipe; import basicpipes.pipes.TileEntityPump; +import basicpipes.pipes.api.Liquid; import net.minecraft.client.Minecraft; import net.minecraft.src.Block; @@ -74,30 +75,25 @@ public class BasicPipesMain{ { //register proxy.init(); - - //Names - LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 0)), "SteamPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 1)), "WaterPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 2)), "LavaPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 3)), "OilPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 4)), "FuelPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 5)), "AirPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 6)), "MethainPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 7)), "BioFuelPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 8)), "coolentPipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 9)), "NukeWastePipe"); - LanguageRegistry.addName((new ItemStack(itemPipes, 1, 10)), "Pipe"); - LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); - LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); - //crafting parts + //Names and lang stuff + //Pipe Names + for(int i =0; i < Liquid.values().length;i++) + { + LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), Liquid.getLiquid(i).lName+" Pipe"); + } + //Pump + LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); + //Tools + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); + //Parts + LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); + LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); } @PostInit public void postInit(FMLPostInitializationEvent event) diff --git a/src/common/basicpipes/TradeHelper.java b/src/common/basicpipes/TradeHelper.java index b03ecb7b..408ace1d 100644 --- a/src/common/basicpipes/TradeHelper.java +++ b/src/common/basicpipes/TradeHelper.java @@ -1,6 +1,7 @@ package basicpipes; import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -43,7 +44,7 @@ public class TradeHelper { * @param rise - does the liquid rise up like a gas * @return the remaining untraded liquid */ - public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) + public static int shareLiquid(TileEntity blockEntity,Liquid type,boolean rise) { TileEntity[] connectedBlocks = getSourounding(blockEntity); ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; diff --git a/src/common/basicpipes/pipes/BlockPipe.java b/src/common/basicpipes/pipes/BlockPipe.java index e99064c6..1f26557d 100644 --- a/src/common/basicpipes/pipes/BlockPipe.java +++ b/src/common/basicpipes/pipes/BlockPipe.java @@ -4,6 +4,7 @@ import java.util.Random; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.BlockContainer; import net.minecraft.src.Material; @@ -70,7 +71,7 @@ public class BlockPipe extends BlockContainer this.updateConductorTileEntity(world, x, y, z); } - public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,int type) + public static TileEntity getUEUnit(World world, int x, int y, int z, byte side,Liquid type) { switch(side) { @@ -135,7 +136,7 @@ public class BlockPipe extends BlockContainer if(tileEntity instanceof TileEntityPipe) { TileEntityPipe conductorTileEntity = (TileEntityPipe) tileEntity; - int type = conductorTileEntity.getType(); + Liquid type = conductorTileEntity.getType(); conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i)); } } diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/pipes/ItemGuage.java index f4ce6611..e7b6fcc4 100644 --- a/src/common/basicpipes/pipes/ItemGuage.java +++ b/src/common/basicpipes/pipes/ItemGuage.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.*; @@ -52,9 +53,9 @@ public class ItemGuage extends Item if(blockEntity instanceof TileEntityPipe) { TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int type = pipeEntity.getType(); + Liquid type = pipeEntity.getType(); int steam = pipeEntity.getStoredLiquid(type); - String typeName = getType(type); + String typeName = type.lName; String print = "Error"; if(steam <= 0) { diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/pipes/ItemPipe.java index 857ac301..118c5b3f 100644 --- a/src/common/basicpipes/pipes/ItemPipe.java +++ b/src/common/basicpipes/pipes/ItemPipe.java @@ -3,6 +3,7 @@ package basicpipes.pipes; import java.util.List; import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.Block; import net.minecraft.src.CreativeTabs; @@ -16,7 +17,6 @@ import net.minecraft.src.World; public class ItemPipe extends Item { int index = 32;//32 + 4 rows alloted to pipes - String[] names = new String[]{"Steam","Water","Lava","Oil","Fuel","Air","Methain","BioFuel","coolent","NukeWaste"}; private int spawnID; public ItemPipe(int id) @@ -37,12 +37,12 @@ public class ItemPipe extends Item @Override public String getItemNameIS(ItemStack itemstack) { - return itemstack.getItemDamage() < names.length ? names[itemstack.getItemDamage()] +" Pipe2" : "EmptyPipe"; + return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Pipe" : "Empty Pipe"; } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { - for(int i = 0; i < names.length; i++) + for(int i = 0; i < Liquid.values().length; i++) { par3List.add(new ItemStack(this, 1, i)); } @@ -112,7 +112,7 @@ public class ItemPipe extends Item if(blockEntity instanceof TileEntityPipe) { TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - int dm = par1ItemStack.getItemDamage(); + Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); pipeEntity.setType(dm); } } diff --git a/src/common/basicpipes/pipes/TileEntityCondenser.java b/src/common/basicpipes/pipes/TileEntityCondenser.java index 18a27cbb..99342fc0 100644 --- a/src/common/basicpipes/pipes/TileEntityCondenser.java +++ b/src/common/basicpipes/pipes/TileEntityCondenser.java @@ -1,6 +1,7 @@ package basicpipes.pipes; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -11,8 +12,8 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, int waterStored = 0; int energyStored = 0; @Override - public int onProduceLiquid(int type,int maxVol, ForgeDirection side) { - if(type == 1) + public int onProduceLiquid(Liquid type,int maxVol, ForgeDirection side) { + if(type == Liquid.WATER) { int tradeW = Math.min(maxVol, waterStored); waterStored -= tradeW; @@ -44,8 +45,8 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, tickCount++; } @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1) + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) { return true; } diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index e75e224a..db4e7d8a 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -10,6 +10,7 @@ import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver @@ -17,7 +18,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke //The amount stored in the conductor protected int liquidStored = 0; //the current set type of the pipe 0-5 - protected int type = 0; + protected Liquid type = Liquid.DEFUALT; //The maximum amount of electricity this conductor can take protected int capacity = 5; private int count = 0; @@ -95,7 +96,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke * @return vol - The amount of rejected liquid that can't enter the pipe */ @Override - public int onReceiveLiquid(int type,int vol, ForgeDirection side) + public int onReceiveLiquid(Liquid type,int vol, ForgeDirection side) { if(type == this.type) { @@ -190,7 +191,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke * @return Return the stored volume in this pipe. */ @Override - public int getStoredLiquid(int type) + public int getStoredLiquid(Liquid type) { if(type == this.type) { @@ -201,7 +202,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke @Override - public int getLiquidCapacity(int type) + public int getLiquidCapacity(Liquid type) { if(type == this.type) { @@ -217,7 +218,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { super.readFromNBT(par1NBTTagCompound); this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = par1NBTTagCompound.getInteger("type"); + this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); } /** @@ -227,11 +228,11 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { super.writeToNBT(par1NBTTagCompound); par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type); + par1NBTTagCompound.setInteger("type", this.type.ordinal()); } //find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { + public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { if(type == this.type) { return true; @@ -239,12 +240,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke return false; } //returns liquid type - public int getType() { + public Liquid getType() { return this.type; } //used by the item to set the liquid type on spawn - public void setType(int rType) { + public void setType(Liquid rType) { this.type = rType; } @@ -260,7 +261,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke int type = data.readInt(); if(worldObj.isRemote) { - this.type = type; + this.type = Liquid.getLiquid(type); } } catch(Exception e) @@ -270,6 +271,13 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } + + + + public int getSize() { + // TODO Auto-generated method stub + return 6; + } } diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pipes/TileEntityPump.java index d225623f..73ba3e83 100644 --- a/src/common/basicpipes/pipes/TileEntityPump.java +++ b/src/common/basicpipes/pipes/TileEntityPump.java @@ -2,6 +2,7 @@ package basicpipes.pipes; import basicpipes.TradeHelper; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.Block; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -78,8 +79,8 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - if(type == 1 && wStored > 0) + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { + if(type == Liquid.WATER && wStored > 0) { int tradeW = Math.min(maxVol, wStored); wStored -= tradeW; @@ -89,8 +90,8 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1 && side != ForgeDirection.DOWN) + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER && side != ForgeDirection.DOWN) { return true; } diff --git a/src/common/basicpipes/pipes/api/Beam.java b/src/common/basicpipes/pipes/api/Beam.java new file mode 100644 index 00000000..0527ce05 --- /dev/null +++ b/src/common/basicpipes/pipes/api/Beam.java @@ -0,0 +1,26 @@ +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +public class Beam { + //might need a more complex system for this later but for now this will work + public int intensity; //Beam intensity level + public boolean light; //Can prodcue light, might use this later + public ForgeDirection movDir; //Used to find the beams current direction + public Beam() + { + this(0,false,ForgeDirection.UNKNOWN); + } + Beam(int i, boolean light, ForgeDirection dir) + { + intensity = i; + this.light = light; + movDir = dir; + } + public static int getBeamLevel(Beam beam) + { + return beam.intensity; + } + + +} diff --git a/src/common/basicpipes/pipes/api/IBeamProducer.java b/src/common/basicpipes/pipes/api/IBeamProducer.java new file mode 100644 index 00000000..c8e179d7 --- /dev/null +++ b/src/common/basicpipes/pipes/api/IBeamProducer.java @@ -0,0 +1,26 @@ +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +public interface IBeamProducer { + + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param regInt - requested beam intensity + * @param side - The side + * @return New Beam - Return a vol of liquid type that is produced + */ + public int createNewBeam(int type, int reqInt, ForgeDirection side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canCreateBeam(int type, ForgeDirection side); + +} diff --git a/src/common/basicpipes/pipes/api/ILiquidConsumer.java b/src/common/basicpipes/pipes/api/ILiquidConsumer.java index dc8e0b7c..33386c0b 100644 --- a/src/common/basicpipes/pipes/api/ILiquidConsumer.java +++ b/src/common/basicpipes/pipes/api/ILiquidConsumer.java @@ -16,7 +16,7 @@ public interface ILiquidConsumer * @parm type - The type of liquid being received * @return vol - The amount liquid that can't be recieved */ - public int onReceiveLiquid(int type, int vol, ForgeDirection side); + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side); /** * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics @@ -24,16 +24,16 @@ public interface ILiquidConsumer * @parm type - The type of liquid * @return Returns true or false if this consumer can receive a volume at this given tick or moment. */ - public boolean canRecieveLiquid(int type, ForgeDirection forgeDirection); + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection); /** * @return Return the stored liquid of type in this consumer. */ - public int getStoredLiquid(int type); + public int getStoredLiquid(Liquid type); /** * @return Return the maximum amount of stored liquid this consumer can get. */ - public int getLiquidCapacity(int type); + public int getLiquidCapacity(Liquid type); } diff --git a/src/common/basicpipes/pipes/api/ILiquidProducer.java b/src/common/basicpipes/pipes/api/ILiquidProducer.java index 3368ee1d..a0c376a4 100644 --- a/src/common/basicpipes/pipes/api/ILiquidProducer.java +++ b/src/common/basicpipes/pipes/api/ILiquidProducer.java @@ -17,7 +17,7 @@ public interface ILiquidProducer * @param side - The side * @return vol - Return a vol of liquid type that is produced */ - public int onProduceLiquid(int type, int maxVol, ForgeDirection side); + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side); /** * canProduceLiquid * block. @@ -26,5 +26,5 @@ public interface ILiquidProducer * @return boolean - True if can, false if can't produce liquid of type or on that side * Also used for connection rules of pipes' */ - public boolean canProduceLiquid(int type, ForgeDirection side); + public boolean canProduceLiquid(Liquid type, ForgeDirection side); } \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/src/common/basicpipes/pipes/api/Liquid.java new file mode 100644 index 00000000..705b5840 --- /dev/null +++ b/src/common/basicpipes/pipes/api/Liquid.java @@ -0,0 +1,51 @@ +package basicpipes.pipes.api; + +import universalelectricity.basiccomponents.BasicComponents; +import net.minecraft.src.Block; +import net.minecraftforge.common.ForgeDirection; +/** + * System too easily reference a liquid type and its info + * @author Rseifert + * + */ +public enum Liquid { + // -1 == null || unused + STEAM("Steam",false,true,-1,-1), + WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID), + LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID), + OIL("Oil",true,false,BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), + Fuel("Fuel",true,false,-1,-1), + Air("Air",false,true,0,-1), + Methain("Methain",true,true,-1,-1), + BioFuel("BioFuel",true,false,-1,-1), + Coolent("Coolent",true,false,-1,-1), + NukeWaste("NukeWaste",true,false,-1,-1), + DEFUALT("Empty",false,false,-1,-1); + public final boolean flamable;//can it catch on fire, not used but might be + public final boolean isGas;//is it a gas, used to find if it floats + public final int Still;//if there is a block of still liquid linked to this + public final int Moving;//if there is a block of moving liquid linked to this + public final String lName; +private Liquid(String name,boolean flame,boolean gas,int block, int Moving) +{ + this.flamable = flame; + this.isGas = gas; + this.Still = block; + this.Moving = Moving; + this.lName = name; +} +/** + * Only use this if you are converting from the old system + * Or have a special need for it + * @param id of liquid + * @return Liquid Object + */ + public static Liquid getLiquid(int id) + { + if (id >= 0 && id < Liquid.values().length) + { + return Liquid.values()[id]; + } + return DEFUALT; + } +} diff --git a/src/common/steampower/TileEntityNuller.java b/src/common/steampower/TileEntityNuller.java index bd915d44..b8a794d5 100644 --- a/src/common/steampower/TileEntityNuller.java +++ b/src/common/steampower/TileEntityNuller.java @@ -7,7 +7,7 @@ public class TileEntityNuller extends TileEntityMachine implements IElectricUnit @Override public float ampRequest() { - return 100; + return 200; } @Override public boolean canReceiveFromSide(ForgeDirection side) @@ -22,7 +22,7 @@ public class TileEntityNuller extends TileEntityMachine implements IElectricUnit @Override public int getTickInterval() { - return 10; + return 20; } @Override public boolean canConnect(ForgeDirection side) diff --git a/src/common/steampower/TradeHelper.java b/src/common/steampower/TradeHelper.java index 2bb325dc..f7ca41d8 100644 --- a/src/common/steampower/TradeHelper.java +++ b/src/common/steampower/TradeHelper.java @@ -1,6 +1,7 @@ package steampower; import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.Liquid; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -43,7 +44,7 @@ public class TradeHelper { * @param rise - does the liquid rise up like a gas * @return the remaining untraded liquid */ - public static int shareLiquid(TileEntity blockEntity,int type,boolean rise) + public static int shareLiquid(TileEntity blockEntity,Liquid type,boolean rise) { TileEntity[] connectedBlocks = getSourounding(blockEntity); ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index a45b7f4d..bd76d800 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -15,6 +15,7 @@ import steampower.burner.TileEntityFireBox; import universalelectricity.network.IPacketReceiver; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; @@ -155,8 +156,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv if(count >= 16) { //adds water from container slot - this.waterStored = TradeHelper.shareLiquid(this, 1, false); - this.steamStored = TradeHelper.shareLiquid(this, 0, true); + this.waterStored = TradeHelper.shareLiquid(this, Liquid.WATER, false); + this.steamStored = TradeHelper.shareLiquid(this, Liquid.STEAM, true); count = 0; } @@ -183,7 +184,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) { - if((int)waterStored < getLiquidCapacity(1)) + if((int)waterStored < getLiquidCapacity(Liquid.WATER)) { ++waterStored; this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); @@ -192,7 +193,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } if(storedItems[0].isItemEqual(new ItemStack(Block.ice,1))) { - if((int)waterStored < getLiquidCapacity(1) && this.heatStored > 100) + if((int)waterStored < getLiquidCapacity(Liquid.WATER) && this.heatStored > 100) { ++waterStored; int stacksize = this.storedItems[0].stackSize; @@ -224,16 +225,16 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv return var1; } @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 0) + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) { - int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(0), 0); + int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); this.steamStored += vol - rejectedSteam; return rejectedSteam; } - if(type == 1) + if(type == Liquid.WATER) { - int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(1), 0); + int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(Liquid.WATER), 0); this.waterStored += vol - rejectedWater; return rejectedWater; } @@ -241,8 +242,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public boolean canRecieveLiquid(int type,ForgeDirection side) { - if(type == 1) + public boolean canRecieveLiquid(Liquid type,ForgeDirection side) { + if(type == Liquid.WATER) { return true; } @@ -250,12 +251,12 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public int getStoredLiquid(int type) { - if(type == 1) + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) { return this.waterStored; } - if(type == 0) + if(type == Liquid.STEAM) { return this.steamStored; } @@ -263,20 +264,20 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public int getLiquidCapacity(int type) { - if(type ==1) + public int getLiquidCapacity(Liquid type) { + if(type ==Liquid.WATER) { return 14; } - if(type == 0) + if(type == Liquid.STEAM) { return steamMax; } return 0; } @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { - if(type == 0) + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { + if(type == Liquid.STEAM) { if(steamStored > 1) { @@ -288,8 +289,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 0) + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) { return true; } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index dc1c92c1..3650a226 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -20,6 +20,7 @@ import universalelectricity.extend.TileEntityConductor; import universalelectricity.network.IPacketReceiver; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; @@ -318,8 +319,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public int onProduceLiquid(int type, int Vol, ForgeDirection side) { - if(type == 1) + public int onProduceLiquid(Liquid type, int Vol, ForgeDirection side) { + if(type == Liquid.WATER) { if(this.waterStored >= 1) { @@ -331,8 +332,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - if(type == 1) + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) { return true; } @@ -340,8 +341,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { - if(type == 0) + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) { int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); this.steamStored += vol - rejectedSteam; @@ -351,8 +352,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - if(type == 0) + public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) { return true; } @@ -360,12 +361,12 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public int getStoredLiquid(int type) { - if(type == 0) + public int getStoredLiquid(Liquid type) { + if(type == Liquid.STEAM) { return this.steamStored; } - if(type == 1) + if(type == Liquid.WATER) { return this.waterStored; } @@ -373,8 +374,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public int getLiquidCapacity(int type) { - if(type == 0) + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.STEAM) { return 100; } diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/src/common/steampower/turbine/TileEntitytopGen.java index ac0eb25c..421d812c 100644 --- a/src/common/steampower/turbine/TileEntitytopGen.java +++ b/src/common/steampower/turbine/TileEntitytopGen.java @@ -6,6 +6,7 @@ import steampower.TileEntityMachine; import universalelectricity.extend.IElectricUnit; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { public TileEntitySteamPiston genB = null; @@ -22,37 +23,43 @@ public TileEntitySteamPiston genB = null; } } @Override - public int onProduceLiquid(int type, int maxVol, ForgeDirection side) { + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { // TODO Auto-generated method stub return genB !=null ? genB.onProduceLiquid(type, maxVol, side) : 0; } @Override - public boolean canProduceLiquid(int type, ForgeDirection side) { - // TODO Auto-generated method stub + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } return genB !=null ? genB.canProduceLiquid(type, side) : false; } @Override - public int onReceiveLiquid(int type, int vol, ForgeDirection side) { + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { // TODO Auto-generated method stub return genB !=null ? genB.onReceiveLiquid(type, vol, side) : vol; } @Override - public boolean canRecieveLiquid(int type, ForgeDirection side) { - // TODO Auto-generated method stub + public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } return genB !=null ? genB.canRecieveLiquid(type, side): false; } @Override - public int getStoredLiquid(int type) { + public int getStoredLiquid(Liquid type) { // TODO Auto-generated method stub return genB !=null ? genB.getStoredLiquid(type): 0; } @Override - public int getLiquidCapacity(int type) { + public int getLiquidCapacity(Liquid type) { // TODO Auto-generated method stub return genB !=null ? genB.getLiquidCapacity(type): 0; } diff --git a/src/minecraft/basicpipes/ModelLargePipe.java b/src/minecraft/basicpipes/ModelLargePipe.java new file mode 100644 index 00000000..c8939584 --- /dev/null +++ b/src/minecraft/basicpipes/ModelLargePipe.java @@ -0,0 +1,200 @@ +// Date: 9/20/2012 12:00:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelLargePipe extends ModelBase +{ + //fields + ModelRenderer Mid; + ModelRenderer RightPipe; + ModelRenderer RightInter; + ModelRenderer RightConnect; + ModelRenderer LeftInter; + ModelRenderer LeftPipe; + ModelRenderer LeftConnect; + ModelRenderer TopInter; + ModelRenderer TopPipe; + ModelRenderer TopConnect; + ModelRenderer BottomPipe; + ModelRenderer BottomInter; + ModelRenderer BottomConnect; + ModelRenderer BackPipe; + ModelRenderer BackInter; + ModelRenderer BackConnect; + ModelRenderer FrontInter; + ModelRenderer FrontPipe; + ModelRenderer FrontConnect; + + public ModelLargePipe() + { + textureWidth = 128; + textureHeight = 32; + + Mid = new ModelRenderer(this, 50, 13); + Mid.addBox(-3F, -3F, -3F, 6, 6, 6); + Mid.setRotationPoint(0F, 16F, 0F); + Mid.setTextureSize(128, 32); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 25, 0); + RightPipe.addBox(0F, -3F, -3F, 4, 6, 6); + RightPipe.setRotationPoint(3F, 16F, 0F); + RightPipe.setTextureSize(128, 32); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + RightInter = new ModelRenderer(this, 98, 0); + RightInter.addBox(0F, -4F, -4F, 1, 8, 8); + RightInter.setRotationPoint(2F, 16F, 0F); + RightInter.setTextureSize(128, 32); + RightInter.mirror = true; + setRotation(RightInter, 0F, 0F, 0F); + RightConnect = new ModelRenderer(this, 98, 0); + RightConnect.addBox(0F, -4F, -4F, 1, 8, 8); + RightConnect.setRotationPoint(7F, 16F, 0F); + RightConnect.setTextureSize(128, 32); + RightConnect.mirror = true; + setRotation(RightConnect, 0F, 0F, 0F); + LeftInter = new ModelRenderer(this, 98, 0); + LeftInter.addBox(-1F, -4F, -4F, 1, 8, 8); + LeftInter.setRotationPoint(-2F, 16F, 0F); + LeftInter.setTextureSize(128, 32); + LeftInter.mirror = true; + setRotation(LeftInter, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 25, 0); + LeftPipe.addBox(-4F, -3F, -3F, 4, 6, 6); + LeftPipe.setRotationPoint(-3F, 16F, 0F); + LeftPipe.setTextureSize(128, 32); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + LeftConnect = new ModelRenderer(this, 98, 0); + LeftConnect.addBox(-1F, -4F, -4F, 1, 8, 8); + LeftConnect.setRotationPoint(-7F, 16F, 0F); + LeftConnect.setTextureSize(128, 32); + LeftConnect.mirror = true; + setRotation(LeftConnect, 0F, 0F, 0F); + TopInter = new ModelRenderer(this, 77, 17); + TopInter.addBox(-4F, -1F, -4F, 8, 1, 8); + TopInter.setRotationPoint(0F, 14F, 0F); + TopInter.setTextureSize(128, 32); + TopInter.mirror = true; + setRotation(TopInter, 0F, 0F, 0F); + TopPipe = new ModelRenderer(this, 50, 0); + TopPipe.addBox(-3F, -4F, -3F, 6, 4, 6); + TopPipe.setRotationPoint(0F, 13F, 0F); + TopPipe.setTextureSize(128, 32); + TopPipe.mirror = true; + setRotation(TopPipe, 0F, 0F, 0F); + TopConnect = new ModelRenderer(this, 77, 17); + TopConnect.addBox(-4F, -1F, -4F, 8, 1, 8); + TopConnect.setRotationPoint(0F, 9F, 0F); + TopConnect.setTextureSize(128, 32); + TopConnect.mirror = true; + setRotation(TopConnect, 0F, 0F, 0F); + BottomPipe = new ModelRenderer(this, 50, 0); + BottomPipe.addBox(-3F, 0F, -3F, 6, 4, 6); + BottomPipe.setRotationPoint(0F, 19F, 0F); + BottomPipe.setTextureSize(128, 32); + BottomPipe.mirror = true; + setRotation(BottomPipe, 0F, 0F, 0F); + BottomInter = new ModelRenderer(this, 77, 17); + BottomInter.addBox(-4F, 0F, -4F, 8, 1, 8); + BottomInter.setRotationPoint(0F, 18F, 0F); + BottomInter.setTextureSize(128, 32); + BottomInter.mirror = true; + setRotation(BottomInter, 0F, 0F, 0F); + BottomConnect = new ModelRenderer(this, 77, 17); + BottomConnect.addBox(-4F, 0F, -4F, 8, 1, 8); + BottomConnect.setRotationPoint(0F, 23F, 0F); + BottomConnect.setTextureSize(128, 32); + BottomConnect.mirror = true; + setRotation(BottomConnect, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 0, 0); + BackPipe.addBox(-3F, -3F, 0F, 6, 6, 4); + BackPipe.setRotationPoint(0F, 16F, 3F); + BackPipe.setTextureSize(128, 32); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + BackInter = new ModelRenderer(this, 0, 23); + BackInter.addBox(-4F, -4F, 0F, 8, 8, 1); + BackInter.setRotationPoint(0F, 16F, 2F); + BackInter.setTextureSize(128, 32); + BackInter.mirror = true; + setRotation(BackInter, 0F, 0F, 0F); + BackConnect = new ModelRenderer(this, 0, 23); + BackConnect.addBox(-4F, -4F, 0F, 8, 8, 1); + BackConnect.setRotationPoint(0F, 16F, 7F); + BackConnect.setTextureSize(128, 32); + BackConnect.mirror = true; + setRotation(BackConnect, 0F, 0F, 0F); + FrontInter = new ModelRenderer(this, 0, 23); + FrontInter.addBox(-4F, -4F, -1F, 8, 8, 1); + FrontInter.setRotationPoint(0F, 16F, -2F); + FrontInter.setTextureSize(128, 32); + FrontInter.mirror = true; + setRotation(FrontInter, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 0, 0); + FrontPipe.addBox(-3F, -3F, -4F, 6, 6, 4); + FrontPipe.setRotationPoint(0F, 16F, -3F); + FrontPipe.setTextureSize(128, 32); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + FrontConnect = new ModelRenderer(this, 0, 23); + FrontConnect.addBox(-4F, -4F, -1F, 8, 8, 1); + FrontConnect.setRotationPoint(0F, 16F, -7F); + FrontConnect.setTextureSize(128, 32); + FrontConnect.mirror = true; + setRotation(FrontConnect, 0F, 0F, 0F); + } + public void renderMiddle() { Mid.render(0.0625F); } + public void renderBottom() { BottomPipe.render(0.0625F); BottomConnect.render(0.0625F); BottomInter.render(0.0625F);} + public void renderTop() { TopPipe.render(0.0625F);TopConnect.render(0.0625F); TopInter.render(0.0625F);} + public void renderLeft() { LeftPipe.render(0.0625F);LeftConnect.render(0.0625F); LeftInter.render(0.0625F);} + public void renderRight() { RightPipe.render(0.0625F);RightConnect.render(0.0625F); RightInter.render(0.0625F);} + public void renderBack() { BackPipe.render(0.0625F); BackConnect.render(0.0625F);BackInter.render(0.0625F); } + public void renderFront() { FrontPipe.render(0.0625F);FrontConnect.render(0.0625F);FrontInter.render(0.0625F);} + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5); + + + + + + + + + + + + + + + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index 21d72a5a..f97a0f54 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -1,23 +1,28 @@ package basicpipes; +import net.minecraft.src.ModelBase; import net.minecraft.src.TileEntity; import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import basicpipes.pipes.TileEntityPipe; +import basicpipes.pipes.api.Liquid; public class RenderPipe extends TileEntitySpecialRenderer { - int type = 0; - private ModelPipe model; - private ModelPipe model2; + Liquid type; + int size = 6; + + private ModelPipe fourPipe; + private ModelLargePipe SixPipe; + private ModelBase model = fourPipe; public RenderPipe() { - model = new ModelPipe(); - model2 = new ModelPipe(); + fourPipe = new ModelPipe(); + SixPipe = new ModelLargePipe(); } public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) @@ -25,25 +30,43 @@ public class RenderPipe extends TileEntitySpecialRenderer //Texture file type = tileEntity.getType(); - switch(type) - { - case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SteamPipe.png");break; - case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/WaterPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; - } + size = tileEntity.getSize(); + GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - - if(tileEntity.connectedBlocks[0] != null) model.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) model.renderTop(); - if(tileEntity.connectedBlocks[2] != null) model.renderFront(); - if(tileEntity.connectedBlocks[3] != null) model.renderBack(); - if(tileEntity.connectedBlocks[4] != null) model.renderRight(); - if(tileEntity.connectedBlocks[5] != null) model.renderLeft(); - - model.renderMiddle(); + if(size == 4) + { + switch(type.ordinal()) + { + case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SteamPipe.png");break; + case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/WaterPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; + } + if(tileEntity.connectedBlocks[0] != null) fourPipe.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) fourPipe.renderTop(); + if(tileEntity.connectedBlocks[2] != null) fourPipe.renderFront(); + if(tileEntity.connectedBlocks[3] != null) fourPipe.renderBack(); + if(tileEntity.connectedBlocks[4] != null) fourPipe.renderRight(); + if(tileEntity.connectedBlocks[5] != null) fourPipe.renderLeft(); + fourPipe.renderMiddle(); + } + if(size == 6) + { + switch(type.ordinal()) + { + case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; + } + if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) SixPipe.renderTop(); + if(tileEntity.connectedBlocks[2] != null) SixPipe.renderFront(); + if(tileEntity.connectedBlocks[3] != null) SixPipe.renderBack(); + if(tileEntity.connectedBlocks[4] != null) SixPipe.renderRight(); + if(tileEntity.connectedBlocks[5] != null) SixPipe.renderLeft(); + SixPipe.renderMiddle(); + } GL11.glPopMatrix(); } diff --git a/src/minecraft/steampower/GuiBoiler.java b/src/minecraft/steampower/GuiBoiler.java index c32bb0e5..d42e2c62 100644 --- a/src/minecraft/steampower/GuiBoiler.java +++ b/src/minecraft/steampower/GuiBoiler.java @@ -7,6 +7,8 @@ import net.minecraft.src.StatCollector; import org.lwjgl.opengl.GL11; +import basicpipes.pipes.api.Liquid; + import steampower.boiler.ContainerBoiler; import steampower.boiler.TileEntityBoiler; @@ -51,7 +53,7 @@ public class GuiBoiler extends GuiContainer int var10; if (this.boilerInventory.waterStored > 0) { - var7 = boilerInventory.getStoredLiquid(1)*4 + 1; + var7 = boilerInventory.getStoredLiquid(Liquid.WATER)*4 + 1; this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); } if (this.boilerInventory.steamStored > 0) diff --git a/src/minecraft/textures/pipes/SixSteamPipe.png b/src/minecraft/textures/pipes/SixSteamPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..f8695b64c9e8df757d128b09d5c02c401edea37c GIT binary patch literal 1906 zcmV-&2aWiNP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2iyr1 z13DxA%f%l600#0&L_t(|+U=XaZyVVW$3L^X++8hy-C2?i%f5>d+cAO^7eJRL{{ZW> za%$Jj^H>B-L%I)U+w|$@J zx&8U5(Tule^=xmL(h;Y>1Sg9Eh0}CgE&AM9j7Ih%z+O9@c6`o+?R!87TqppXrFcVU zUM6~mdzy|bQDG)+W-L0&C@w7k>b0nv8+2I}-xviHRmB)ZwGWCTdhmgAy%wdwL8BQb z&z`L4+WMA!#B(B73IMJnFLHeEixB+l`@Q$GpnzkE^oU*v#F0&)YgD6pEegN-&%3cY z-i^DILT_Rh@a)M-0Z7-@x0Gv{9su`mmu^h)_rCq$h#&&L{QWB#5y({X@xtq!cKN$) z&l^k>}@Myxf;r_KB`4OHOA~XjzckY*?MDq5eXjLE(3}q4r#B)i&y&~Fhn18QnOiJ zC?u-tJ$tfJHOBDuH@laY0gN$c-pNmX@Cn9fRZqz-1HfqQx6{%H*6^~FPxXT{cN{_N zx6uz)KSb{Xz77cl&eHnpwWwej%^%UEoV#~~6?2jRdyQs1_EdWyOzTVq5cx2%gOY)4 zMl;xp0@qwJLo5KBcA-ZZL&lby$E2w(;DJqN#{9(5quE|tiF>?+L-#prnd`o0)PWlfE!~nWN&j^w=0o~-0)rjreRP;b8vwX4@6InM9YYmovfLfa8(i-;$dMbxrN z{NZ%(Xs&tG|jB2=C4g6pI;q9>l%e}W)E6?72A!pe!&>o066lkxlZ>96% ze;Wh*7x-k#N40@yk{DpFX-&NrIY3klz0%#K;$M$pm82MY{@tbGMh1XyU+;gh-%j5F z-9|G$v9I4gzQv8A8vqedv^4AH#;ky`pVYEgd)|w0=SAqdu4!FP5AepBpFCyEO&ZPE z0DI4#th9k20dntFDYMK+0QYW{I&14&iM8NI)+*cgZj}z!*0;tE{%#aq?Bf5)W(IPC z4=&gVynjwXU@(K{xRWgY+yRhFsZwBXND7m0lQ4ZzCID^%pD|ux=pE-H3zmiad3Wq^ zNo8$)D+{hdJ5CwnqcgI^NyS+3rS>`o-U8b;wQE^p$ga0@_qx+Yjh9)naa&*N@J??HsqMb7CyeXvW!@grr`J4wkFoouz6Rx8iQ85*7A13;#W0W--qCuZ zT4~YWw|{k>F2EL50w64g-ooe0#SO~>s{;%D-mMMMyTA{Dc+|nuA#O|0GIsZihz&11fkCka<-17E--lxC2mP~r;*n%$tURVZM9RYx0;4}1h z0Xtb5c-$giL Date: Thu, 20 Sep 2012 03:38:47 -0400 Subject: [PATCH 077/115] Forgot Version # changes --- BasicPipesVersion.txt | 2 +- SteamPowerVersion.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index d8263ee9..e440e5c8 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -2 \ No newline at end of file +3 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index 57500fa4..62f94575 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -r5 \ No newline at end of file +6 \ No newline at end of file From cce11962925bcabd501428e336088352ddd49347 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Thu, 20 Sep 2012 19:42:37 -0400 Subject: [PATCH 078/115] fixed packet issue --- src/common/basicpipes/pipes/TileEntityPipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index db4e7d8a..d500f157 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -114,7 +114,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke count++; if(count >= 30 || intiUpdate) { - PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type}); + PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type.ordinal()}); count = 0; intiUpdate = false; } From 88ee4ca306d4fab39d3994c8e6433dd7ef670d4e Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 23 Sep 2012 03:40:35 -0400 Subject: [PATCH 079/115] add presure to pipes mainly use only for max range of a pipe but later i'll add leaking and breaking of pipes --- BasicPipesVersion.txt | 2 +- SteamPowerVersion.txt | 2 +- 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/pipes/BlockPipe.java | 4 +- src/common/basicpipes/pipes/ItemGuage.java | 12 +- .../basicpipes/pipes/TileEntityCondenser.java | 30 ++-- .../basicpipes/pipes/TileEntityPipe.java | 132 ++++++++---------- .../basicpipes/pipes/TileEntityPump.java | 18 +++ .../basicpipes/pipes/api/ILiquidProducer.java | 8 ++ .../steampower/boiler/ContainerBoiler.java | 12 +- .../steampower/boiler/TileEntityBoiler.java | 25 +++- .../steampower/turbine/BlockSteamPiston.java | 11 +- src/common/steampower/turbine/ItemEngine.java | 1 - .../turbine/TileEntitySteamPiston.java | 17 +++ .../steampower/turbine/TileEntitytopGen.java | 18 ++- src/minecraft/textures/DevBlocks.png | Bin 0 -> 30785 bytes 19 files changed, 420 insertions(+), 110 deletions(-) create mode 100644 src/common/aa/BlockDev.java create mode 100644 src/common/aa/DevMain.java create mode 100644 src/common/aa/DevProxy.java create mode 100644 src/common/aa/TileEntityAntiMob.java create mode 100644 src/minecraft/textures/DevBlocks.png diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index e440e5c8..bf0d87ab 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -3 \ No newline at end of file +4 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index 62f94575..c7930257 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -6 \ No newline at end of file +7 \ No newline at end of file diff --git a/src/common/aa/BlockDev.java b/src/common/aa/BlockDev.java new file mode 100644 index 00000000..4258af02 --- /dev/null +++ b/src/common/aa/BlockDev.java @@ -0,0 +1,84 @@ +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 new file mode 100644 index 00000000..90d25d1e --- /dev/null +++ b/src/common/aa/DevMain.java @@ -0,0 +1,54 @@ +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 new file mode 100644 index 00000000..12df3e46 --- /dev/null +++ b/src/common/aa/DevProxy.java @@ -0,0 +1,63 @@ +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.pipes.TileEntityPipe; +import basicpipes.pipes.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 new file mode 100644 index 00000000..3837b9a8 --- /dev/null +++ b/src/common/aa/TileEntityAntiMob.java @@ -0,0 +1,37 @@ +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 100 && tickCount > 200 && waterStored < 10) - { - energyStored -= 100; - waterStored += 1; - tickCount = 0; - } - tickCount++; + } @Override public boolean canProduceLiquid(Liquid type, ForgeDirection side) { @@ -65,7 +59,11 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, @Override public void onUpdate(float amps, float voltage, ForgeDirection side) { // TODO Auto-generated method stub - + if(energyStored > 100 && waterStored < 10) + { + energyStored -= 100; + waterStored += 1; + } } @Override public float ampRequest() { @@ -90,8 +88,24 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, @Override public int getTickInterval() { // TODO Auto-generated method stub + return 20; + } + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } return 0; } + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index d500f157..4b12c8b0 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -20,14 +20,15 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke //the current set type of the pipe 0-5 protected Liquid type = Liquid.DEFUALT; //The maximum amount of electricity this conductor can take - protected int capacity = 5; + public int capacity = 2; + public int hPressure = this.presure; private int count = 0; private boolean intiUpdate = true; //Stores information on all connected blocks around this tile entity public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - //Checks if this is the first the tile entity updates protected boolean firstUpdate = true; + public int presure = 0; /** * This function adds a connection between this pipe and other blocks * @param tileEntity - Must be either a producer, consumer or a conductor @@ -35,60 +36,22 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke */ public void addConnection(TileEntity tileEntity, ForgeDirection side) { - int sideN = getNumSide(side); - this.connectedBlocks[sideN] = null; + this.connectedBlocks[side.ordinal()] = null; if(tileEntity instanceof ILiquidConsumer) { if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) { - this.connectedBlocks[sideN] = tileEntity; + this.connectedBlocks[side.ordinal()] = tileEntity; } } if(tileEntity instanceof ILiquidProducer) { if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) { - this.connectedBlocks[sideN] = tileEntity; + this.connectedBlocks[side.ordinal()] = tileEntity; } } } - - - - private int getNumSide(ForgeDirection side) - { - - if(side == ForgeDirection.DOWN) - { - return 0; - } - if(side == ForgeDirection.UP) - { - return 1; - } - if(side == ForgeDirection.NORTH) - { - return 2; - } - if(side == ForgeDirection.SOUTH) - { - return 3; - } - if(side == ForgeDirection.WEST) - { - return 4; - } - if(side == ForgeDirection.EAST) - { - return 5; - } - - - return 0; - } - - - /** * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). * @param vols - The amount of vol source is trying to give to this pipe @@ -112,40 +75,73 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke //cause the block to update itself every tick needs to be change to .5 seconds to reduce load BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); count++; - if(count >= 30 || intiUpdate) + if(count >= 10 || intiUpdate && !this.worldObj.isRemote) { PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type.ordinal()}); count = 0; intiUpdate = false; - } - if(!this.worldObj.isRemote) - { - byte connectedUnits = 0; - byte connectedConductors = 1; - int averageVolume = this.liquidStored; + + + int connectedUnits = 0; + int pipes = 1; + int producers = 0; + int averageVolume = this.liquidStored; + int averagePresure2 = 0; - Vector3 currentPosition = new Vector3(this.xCoord, this.yCoord, this.zCoord); - - for(byte i = 0; i < 6; i++) + for(int i = 0; i < 6; i++) { - if(connectedBlocks[i] != null) - { if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) { connectedUnits ++; - + if(connectedBlocks[i] instanceof ILiquidProducer) + { + if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) + { + averagePresure2 += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); + producers++; + } + }else if(connectedBlocks[i] instanceof TileEntityPipe) { + pipes ++; + //add pipes volume to average collection value averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - - connectedConductors ++; - } + //get the current pipes pressure + int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; + if(pPressure > hPressure) + { + this.hPressure = pPressure; + } + }else + if(connectedBlocks[i] instanceof ILiquidConsumer) + { + if(this.presure <= 1) + { + this.hPressure = 0; + } + } } - } - } - //average volume used to control volume spread to pipes. Prevent one pipe getting all liquid when another is empty - averageVolume = Math.max(averageVolume/connectedConductors,0); + } + //turn average collection into actual average pipe volume + averageVolume = Math.max(averageVolume/pipes,0); + + + //sets the pressure of the pipe to the producer pressure or to the highest pipe pressure -1 + if(producers > 0) + { + averagePresure2 = Math.max(averagePresure2/producers,0); + this.presure = averagePresure2; + } + else if(connectedUnits > 0) + { + this.presure = hPressure - 1; + }else + { + this.presure = 1; + } + //only trade liquid if there is more than one thing connect and its pressure is higher than 1 + if(connectedUnits > 0 && this.presure > 0) { for(byte i = 0; i < 6; i++) { @@ -159,14 +155,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke int transferVolumeAmount = 0; //amount to be moved ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - if(connectedBlocks[i] instanceof TileEntityPipe && this.liquidStored > ((TileEntityPipe)connectedConsumer).liquidStored) - { - transferVolumeAmount = Math.max(Math.min(averageVolume - ((TileEntityPipe)connectedConsumer).liquidStored, this.liquidStored), 0); - } - else if(!(connectedConsumer instanceof TileEntityPipe)) - { - transferVolumeAmount = this.liquidStored; - } + transferVolumeAmount = this.liquidStored; int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); @@ -184,6 +173,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } } } + } } diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pipes/TileEntityPump.java index 73ba3e83..4c211851 100644 --- a/src/common/basicpipes/pipes/TileEntityPump.java +++ b/src/common/basicpipes/pipes/TileEntityPump.java @@ -97,4 +97,22 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } return false; } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } } diff --git a/src/common/basicpipes/pipes/api/ILiquidProducer.java b/src/common/basicpipes/pipes/api/ILiquidProducer.java index a0c376a4..4f5a94cd 100644 --- a/src/common/basicpipes/pipes/api/ILiquidProducer.java +++ b/src/common/basicpipes/pipes/api/ILiquidProducer.java @@ -27,4 +27,12 @@ public interface ILiquidProducer * Also used for connection rules of pipes' */ public boolean canProduceLiquid(Liquid type, ForgeDirection side); + public boolean canProducePresure(Liquid type, ForgeDirection side); + /** + * + * @param type - liquid type + * @param side - side this of presure + * @return pressure that is used to output liquid on + */ + public int presureOutput(Liquid type, ForgeDirection side); } \ No newline at end of file diff --git a/src/common/steampower/boiler/ContainerBoiler.java b/src/common/steampower/boiler/ContainerBoiler.java index b508543f..86b512f4 100644 --- a/src/common/steampower/boiler/ContainerBoiler.java +++ b/src/common/steampower/boiler/ContainerBoiler.java @@ -12,19 +12,19 @@ public class ContainerBoiler extends Container { this.boiler = par2TileEntityboiler; this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); - int var3; + int line; - for (var3 = 0; var3 < 3; ++var3) + for (line = 0; line < 3; ++line) { - for (int var4 = 0; var4 < 9; ++var4) + for (int slot = 0; slot < 9; ++slot) { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + this.addSlotToContainer(new Slot(par1InventoryPlayer, slot + line * 9 + 9, 8 + slot * 18, 84 + line * 18)); } } - for (var3 = 0; var3 < 9; ++var3) + for (line = 0; line < 9; ++line) { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + this.addSlotToContainer(new Slot(par1InventoryPlayer, line, 8 + line * 18, 142)); } } diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index bd76d800..c2f3b6d4 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -296,6 +296,29 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } return false; } - + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + if(side == ForgeDirection.UP) + { + return 100; + } + else + { + return 80; + } + } + return 0; + } + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } } diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java index fda19383..8792c4c4 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -106,7 +106,7 @@ public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ @Override public TileEntity createNewTileEntity(World world, int metadata) { - if(metadata < 4) + if(metadata >= 0 && metadata < 4) { return new TileEntitySteamPiston(); } @@ -119,13 +119,11 @@ public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) { int meta = par1World.getBlockMetadata(par2, par3, par4); - boolean var7 = false; if (meta == 1) { if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { par1World.setBlockWithNotify(par2, par3, par4, 0); - var7 = true; } } else @@ -135,13 +133,6 @@ public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ par1World.setBlockWithNotify(par2, par3, par4, 0); } } - if (var7) - { - if (!par1World.isRemote) - { - this.dropBlockAsItem(par1World, par2, par3, par4, 0, 0); - } - } } @Override public int idDropped(int par1, Random par2Random, int par3) diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 65b978f8..85189835 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -50,7 +50,6 @@ public class ItemEngine extends Item par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - ePlayer.sendChatToPlayer(""+par3World.getBlockMetadata(par4, par5, par6)); par3World.editingBlocks = false; --par1ItemStack.stackSize; return true; diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 3650a226..ecc3be2a 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -406,4 +406,21 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } } + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + if(type == Liquid.WATER) + { + return true; + } + return false; + } } diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/src/common/steampower/turbine/TileEntitytopGen.java index 421d812c..8d9a2418 100644 --- a/src/common/steampower/turbine/TileEntitytopGen.java +++ b/src/common/steampower/turbine/TileEntitytopGen.java @@ -63,5 +63,21 @@ public TileEntitySteamPiston genB = null; // TODO Auto-generated method stub return genB !=null ? genB.getLiquidCapacity(type): 0; } - + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + if(type == Liquid.WATER) + { + return true; + } + return false; + } } diff --git a/src/minecraft/textures/DevBlocks.png b/src/minecraft/textures/DevBlocks.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f3b762de88eb9685fe75d7de874d2417a860c6 GIT binary patch literal 30785 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 zue Date: Sun, 23 Sep 2012 04:13:13 -0400 Subject: [PATCH 080/115] Change boiler to use IHeatProducer Boiler originaly uses this to gain heat to boil water. Due to lack of use i moved it too direct heat gain from fireBox. Now i've add the heat api to basic pipes and changes boiler to also accept lava souce as a heat provider at 10*random*tickRate min 0 max 100 heat gain. --- .../basicpipes/pipes/TileEntityPipe.java | 37 +++++++++++-------- .../pipes}/api/IHeatConsumer.java | 2 +- .../pipes}/api/IHeatProducer.java | 2 +- .../steampower/boiler/TileEntityBoiler.java | 16 ++++++-- .../steampower/burner/TileEntityFireBox.java | 3 +- 5 files changed, 37 insertions(+), 23 deletions(-) rename src/common/{steampower => basicpipes/pipes}/api/IHeatConsumer.java (96%) rename src/common/{steampower => basicpipes/pipes}/api/IHeatProducer.java (93%) diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index 4b12c8b0..4e037ad4 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -75,11 +75,10 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke //cause the block to update itself every tick needs to be change to .5 seconds to reduce load BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); count++; - if(count >= 10 || intiUpdate && !this.worldObj.isRemote) + if(count >= 10 && !this.worldObj.isRemote) { PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type.ordinal()}); count = 0; - intiUpdate = false; int connectedUnits = 0; @@ -100,7 +99,8 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke averagePresure2 += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); producers++; } - }else + } + if(connectedBlocks[i] instanceof TileEntityPipe) { pipes ++; @@ -112,13 +112,6 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { this.hPressure = pPressure; } - }else - if(connectedBlocks[i] instanceof ILiquidConsumer) - { - if(this.presure <= 1) - { - this.hPressure = 0; - } } } } @@ -154,14 +147,26 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { int transferVolumeAmount = 0; //amount to be moved ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - - transferVolumeAmount = this.liquidStored; + if(connectedBlocks[i] instanceof TileEntityPipe) + { + if(((TileEntityPipe)connectedBlocks[i]).presure < this.presure) + { + transferVolumeAmount = this.liquidStored; + } + else + { + transferVolumeAmount = 0; + } + } + else + { + transferVolumeAmount = this.liquidStored; + } int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, 5), 0); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, this.capacity), 0); } - } - + }else if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) { if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) @@ -196,7 +201,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { if(type == this.type) { - return 5; + return this.capacity; } return 0; } diff --git a/src/common/steampower/api/IHeatConsumer.java b/src/common/basicpipes/pipes/api/IHeatConsumer.java similarity index 96% rename from src/common/steampower/api/IHeatConsumer.java rename to src/common/basicpipes/pipes/api/IHeatConsumer.java index 31accc56..1c5a29e3 100644 --- a/src/common/steampower/api/IHeatConsumer.java +++ b/src/common/basicpipes/pipes/api/IHeatConsumer.java @@ -1,4 +1,4 @@ -package steampower.api; +package basicpipes.pipes.api; /** * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. diff --git a/src/common/steampower/api/IHeatProducer.java b/src/common/basicpipes/pipes/api/IHeatProducer.java similarity index 93% rename from src/common/steampower/api/IHeatProducer.java rename to src/common/basicpipes/pipes/api/IHeatProducer.java index 879b36b1..d9271ce7 100644 --- a/src/common/steampower/api/IHeatProducer.java +++ b/src/common/basicpipes/pipes/api/IHeatProducer.java @@ -1,4 +1,4 @@ -package steampower.api; +package basicpipes.pipes.api; public interface IHeatProducer diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index c2f3b6d4..c55cda38 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -1,4 +1,6 @@ package steampower.boiler; +import java.util.Random; + import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; @@ -13,6 +15,7 @@ import steampower.TileEntityMachine; import steampower.TradeHelper; import steampower.burner.TileEntityFireBox; import universalelectricity.network.IPacketReceiver; +import basicpipes.pipes.api.IHeatProducer; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; @@ -49,13 +52,14 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; int steamMax = 140; public boolean isBeingHeated = false; + private Random random = new Random(); public String getInvName() { return "container.boiler"; } public Object[] getSendData() { - return new Object[]{(int)facing,(int)RunTime,(int)energyStore,(int)waterStored, + return new Object[]{(int)RunTime,(int)energyStore,(int)waterStored, (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; } @@ -65,7 +69,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv ByteArrayDataInput dataStream) { try { - facing = dataStream.readInt(); + RunTime = dataStream.readInt(); energyStore = dataStream.readInt(); waterStored = dataStream.readInt(); @@ -170,10 +174,14 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); this.isBeingHeated = false; - if(blockE instanceof TileEntityFireBox) + if(blockE instanceof IHeatProducer) { this.isBeingHeated = true; - heatStored = (int) Math.min((heatStored + ((TileEntityFireBox)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); + heatStored = (int) Math.min((heatStored + ((IHeatProducer)blockE).onProduceHeat(SteamPowerMain.fireOutput*getTickInterval(), 1)), heatMax); + } + else if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) + { + heatStored += (int) Math.min((int)(random.nextDouble()*10)*getTickInterval(), heatMax); } } super.onUpdate(watts, voltage, side); diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 9c659146..6a98435f 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -13,10 +13,11 @@ import net.minecraftforge.common.ISidedInventory; import steampower.SteamPowerMain; import steampower.TileEntityMachine; import steampower.TradeHelper; -import steampower.api.IHeatProducer; import steampower.boiler.TileEntityBoiler; import universalelectricity.network.IPacketReceiver; +import basicpipes.pipes.api.IHeatProducer; + import com.google.common.io.ByteArrayDataInput; public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer From f16047c2ad77b2cc74ff384649062385b43249b2 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 23 Sep 2012 05:59:20 -0400 Subject: [PATCH 081/115] add liquid types to pumps fixed textures for some pipe types and pump will pump any liquid with a block id linked too it. Which is oil,lava,water only ;/ also i moved some package around was getting hard to sort sh** out --- src/common/aa/DevProxy.java | 2 +- src/common/basicpipes/BasicPipesMain.java | 8 +- src/common/basicpipes/PipeProxy.java | 2 +- .../basicpipes/pipes/api/IHeatConsumer.java | 22 --- src/common/basicpipes/pipes/api/Liquid.java | 12 ++ .../{pipes => pumps}/BlockMachine.java | 10 +- src/common/basicpipes/pumps/ItemMachine.java | 125 ++++++++++++++++++ .../{pipes => pumps}/TileEntityCondenser.java | 2 +- .../{pipes => pumps}/TileEntityPump.java | 47 +++++-- src/minecraft/basicpipes/PipeClientProxy.java | 2 +- src/minecraft/basicpipes/RenderPipe.java | 3 + src/minecraft/basicpipes/RenderPump.java | 24 +++- src/minecraft/textures/CopperWire.png | Bin 3196 -> 0 bytes src/minecraft/textures/YellowPiston.png | Bin 1051 -> 0 bytes src/minecraft/textures/pipes/SixLavaPipe.png | Bin 0 -> 796 bytes src/minecraft/textures/pipes/SixOilPipe.png | Bin 0 -> 782 bytes src/minecraft/textures/pipes/SixWaterPipe.png | Bin 0 -> 791 bytes src/minecraft/textures/pumps/LavaPump.png | Bin 0 -> 740 bytes src/minecraft/textures/pumps/OilPump.png | Bin 0 -> 727 bytes src/minecraft/textures/pumps/Pump.png | Bin 0 -> 735 bytes .../{Pump.png => pumps/WaterPump.png} | Bin 21 files changed, 206 insertions(+), 53 deletions(-) delete mode 100644 src/common/basicpipes/pipes/api/IHeatConsumer.java rename src/common/basicpipes/{pipes => pumps}/BlockMachine.java (89%) create mode 100644 src/common/basicpipes/pumps/ItemMachine.java rename src/common/basicpipes/{pipes => pumps}/TileEntityCondenser.java (99%) rename src/common/basicpipes/{pipes => pumps}/TileEntityPump.java (68%) delete mode 100644 src/minecraft/textures/CopperWire.png delete mode 100644 src/minecraft/textures/YellowPiston.png create mode 100644 src/minecraft/textures/pipes/SixLavaPipe.png create mode 100644 src/minecraft/textures/pipes/SixOilPipe.png create mode 100644 src/minecraft/textures/pipes/SixWaterPipe.png create mode 100644 src/minecraft/textures/pumps/LavaPump.png create mode 100644 src/minecraft/textures/pumps/OilPump.png create mode 100644 src/minecraft/textures/pumps/Pump.png rename src/minecraft/textures/{Pump.png => pumps/WaterPump.png} (100%) diff --git a/src/common/aa/DevProxy.java b/src/common/aa/DevProxy.java index 12df3e46..80d12498 100644 --- a/src/common/aa/DevProxy.java +++ b/src/common/aa/DevProxy.java @@ -6,7 +6,7 @@ import net.minecraft.src.World; import net.minecraftforge.client.MinecraftForgeClient; import basicpipes.BasicPipesMain; import basicpipes.pipes.TileEntityPipe; -import basicpipes.pipes.TileEntityPump; +import basicpipes.pumps.TileEntityPump; import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; import cpw.mods.fml.common.network.IGuiHandler; diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index bd0b9f50..3063e8e3 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -2,12 +2,12 @@ package basicpipes; import java.io.File; import basicpipes.pipes.BlockPipe; -import basicpipes.pipes.BlockMachine; import basicpipes.pipes.ItemGuage; import basicpipes.pipes.ItemParts; import basicpipes.pipes.ItemPipe; -import basicpipes.pipes.TileEntityPump; import basicpipes.pipes.api.Liquid; +import basicpipes.pumps.BlockMachine; +import basicpipes.pumps.TileEntityPump; import net.minecraft.client.Minecraft; import net.minecraft.src.Block; @@ -41,7 +41,7 @@ public class BasicPipesMain{ public static int pipeID = configurationProperties(); private static int partID; private static int ppipeID; - private static int machineID; + public static int machineID; private static int toolID; public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); public static Block machine = new BlockMachine(machineID).setBlockName("pump"); @@ -68,7 +68,7 @@ public class BasicPipesMain{ { proxy.preInit(); GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(machine); + GameRegistry.registerBlock(machine,basicpipes.pumps.ItemMachine.class); } @Init public void load(FMLInitializationEvent evt) diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java index 69ad27f9..b82d9883 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/src/common/basicpipes/PipeProxy.java @@ -1,7 +1,7 @@ package basicpipes; import basicpipes.pipes.TileEntityPipe; -import basicpipes.pipes.TileEntityPump; +import basicpipes.pumps.TileEntityPump; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; import net.minecraft.src.World; diff --git a/src/common/basicpipes/pipes/api/IHeatConsumer.java b/src/common/basicpipes/pipes/api/IHeatConsumer.java deleted file mode 100644 index 1c5a29e3..00000000 --- a/src/common/basicpipes/pipes/api/IHeatConsumer.java +++ /dev/null @@ -1,22 +0,0 @@ -package basicpipes.pipes.api; - -/** - * The IHeatConsumer interface is an interface that must be applied to all tile entities that can receive heat joules. - * @author Darkguardsman code sourced from Calclavia - * - */ -public interface IHeatConsumer -{ - /** - * onRecieveSteam is called whenever a Steam transmitter sends a packet of electricity to the consumer (which is this block). - * @param vol - The amount of steam this block received - * @param side - The side of the block in which the electricity came from. - * @return vol - The amount of rejected steam to be sent to back - */ - public float onReceiveHeat(float jouls, int side); - - /** - * @return Return the stored electricity in this consumer. Called by conductors to spread electricity to this unit. - */ - public float getStoredHeat(); -} \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/src/common/basicpipes/pipes/api/Liquid.java index 705b5840..e8c6f5f5 100644 --- a/src/common/basicpipes/pipes/api/Liquid.java +++ b/src/common/basicpipes/pipes/api/Liquid.java @@ -1,5 +1,6 @@ package basicpipes.pipes.api; + import universalelectricity.basiccomponents.BasicComponents; import net.minecraft.src.Block; import net.minecraftforge.common.ForgeDirection; @@ -48,4 +49,15 @@ private Liquid(String name,boolean flame,boolean gas,int block, int Moving) } return DEFUALT; } +public static Liquid getLiquidByBlock(int bBlock) { + for(int i = 0; i < Liquid.values().length;i++) + { + Liquid selected = Liquid.getLiquid(i); + if(bBlock == selected.Still) + { + return selected; + } + } + return Liquid.DEFUALT; +} } diff --git a/src/common/basicpipes/pipes/BlockMachine.java b/src/common/basicpipes/pumps/BlockMachine.java similarity index 89% rename from src/common/basicpipes/pipes/BlockMachine.java rename to src/common/basicpipes/pumps/BlockMachine.java index 94b9c4fe..b37d5f2a 100644 --- a/src/common/basicpipes/pipes/BlockMachine.java +++ b/src/common/basicpipes/pumps/BlockMachine.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.pumps; import java.util.ArrayList; import net.minecraft.src.*; @@ -48,14 +48,8 @@ public class BlockMachine extends BlockContainer //Per tick public int conductorCapacity() { - return 10; + return 1; } - 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 diff --git a/src/common/basicpipes/pumps/ItemMachine.java b/src/common/basicpipes/pumps/ItemMachine.java new file mode 100644 index 00000000..a8b37a81 --- /dev/null +++ b/src/common/basicpipes/pumps/ItemMachine.java @@ -0,0 +1,125 @@ +package basicpipes.pumps; + +import java.util.List; + +import basicpipes.BasicPipesMain; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemMachine extends ItemBlock +{ + int index = 26; + private int spawnID; + + public ItemMachine(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("Machine"); + this.setTabToDisplayOn(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() == 0 ? "Pump" :"Condenser"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 0)); + + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Machines"; + } + @Override + public boolean tryPlaceIntoWorld(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.machineID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + + } + + --itemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + +} \ No newline at end of file diff --git a/src/common/basicpipes/pipes/TileEntityCondenser.java b/src/common/basicpipes/pumps/TileEntityCondenser.java similarity index 99% rename from src/common/basicpipes/pipes/TileEntityCondenser.java rename to src/common/basicpipes/pumps/TileEntityCondenser.java index 0d042c99..951d8758 100644 --- a/src/common/basicpipes/pipes/TileEntityCondenser.java +++ b/src/common/basicpipes/pumps/TileEntityCondenser.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.pumps; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; diff --git a/src/common/basicpipes/pipes/TileEntityPump.java b/src/common/basicpipes/pumps/TileEntityPump.java similarity index 68% rename from src/common/basicpipes/pipes/TileEntityPump.java rename to src/common/basicpipes/pumps/TileEntityPump.java index 4c211851..f639e95a 100644 --- a/src/common/basicpipes/pipes/TileEntityPump.java +++ b/src/common/basicpipes/pumps/TileEntityPump.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.pumps; import basicpipes.TradeHelper; import basicpipes.pipes.api.ILiquidProducer; @@ -13,8 +13,9 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro int dCount = 0; float eStored = 0; float eMax = 2000; - int wStored = 0; + int lStored = 0; int wMax = 10; + public Liquid type = Liquid.DEFUALT; public TileEntity[] sList = {null,null,null,null,null,null}; private int count = 0; @Override @@ -35,6 +36,12 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro public void onUpdate(float watts, float voltage, ForgeDirection side) { super.onUpdate(watts, voltage, side); sList = TradeHelper.getSourounding(this); + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + Liquid bellow = Liquid.getLiquidByBlock(bBlock); + if(bellow != null && this.lStored <= 0) + { + this.type = bellow; + } if(!worldObj.isRemote) { count++; @@ -43,11 +50,11 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); } - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - if(bBlock == Block.waterStill.blockID && this.eStored > 500 && this.wStored < this.wMax && count>=2) + + if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax && count>=2) { - eStored -= 500; - wStored += 1; + eStored -= 200; + lStored += 1; worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); count = 0; } @@ -80,10 +87,10 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro @Override public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - if(type == Liquid.WATER && wStored > 0) + if(type == this.type && lStored > 0) { - int tradeW = Math.min(maxVol, wStored); - wStored -= tradeW; + int tradeW = Math.min(maxVol, lStored); + lStored -= tradeW; return tradeW; } return 0; @@ -91,7 +98,17 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro @Override public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER && side != ForgeDirection.DOWN) + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int facing = 0; + switch(meta) + { + case 0: facing = 2;break; + case 1: facing = 5;break; + case 2: facing = 3;break; + case 3: facing = 4;break; + } + + if(type == this.type && side != ForgeDirection.DOWN && side != ForgeDirection.UP && side != ForgeDirection.getOrientation(facing).getOpposite()) { return true; } @@ -103,13 +120,21 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro if(type == Liquid.WATER) { return 32; + }else + if(type == Liquid.LAVA) + { + return 10; + }else + if(type == this.type) + { + return 50; } return 0; } @Override public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) + if(type == this.type) { return true; } diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index 9fb72e9c..22c433af 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -3,7 +3,7 @@ package basicpipes; import steampower.SteamPowerMain; import basicpipes.PipeProxy; import basicpipes.pipes.TileEntityPipe; -import basicpipes.pipes.TileEntityPump; +import basicpipes.pumps.TileEntityPump; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.registry.GameRegistry; diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index f97a0f54..bfd0c678 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -57,6 +57,9 @@ public class RenderPipe extends TileEntitySpecialRenderer switch(type.ordinal()) { case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; + case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixWaterPipe.png");break; + case 2: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixLavaPipe.png");break; + case 3: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixOilPipe.png");break; default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; } if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); diff --git a/src/minecraft/basicpipes/RenderPump.java b/src/minecraft/basicpipes/RenderPump.java index dd652020..ca21ba12 100644 --- a/src/minecraft/basicpipes/RenderPump.java +++ b/src/minecraft/basicpipes/RenderPump.java @@ -6,7 +6,8 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import basicpipes.pipes.TileEntityPipe; -import basicpipes.pipes.TileEntityPump; +import basicpipes.pipes.api.Liquid; +import basicpipes.pumps.TileEntityPump; public class RenderPump extends TileEntitySpecialRenderer @@ -21,12 +22,27 @@ public class RenderPump extends TileEntitySpecialRenderer public void renderAModelAt(TileEntityPump tileEntity, double d, double d1, double d2, float f) { - - bindTextureByName(BasicPipesMain.textureFile+"/Pump.png"); + Liquid type = tileEntity.type; + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(type.ordinal()) + { + default: bindTextureByName("/textures/pumps/Pump.png");break; + //case 0://steam + case 1:bindTextureByName("/textures/pumps/WaterPump.png");break;//water + case 2:bindTextureByName("/textures/pumps/LavaPump.png");break;//lava + case 3:bindTextureByName("/textures/pumps/OilPump.png");break;//oil + //case 4://fuel + } GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - + 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } model.renderMain(0.0625F); model.renderC1(0.0625F); model.renderC2(0.0625F); diff --git a/src/minecraft/textures/CopperWire.png b/src/minecraft/textures/CopperWire.png deleted file mode 100644 index 5f4bb528d01814f47003ede29cf06b68de001a59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3196 zcmV-?41@EDP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 VQjG~4b)EnK002ovPDHLkV1iC8=0^Yk diff --git a/src/minecraft/textures/pipes/SixLavaPipe.png b/src/minecraft/textures/pipes/SixLavaPipe.png new file mode 100644 index 0000000000000000000000000000000000000000..85fc2dc80b585e8a39ad38f6b75190a9f28dcf1e GIT binary patch literal 796 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 VQv-q^vG)J~002ovPDHLkV1fs?P%8ic literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/pumps/LavaPump.png b/src/minecraft/textures/pumps/LavaPump.png new file mode 100644 index 0000000000000000000000000000000000000000..c0d9b0ab09d4fcd5793e0cf1b43052327da070a5 GIT binary patch literal 740 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!oZ=j2!ddRWHZU+SrFgnHhE&{o zd&e;Ewt)ykz$%Viq8z(YUkR`~eYkXY)n+O={m4g%<>0EN z4VyAQ?e(1Y@_^v}6aPIAhR#^AF27uH(Xz^QNq^@4{_1??z3I{O%jH8)9C79Qeja@!mYhG%QO>t7WMX4vT7FgtYa7xA1~>3g?)5h-|a@PwI%-&H;ahK}6Y z^1adbW8cSgehN9^ zX@h_hM}N5f!;i00KUErWHPo^DTdExvWMFhy$@t;#`R$R%=Ol`5_;PLiD}`L~-;;L! zi@iHf{@%;t^OHY_7@T=>`+D(ehO3P#6N-5n9v0l)H*YqJ7oTe5BnOMtf(dVUXFEGwLwyaeZdi!19dyN#Bzu?LDONW?Ogl%;uAGZfO-Q^0?2= zdR;?tYu%)}Uzbf*&vd#`vbyEgx2>KZ?fP#oUotK;tT;>IT#mrdG}C^unK&g#BTo=pC#)yY$LghW1J;9y{3U}9iAV42Qn z82K|Ob!Py>ku~4-L&cmKR#rFsEGSu?99)$vo1nS;ob)`a=hvr~^L?lhi|4AV{%u?JH*mv~x`0pymo5Kp z-+td-eK?y-mg(7+dx?^FYa4A36!6xcGi80wkYdL&ax$7BMI-_^~-&wLx-lplyl-~C0-@iid{=NRo{(WWm z|F`EZf1+^hec@>=ld2hH%CG-@ztMBSlK>$N&X(1$7}X{@>+b!gav?3?C}V=L2Y&;@ zf?Es*_qX#U$Sx=_YtBkH_TY1P3z7n9(5i0ed=lWj-j;KVWJn>y4W3KP3JfdE7|wiO z%N)V3G3V@pTQ_+oF$Yuwr6#d>F#&@U1L(bx6}*;P^LJ|LB#@k^tDnm{r-UW|pP)2G literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/pumps/Pump.png b/src/minecraft/textures/pumps/Pump.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4712087f17d30c5dd42f286ccf1cde0f48d0d0 GIT binary patch literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!oZ=j2raQdqeHj>-;yqm)Ln>~) zy>l?@wt)mgLgkdZY^m!nh+M9|zp(Ym1^2fLTi?o->8st;?m3jVyFy($dD1bxqD3C} z%Zp@|F1eQf^1te2EuWC<<+&XzGViUDs88Qq*Y#`fvWm*ubxvyQihihX+x;wf{_fbT z^MB>U-ru^B>BpUYEL~w|JAa8RXAqjf6n6jL*WJ>CRs_ z1{MbKNVa2o?~{V{)Fv^@czx37;Zy`{wNz@We&z`()a7s-0& ztUGvHF)=3)4z`+Z^tI9o)c+cu-KUAdg0WAOxOK4ikI`t@-Z;13}M_<`I007K<-!XB9jX=AXUIqh-P{ zr5Y5vN7)*x?prmKHk`T1W5jxcXA*Nj83T}F@nTwdLh!)_X|raP##*y{;}sVe0^Uh7 z3NVOBGrX#O&2Wv;DBbvkNP@8kpTkW?ASI;1$pTDY=)hw0e>qK;?GG1*cYvfkUHx3v IIVCg!00Z7KVE_OC literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/Pump.png b/src/minecraft/textures/pumps/WaterPump.png similarity index 100% rename from src/minecraft/textures/Pump.png rename to src/minecraft/textures/pumps/WaterPump.png From d41c6462492a4f1f0a0d5a937c8de62a99a40ac4 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 23 Sep 2012 07:29:19 -0400 Subject: [PATCH 082/115] Started work on valve should have this done this weekend and it will be a basic valve that denies connection of pipes when off. Version one will be by hand and version two by redstone. Both are start in the same block. --- src/common/basicpipes/BasicPipesMain.java | 6 + .../{ => pipes/api}/TradeHelper.java | 4 +- src/common/basicpipes/pumps/BlockMachine.java | 19 +- src/common/basicpipes/pumps/BlockValve.java | 179 ++++++++++++++++++ src/common/basicpipes/pumps/ItemMachine.java | 3 +- src/common/basicpipes/pumps/ItemValve.java | 126 ++++++++++++ .../basicpipes/pumps/TileEntityPump.java | 2 +- .../basicpipes/pumps/TileEntityValve.java | 110 +++++++++++ 8 files changed, 442 insertions(+), 7 deletions(-) rename src/common/basicpipes/{ => pipes/api}/TradeHelper.java (98%) create mode 100644 src/common/basicpipes/pumps/BlockValve.java create mode 100644 src/common/basicpipes/pumps/ItemValve.java create mode 100644 src/common/basicpipes/pumps/TileEntityValve.java diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 3063e8e3..c687ae2d 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -7,6 +7,7 @@ import basicpipes.pipes.ItemParts; import basicpipes.pipes.ItemPipe; import basicpipes.pipes.api.Liquid; import basicpipes.pumps.BlockMachine; +import basicpipes.pumps.BlockValve; import basicpipes.pumps.TileEntityPump; import net.minecraft.client.Minecraft; @@ -43,20 +44,25 @@ public class BasicPipesMain{ private static int ppipeID; public static int machineID; private static int toolID; + public static int valveID; public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); public static Block machine = new BlockMachine(machineID).setBlockName("pump"); + public static Block valve = new BlockValve(valveID).setBlockName("valve"); public static Item parts = new ItemParts(partID); public static Item itemPipes = new ItemPipe(ppipeID); public static Item gauge = new ItemGuage(toolID); public static String channel = "Pipes"; public static String textureFile = "/textures"; + + public static int configurationProperties() { config.load(); pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); + valveID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 157).value); partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); toolID = Integer.parseInt(config.getOrCreateIntProperty("ToolID", Configuration.CATEGORY_ITEM, 23024).value); diff --git a/src/common/basicpipes/TradeHelper.java b/src/common/basicpipes/pipes/api/TradeHelper.java similarity index 98% rename from src/common/basicpipes/TradeHelper.java rename to src/common/basicpipes/pipes/api/TradeHelper.java index 408ace1d..ace51578 100644 --- a/src/common/basicpipes/TradeHelper.java +++ b/src/common/basicpipes/pipes/api/TradeHelper.java @@ -1,7 +1,5 @@ -package basicpipes; +package basicpipes.pipes.api; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.Liquid; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; diff --git a/src/common/basicpipes/pumps/BlockMachine.java b/src/common/basicpipes/pumps/BlockMachine.java index b37d5f2a..057afb72 100644 --- a/src/common/basicpipes/pumps/BlockMachine.java +++ b/src/common/basicpipes/pumps/BlockMachine.java @@ -26,8 +26,7 @@ public class BlockMachine extends BlockContainer public boolean renderAsNormalBlock() { - //TODO change later when custom models are added - return true; + return false; } /** @@ -43,6 +42,18 @@ public class BlockMachine extends BlockContainer */ public int idDropped(int par1, Random par2Random, int par3) { + return this.blockID; + } + protected int damageDropped(int meta) + { + if(meta < 4) + { + return 0; + } + if(meta > 3 && meta < 8) + { + return 4; + } return 0; } //Per tick @@ -60,6 +71,10 @@ public class BlockMachine extends BlockContainer if(meta > 3 && meta < 8) { return new TileEntityCondenser(); + } + if(meta > 7 && meta < 12) + { + return new TileEntityValve(); } return null; } diff --git a/src/common/basicpipes/pumps/BlockValve.java b/src/common/basicpipes/pumps/BlockValve.java new file mode 100644 index 00000000..30d8db2a --- /dev/null +++ b/src/common/basicpipes/pumps/BlockValve.java @@ -0,0 +1,179 @@ +package basicpipes.pumps; + +import java.util.ArrayList; +import net.minecraft.src.*; + +import java.util.Random; + +import universalelectricity.UniversalElectricity; + +import basicpipes.BasicPipesMain; + +public class BlockValve extends universalelectricity.extend.BlockMachine +{ + + public BlockValve(int id) + { + super("Valve", id, Material.iron); + this.setBlockName("Valve"); + this.setCreativeTab(CreativeTabs.tabRedstone); + this.setRequiresSelfNotify(); + this.blockIndexInTexture = 26; + } + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) + { + TileEntity te = world.getBlockTileEntity(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + if(te instanceof TileEntityValve) + { + TileEntityValve valve = (TileEntityValve) te; + if(meta < 8) + { + if(!valve.on){ + valve.on = true; + }else{ + valve.on = false; + } + } + } + return false; + } + //rotation valve around y axis + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer player) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + if(meta == 3) + { + world.setBlockMetadataWithNotify(x, y, z, 0); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 3 && meta < 8) + { + if(meta == 7) + { + world.setBlockMetadataWithNotify(x, y, z, 4); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 7 && meta < 12) + { + if(meta == 11) + { + world.setBlockMetadataWithNotify(x, y, z, 8); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 11 && meta < 16) + { + if(meta == 15) + { + world.setBlockMetadataWithNotify(x, y, z, 12); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + return false; + } + + //one shift click inverts pipe to face up + public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer player) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + world.setBlockMetadataWithNotify(x, y, z, meta+4); + return true; + } + if(meta > 3 && meta < 8) + { + world.setBlockMetadataWithNotify(x, y, z, meta-4); + return true; + } + if(meta > 7 && meta < 12) + { + + world.setBlockMetadataWithNotify(x, y, z, meta+4); + + return true; + } + if(meta > 11 && meta < 16) + { + + world.setBlockMetadataWithNotify(x, y, z, meta-4); + + return true; + } + return false; + } + public boolean isOpaqueCube() + { + return false; + } + + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return this.blockID; + } + protected int damageDropped(int meta) + { + if(meta < 8) + { + return 0; + } + if(meta < 16 && meta > 7) + { + return 4; + } + return 0; + } + //Per tick + public int conductorCapacity() + { + return 1; + } + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return new TileEntityValve(); + } + @Override + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + } + + diff --git a/src/common/basicpipes/pumps/ItemMachine.java b/src/common/basicpipes/pumps/ItemMachine.java index a8b37a81..39e8778a 100644 --- a/src/common/basicpipes/pumps/ItemMachine.java +++ b/src/common/basicpipes/pumps/ItemMachine.java @@ -37,13 +37,14 @@ public class ItemMachine extends ItemBlock @Override public String getItemNameIS(ItemStack itemstack) { - return itemstack.getItemDamage() == 0 ? "Pump" :"Condenser"; + return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) { par3List.add(new ItemStack(this, 1, 0)); + par3List.add(new ItemStack(this, 1, 4)); } public String getTextureFile() { diff --git a/src/common/basicpipes/pumps/ItemValve.java b/src/common/basicpipes/pumps/ItemValve.java new file mode 100644 index 00000000..7fd029a5 --- /dev/null +++ b/src/common/basicpipes/pumps/ItemValve.java @@ -0,0 +1,126 @@ +package basicpipes.pumps; + +import java.util.List; + +import basicpipes.BasicPipesMain; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemValve extends ItemBlock +{ + int index = 26; + private int spawnID; + + public ItemValve(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("Machine"); + this.setTabToDisplayOn(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 0)); + par3List.add(new ItemStack(this, 1, 4)); + + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Machines"; + } + @Override + public boolean tryPlaceIntoWorld(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.valveID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + + } + + --itemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + +} \ No newline at end of file diff --git a/src/common/basicpipes/pumps/TileEntityPump.java b/src/common/basicpipes/pumps/TileEntityPump.java index f639e95a..974596c0 100644 --- a/src/common/basicpipes/pumps/TileEntityPump.java +++ b/src/common/basicpipes/pumps/TileEntityPump.java @@ -1,8 +1,8 @@ package basicpipes.pumps; -import basicpipes.TradeHelper; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.TradeHelper; import net.minecraft.src.Block; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; diff --git a/src/common/basicpipes/pumps/TileEntityValve.java b/src/common/basicpipes/pumps/TileEntityValve.java new file mode 100644 index 00000000..1e02ac8f --- /dev/null +++ b/src/common/basicpipes/pumps/TileEntityValve.java @@ -0,0 +1,110 @@ +package basicpipes.pumps; + +import universalelectricity.Vector3; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.TradeHelper; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import basicpipes.pipes.TileEntityPipe; + +public class TileEntityValve extends TileEntity implements ILiquidConsumer { +Liquid type = Liquid.DEFUALT; +int liquidStored = 0; +int lMax = 1; +int tickCount = 0; +TileEntity[] connected = {null,null,null,null,null,null}; +boolean on = false; + @Override + public void updateEntity() + { + tickCount++; + if(tickCount >= 10) + { + int deltaX = 0; + int deltaZ = 0; + int deltaY = 0; + int facing = 0; + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + if(meta == 0 && meta == 8) + { + facing = 2; + } + if(meta == 1 && meta == 9) + { + facing = 5; + } + if(meta == 2 && meta == 10) + { + facing = 3; + } + if(meta == 3 && meta == 11) + { + facing = 4; + } + if((meta > 3 && meta < 8)&&(meta> 11 && meta < 16)) + { + facing = 0; + } + switch(facing) + { + case 0: deltaY++;break; + case 1: deltaY--;break; + case 2: deltaZ--;break; + case 5: deltaZ++;break; + case 3: deltaX--;break; + case 4: deltaX++;break; + } + + connected = TradeHelper.getSourounding(this); + for(int i = 0;i<6;i++) + { + if(!(connected[i] instanceof TileEntityPipe)) + { + connected[i] = null; + } + } + if(!worldObj.isRemote) + { + //TODO send packet + } + tickCount = 0; + } + } + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(this.type == Liquid.DEFUALT) + { + this.type = type; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { + if(type == this.type) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == this.type) + { + return liquidStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == this.type) + { + return lMax; + } + return 0; + } + +} From 22b872c5578ee1d1b03dfa15f92409a4045c305f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 25 Sep 2012 09:40:09 -0400 Subject: [PATCH 083/115] config fix --- src/common/basicpipes/BasicPipesMain.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index c687ae2d..5b342243 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -62,7 +62,7 @@ public class BasicPipesMain{ config.load(); pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); - valveID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 157).value); + valveID = Integer.parseInt(config.getOrCreateIntProperty("ValveBlock", Configuration.CATEGORY_BLOCK, 157).value); partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); toolID = Integer.parseInt(config.getOrCreateIntProperty("ToolID", Configuration.CATEGORY_ITEM, 23024).value); From 241424ceb55996b2a37f7055df911248eb0d1d65 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 25 Sep 2012 13:23:40 -0400 Subject: [PATCH 084/115] Updating for UE 8.5 lite and forge 4.1 Still have work to do but mostly done --- src/common/basicpipes/BasicPipesMain.java | 31 +++++----- src/common/basicpipes/pipes/ItemGuage.java | 9 +-- src/common/basicpipes/pipes/ItemParts.java | 7 +-- src/common/basicpipes/pipes/ItemPipe.java | 4 +- .../basicpipes/pipes/TileEntityPipe.java | 1 - src/common/basicpipes/pipes/api/Liquid.java | 4 +- src/common/basicpipes/pumps/BlockMachine.java | 8 ++- src/common/basicpipes/pumps/BlockValve.java | 2 +- src/common/basicpipes/pumps/ItemMachine.java | 8 +-- src/common/basicpipes/pumps/ItemValve.java | 4 +- .../basicpipes/pumps/TileEntityCondenser.java | 57 +++++++++---------- .../basicpipes/pumps/TileEntityPump.java | 54 ++++++++---------- .../basicpipes/pumps/TileEntityValve.java | 7 +-- src/common/steampower/BlockMachine.java | 2 +- src/common/steampower/ItemMachine.java | 2 +- src/common/steampower/SteamPowerMain.java | 22 ++++--- src/common/steampower/TileEntityMachine.java | 39 +++++++------ src/common/steampower/TileEntityNuller.java | 16 +++--- .../steampower/boiler/TileEntityBoiler.java | 16 +++--- .../steampower/burner/TileEntityFireBox.java | 8 ++- .../steampower/turbine/BlockGenerator.java | 2 +- .../steampower/turbine/BlockSteamPiston.java | 2 +- src/common/steampower/turbine/ItemEngine.java | 6 +- .../steampower/turbine/TileEntityGen.java | 14 +---- .../turbine/TileEntitySteamPiston.java | 26 ++++----- .../steampower/turbine/TileEntitytopGen.java | 7 +-- 26 files changed, 176 insertions(+), 182 deletions(-) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 5b342243..8b37d86a 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -1,6 +1,12 @@ package basicpipes; 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 universalelectricity.BasicComponents; +import universalelectricity.network.PacketManager; import basicpipes.pipes.BlockPipe; import basicpipes.pipes.ItemGuage; import basicpipes.pipes.ItemParts; @@ -8,18 +14,8 @@ import basicpipes.pipes.ItemPipe; import basicpipes.pipes.api.Liquid; import basicpipes.pumps.BlockMachine; import basicpipes.pumps.BlockValve; -import basicpipes.pumps.TileEntityPump; - -import net.minecraft.client.Minecraft; -import net.minecraft.src.Block; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import universalelectricity.basiccomponents.BasicComponents; -import universalelectricity.network.PacketManager; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; -import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.SidedProxy; @@ -105,14 +101,11 @@ public class BasicPipesMain{ public void postInit(FMLPostInitializationEvent event) { proxy.postInit(); - GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube GameRegistry.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@',Item.ingotIron});//iron tube GameRegistry.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@@", '@',Block.obsidian});//obby Tube GameRegistry.addRecipe(new ItemStack(parts, 2,3), new Object[] { "N@N", 'N',Block.netherrack,'@',new ItemStack(parts, 2,2)});//nether tube GameRegistry.addRecipe(new ItemStack(parts, 2,4), new Object[] { "@@","@@", '@',Item.leather});//seal GameRegistry.addShapelessRecipe(new ItemStack(parts, 1,5), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Item.slimeBall, 1)});//stick seal - GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank - GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve //crafting pipes //{"black", "red", "green", "brown", "blue", "purple", "cyan", //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; @@ -126,6 +119,12 @@ public class BasicPipesMain{ GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); //fuel GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve + + try{ + GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube + + GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank //pump GameRegistry.addRecipe(new ItemStack(machine, 1,0), new Object[] { "@T@","BPB","@M@" @@ -137,5 +136,11 @@ public class BasicPipesMain{ , 'T',new ItemStack(parts, 1,6) }); } + catch(Exception e) + { + e.printStackTrace(); + System.out.print("UE based recipes not loaded"); + } + } } diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/pipes/ItemGuage.java index 9d8364ab..22272389 100644 --- a/src/common/basicpipes/pipes/ItemGuage.java +++ b/src/common/basicpipes/pipes/ItemGuage.java @@ -19,7 +19,7 @@ public class ItemGuage extends Item this.setHasSubtypes(true); this.setIconIndex(10); this.setItemName("guage"); - this.setTabToDisplayOn(CreativeTabs.tabTools); + this.setCreativeTab(CreativeTabs.tabTools); } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) @@ -43,11 +43,12 @@ public class ItemGuage extends Item { return "guage"; } - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + @Override + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { if(!par3World.isRemote) { - if(par1ItemStack.getItemDamage() == 0) + if(itemStack.getItemDamage() == 0) { TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); if(blockEntity instanceof TileEntityPipe) @@ -61,7 +62,7 @@ public class ItemGuage extends Item print = typeName +" " + steam +" @ "+pressure+"PSI"; - par2EntityPlayer.addChatMessage(print); + player.addChatMessage(print); return true; } } diff --git a/src/common/basicpipes/pipes/ItemParts.java b/src/common/basicpipes/pipes/ItemParts.java index c9d1a1b4..274f1c71 100644 --- a/src/common/basicpipes/pipes/ItemParts.java +++ b/src/common/basicpipes/pipes/ItemParts.java @@ -21,7 +21,7 @@ public class ItemParts extends Item{ this.setHasSubtypes(true); this.setMaxDamage(0); this.setMaxStackSize(64); - this.setTabToDisplayOn(CreativeTabs.tabMaterials); + this.setCreativeTab(CreativeTabs.tabMaterials); } @Override public int getIconFromDamage(int par1) @@ -45,11 +45,6 @@ public class ItemParts extends Item{ par3List.add(new ItemStack(this, 1, i)); } } - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - //TODO add block place event for some items like valves,tanks - return false; - } public String getTextureFile() { return BasicPipesMain.textureFile+"/Items.png"; } diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/pipes/ItemPipe.java index 118c5b3f..e623a0d5 100644 --- a/src/common/basicpipes/pipes/ItemPipe.java +++ b/src/common/basicpipes/pipes/ItemPipe.java @@ -26,7 +26,7 @@ public class ItemPipe extends Item this.setHasSubtypes(true); this.setIconIndex(10); this.setItemName("pipe"); - this.setTabToDisplayOn(CreativeTabs.tabRedstone); + this.setCreativeTab(CreativeTabs.tabRedstone); } @Override public int getIconFromDamage(int par1) @@ -56,7 +56,7 @@ public class ItemPipe extends Item return "Pipes"; } @Override - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { int blockID = par3World.getBlockId(par4, par5, par6); spawnID = BasicPipesMain.pipeID; diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/pipes/TileEntityPipe.java index 4e037ad4..b4ab4046 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/pipes/TileEntityPipe.java @@ -5,7 +5,6 @@ import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import universalelectricity.Vector3; import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; import basicpipes.pipes.api.ILiquidConsumer; diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/src/common/basicpipes/pipes/api/Liquid.java index e8c6f5f5..881033b9 100644 --- a/src/common/basicpipes/pipes/api/Liquid.java +++ b/src/common/basicpipes/pipes/api/Liquid.java @@ -1,9 +1,7 @@ package basicpipes.pipes.api; -import universalelectricity.basiccomponents.BasicComponents; import net.minecraft.src.Block; -import net.minecraftforge.common.ForgeDirection; /** * System too easily reference a liquid type and its info * @author Rseifert @@ -14,7 +12,7 @@ public enum Liquid { STEAM("Steam",false,true,-1,-1), WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID), LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID), - OIL("Oil",true,false,BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), + OIL("Oil",true,false,-1,-1),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), Fuel("Fuel",true,false,-1,-1), Air("Air",false,true,0,-1), Methain("Methain",true,true,-1,-1), diff --git a/src/common/basicpipes/pumps/BlockMachine.java b/src/common/basicpipes/pumps/BlockMachine.java index 057afb72..cba024bf 100644 --- a/src/common/basicpipes/pumps/BlockMachine.java +++ b/src/common/basicpipes/pumps/BlockMachine.java @@ -1,10 +1,12 @@ package basicpipes.pumps; -import java.util.ArrayList; -import net.minecraft.src.*; - import java.util.Random; +import net.minecraft.src.BlockContainer; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import basicpipes.BasicPipesMain; public class BlockMachine extends BlockContainer diff --git a/src/common/basicpipes/pumps/BlockValve.java b/src/common/basicpipes/pumps/BlockValve.java index 30d8db2a..062a35be 100644 --- a/src/common/basicpipes/pumps/BlockValve.java +++ b/src/common/basicpipes/pumps/BlockValve.java @@ -9,7 +9,7 @@ import universalelectricity.UniversalElectricity; import basicpipes.BasicPipesMain; -public class BlockValve extends universalelectricity.extend.BlockMachine +public class BlockValve extends universalelectricity.prefab.BlockMachine { public BlockValve(int id) diff --git a/src/common/basicpipes/pumps/ItemMachine.java b/src/common/basicpipes/pumps/ItemMachine.java index 39e8778a..6639d072 100644 --- a/src/common/basicpipes/pumps/ItemMachine.java +++ b/src/common/basicpipes/pumps/ItemMachine.java @@ -2,17 +2,15 @@ package basicpipes.pumps; import java.util.List; -import basicpipes.BasicPipesMain; - import net.minecraft.src.Block; import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; import net.minecraft.src.ItemBlock; import net.minecraft.src.ItemStack; import net.minecraft.src.MathHelper; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import basicpipes.BasicPipesMain; public class ItemMachine extends ItemBlock { @@ -26,7 +24,7 @@ public class ItemMachine extends ItemBlock this.setHasSubtypes(true); this.setIconIndex(10); this.setItemName("Machine"); - this.setTabToDisplayOn(CreativeTabs.tabRedstone); + this.setCreativeTab(CreativeTabs.tabRedstone); } @Override public int getIconFromDamage(int par1) @@ -56,7 +54,7 @@ public class ItemMachine extends ItemBlock return "Machines"; } @Override - public boolean tryPlaceIntoWorld(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { int blockID = par3World.getBlockId(par4, par5, par6); spawnID = BasicPipesMain.machineID; diff --git a/src/common/basicpipes/pumps/ItemValve.java b/src/common/basicpipes/pumps/ItemValve.java index 7fd029a5..b4b7ed72 100644 --- a/src/common/basicpipes/pumps/ItemValve.java +++ b/src/common/basicpipes/pumps/ItemValve.java @@ -26,7 +26,7 @@ public class ItemValve extends ItemBlock this.setHasSubtypes(true); this.setIconIndex(10); this.setItemName("Machine"); - this.setTabToDisplayOn(CreativeTabs.tabRedstone); + this.setCreativeTab(CreativeTabs.tabRedstone); } @Override public int getIconFromDamage(int par1) @@ -56,7 +56,7 @@ public class ItemValve extends ItemBlock return "Machines"; } @Override - public boolean tryPlaceIntoWorld(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { int blockID = par3World.getBlockId(par4, par5, par6); spawnID = BasicPipesMain.valveID; diff --git a/src/common/basicpipes/pumps/TileEntityCondenser.java b/src/common/basicpipes/pumps/TileEntityCondenser.java index 951d8758..2e1a2469 100644 --- a/src/common/basicpipes/pumps/TileEntityCondenser.java +++ b/src/common/basicpipes/pumps/TileEntityCondenser.java @@ -1,13 +1,13 @@ package basicpipes.pumps; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; +import universalelectricity.implement.IElectricityReceiver; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import universalelectricity.extend.IElectricUnit; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; -public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricUnit { +public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricityReceiver { int tickCount = 0; int waterStored = 0; int energyStored = 0; @@ -36,7 +36,11 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, } public void updateEntity() { - + if(energyStored > 100 && waterStored < 3) + { + energyStored -= 100; + waterStored += 1; + } } @Override public boolean canProduceLiquid(Liquid type, ForgeDirection side) { @@ -57,40 +61,17 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, return false; } @Override - public void onUpdate(float amps, float voltage, ForgeDirection side) { - // TODO Auto-generated method stub - if(energyStored > 100 && waterStored < 10) - { - energyStored -= 100; - waterStored += 1; - } - } - @Override - public float ampRequest() { + public double wattRequest() { // TODO Auto-generated method stub return 0; } - @Override - public boolean canConnect(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } + @Override public boolean canReceiveFromSide(ForgeDirection side) { // TODO Auto-generated method stub return false; } @Override - public float getVoltage() { - // TODO Auto-generated method stub - return 0; - } - @Override - public int getTickInterval() { - // TODO Auto-generated method stub - return 20; - } - @Override public int presureOutput(Liquid type, ForgeDirection side) { if(type == Liquid.WATER) { @@ -106,6 +87,22 @@ public class TileEntityCondenser extends TileEntity implements ILiquidProducer, } return false; } + @Override + public boolean canConnect(ForgeDirection side) { + // TODO Auto-generated method stub + return true; + } + @Override + public double getVoltage() { + // TODO Auto-generated method stub + return 120; + } + @Override + public void onReceive(TileEntity sender, double amps, double voltage, + ForgeDirection side) { + // TODO Auto-generated method stub + + } diff --git a/src/common/basicpipes/pumps/TileEntityPump.java b/src/common/basicpipes/pumps/TileEntityPump.java index 974596c0..1274577a 100644 --- a/src/common/basicpipes/pumps/TileEntityPump.java +++ b/src/common/basicpipes/pumps/TileEntityPump.java @@ -1,15 +1,14 @@ package basicpipes.pumps; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.implement.IElectricityReceiver; +import universalelectricity.prefab.TileEntityElectricityReceiver; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; import basicpipes.pipes.api.TradeHelper; -import net.minecraft.src.Block; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.electricity.TileEntityElectricUnit; -import universalelectricity.extend.IElectricUnit; -public class TileEntityPump extends TileEntityElectricUnit implements ILiquidProducer,IElectricUnit { +public class TileEntityPump extends TileEntityElectricityReceiver implements ILiquidProducer,IElectricityReceiver { int dCount = 0; float eStored = 0; float eMax = 2000; @@ -33,8 +32,8 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } @Override - public void onUpdate(float watts, float voltage, ForgeDirection side) { - super.onUpdate(watts, voltage, side); + public void updateEntity() { + super.updateEntity(); sList = TradeHelper.getSourounding(this); int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); Liquid bellow = Liquid.getLiquidByBlock(bBlock); @@ -45,13 +44,9 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro if(!worldObj.isRemote) { count++; - if (ampRequest() > 0 && canConnect(side)) - { - float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); - this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); - } - if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax && count>=2) + + if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax && count>=20) { eStored -= 200; lStored += 1; @@ -62,10 +57,6 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } - @Override - public float ampRequest() { - return Math.max(eMax - eStored,0); - } @Override public boolean canReceiveFromSide(ForgeDirection side) { if(side != ForgeDirection.DOWN) @@ -74,17 +65,6 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } return false; } - - @Override - public float getVoltage() { - return 240; - } - - @Override - public int getTickInterval() { - return 10; - } - @Override public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { if(type == this.type && lStored > 0) @@ -140,4 +120,20 @@ public class TileEntityPump extends TileEntityElectricUnit implements ILiquidPro } return false; } + + @Override + public void onReceive(TileEntity sender, double watts, double voltage, + ForgeDirection side) { + if (wattRequest() > 0 && canConnect(side)) + { + float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); + this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); + } + + } + + @Override + public double wattRequest() { + return Math.max(eMax - eStored,0); + } } diff --git a/src/common/basicpipes/pumps/TileEntityValve.java b/src/common/basicpipes/pumps/TileEntityValve.java index 1e02ac8f..efecb80b 100644 --- a/src/common/basicpipes/pumps/TileEntityValve.java +++ b/src/common/basicpipes/pumps/TileEntityValve.java @@ -1,12 +1,11 @@ package basicpipes.pumps; -import universalelectricity.Vector3; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.TradeHelper; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import basicpipes.pipes.TileEntityPipe; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.TradeHelper; public class TileEntityValve extends TileEntity implements ILiquidConsumer { Liquid type = Liquid.DEFUALT; diff --git a/src/common/steampower/BlockMachine.java b/src/common/steampower/BlockMachine.java index 9c89dfea..d1ab06e8 100644 --- a/src/common/steampower/BlockMachine.java +++ b/src/common/steampower/BlockMachine.java @@ -15,7 +15,7 @@ import net.minecraft.src.World; import steampower.boiler.TileEntityBoiler; import steampower.burner.TileEntityFireBox; -public class BlockMachine extends universalelectricity.extend.BlockMachine +public class BlockMachine extends universalelectricity.prefab.BlockMachine { private Random furnaceRand = new Random(); diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java index 73ddf712..9371c923 100644 --- a/src/common/steampower/ItemMachine.java +++ b/src/common/steampower/ItemMachine.java @@ -11,7 +11,7 @@ public class ItemMachine extends ItemBlock { setMaxDamage(0); setHasSubtypes(true); this.setIconIndex(21); - this.setTabToDisplayOn(CreativeTabs.tabBlock); + this.setCreativeTab(CreativeTabs.tabBlock); } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 546bb31c..57cc2973 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -1,8 +1,6 @@ package steampower; import java.io.File; -import basicpipes.BasicPipesMain; - import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; @@ -11,11 +9,11 @@ import steampower.turbine.BlockGenerator; import steampower.turbine.BlockSteamPiston; import steampower.turbine.ItemEngine; import steampower.turbine.TileEntitytopGen; -import universalelectricity.basiccomponents.BasicComponents; +import universalelectricity.BasicComponents; import universalelectricity.network.PacketManager; +import basicpipes.BasicPipesMain; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; -import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.SidedProxy; @@ -96,14 +94,15 @@ public class SteamPowerMain{ proxy.postInit(); //Crafting - /** - * case 0: return new TileEntityGrinder(); <-Removed + try{ + /** + case 0: return new TileEntityGrinder(); <-Removed case 1: return new TileEntityBoiler(); case 2: return new TileEntityFireBox(); case 3: return new TileEntityGenerator(); case 14: return new TileEntityCondenser();<-Removed - case 15: return new TileEntityNuller();<-Just for testing Not craftable - */ + case 15: return new TileEntityNuller();<-Just for testing Not craftable*/ + GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", 'T',new ItemStack(BasicPipesMain.parts, 1,6), '@',new ItemStack(BasicComponents.itemSteelPlate), @@ -116,7 +115,12 @@ public class SteamPowerMain{ 'T',new ItemStack(BasicPipesMain.parts, 1,0), '@',new ItemStack(BasicComponents.itemSteelPlate), 'P',Block.pistonBase, - 'M',new ItemStack(BasicComponents.itemMotor)}); + 'M',new ItemStack(BasicComponents.itemMotor)});} + catch(Exception e) + { + e.printStackTrace(); + System.out.print("UE based recipes not loaded"); + } } } diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index bb934439..fed78970 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -1,15 +1,16 @@ package steampower; -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.electricity.TileEntityElectricUnit; -import universalelectricity.extend.IRotatable; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import net.minecraft.src.*; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; -public class TileEntityMachine extends TileEntityElectricUnit implements IInventory, ISidedInventory +import universalelectricity.network.PacketManager; +import universalelectricity.prefab.TileEntityElectricityReceiver; +public class TileEntityMachine extends TileEntityElectricityReceiver implements IInventory, ISidedInventory { public int facing = 0; private int count = 0; @@ -75,13 +76,6 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven //vars this.facing = par1NBTTagCompound.getInteger("facing"); } - - @Override - public float ampRequest() { - // TODO Auto-generated method stub - return 0; - } - @Override public boolean canReceiveFromSide(ForgeDirection side) { // TODO Auto-generated method stub @@ -125,9 +119,9 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven return 0; } - public void onUpdate(float watts, float voltage, ForgeDirection side) + public void updateEntity() { - super.onUpdate(watts, voltage, side); + super.updateEntity(); if(!worldObj.isRemote) { @@ -255,4 +249,15 @@ public class TileEntityMachine extends TileEntityElectricUnit implements IInven // 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 index b8a794d5..0a031810 100644 --- a/src/common/steampower/TileEntityNuller.java +++ b/src/common/steampower/TileEntityNuller.java @@ -1,21 +1,21 @@ package steampower; import net.minecraftforge.common.ForgeDirection; -import universalelectricity.extend.IElectricUnit; +import universalelectricity.implement.IElectricityReceiver; -public class TileEntityNuller extends TileEntityMachine implements IElectricUnit { - @Override - public float ampRequest() - { - return 200; - } +public class TileEntityNuller extends TileEntityMachine implements IElectricityReceiver { + @Override public boolean canReceiveFromSide(ForgeDirection side) { return true; } + public double wattRequest() + { + return 400; + } @Override - public float getVoltage() + public double getVoltage() { return 1000; } diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index c55cda38..22f49ae9 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -117,9 +117,10 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv * ticks and creates a new spawn inside its implementation. */ @Override - public void onUpdate(float watts, float voltage, ForgeDirection side) + public void updateEntity() { - + if(count++ >=20){ + count = 0; //update/resets connection list TileEntity[] entityList = TradeHelper.getSourounding(this); tankCount = 0; @@ -155,15 +156,13 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv if(!worldObj.isRemote) { - count++; + emptyBuckets(); - if(count >= 16) - { + //adds water from container slot this.waterStored = TradeHelper.shareLiquid(this, Liquid.WATER, false); this.steamStored = TradeHelper.shareLiquid(this, Liquid.STEAM, true); - count = 0; - } + if(waterStored > 0 && hullHeated && heatStored > heatNeeded) { @@ -184,7 +183,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv heatStored += (int) Math.min((int)(random.nextDouble()*10)*getTickInterval(), heatMax); } } - super.onUpdate(watts, voltage, side); + super.updateEntity(); + } } private void emptyBuckets() { diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 6a98435f..00db57e3 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -40,9 +40,12 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei return 5; } - public void onUpdate(float watts, float voltage, ForgeDirection side) + public void updateEntity() { - super.onUpdate(watts, voltage, side); + super.updateEntity(); + if(count++ >= 10) + { + count = 0; addConnection(); if(!worldObj.isRemote) { @@ -90,6 +93,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei { this.generateRate = Math.max(this.generateRate-5, 0); } + } } //gets all connected fireBoxes and shares its supply of coal diff --git a/src/common/steampower/turbine/BlockGenerator.java b/src/common/steampower/turbine/BlockGenerator.java index 2575f7d1..cc4017e0 100644 --- a/src/common/steampower/turbine/BlockGenerator.java +++ b/src/common/steampower/turbine/BlockGenerator.java @@ -8,7 +8,7 @@ import net.minecraft.src.Material; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -public class BlockGenerator extends universalelectricity.extend.BlockMachine { +public class BlockGenerator extends universalelectricity.prefab.BlockMachine { public BlockGenerator(int id) { super("Generator", id, Material.iron); diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java index 8792c4c4..d5684180 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -11,7 +11,7 @@ import net.minecraft.src.World; import steampower.SteamPowerMain; import steampower.TileEntityMachine; -public class BlockSteamPiston extends universalelectricity.extend.BlockMachine{ +public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine{ public BlockSteamPiston(int par1) { super("SteamEngine", par1, Material.iron); diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 85189835..be2e7ba1 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -16,7 +16,7 @@ public class ItemEngine extends Item { super(par1); this.maxStackSize = 5; - this.setTabToDisplayOn(CreativeTabs.tabBlock); + this.setCreativeTab(CreativeTabs.tabBlock); this.setIconIndex(21); } @Override @@ -30,7 +30,7 @@ public class ItemEngine extends Item return SteamPowerMain.textureFile+"Items.png"; } @Override - public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) { if (par3World.isRemote) { @@ -51,7 +51,7 @@ public class ItemEngine extends Item par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); par3World.editingBlocks = false; - --par1ItemStack.stackSize; + --itemStack.stackSize; return true; } } diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index 0817f203..89a3800a 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -5,12 +5,11 @@ import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraftforge.common.ForgeDirection; import steampower.TileEntityMachine; -import universalelectricity.extend.IElectricUnit; import universalelectricity.network.IPacketReceiver; import com.google.common.io.ByteArrayDataInput; -public class TileEntityGen extends TileEntityMachine implements IPacketReceiver,IElectricUnit +public class TileEntityGen extends TileEntityMachine implements IPacketReceiver { @Override @@ -20,14 +19,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, // TODO Auto-generated method stub } - public void onUpdate(float watts, float voltage, ForgeDirection side) - { - super.onUpdate(watts, voltage, side); - if(!worldObj.isRemote) - { - - } - } + public float electricityRequest() @@ -49,7 +41,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, { return false; } - public float getVoltage() + public double getVoltage() { return 120; } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index ecc3be2a..0c68fd10 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -11,20 +11,18 @@ import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; -import steampower.SteamPowerMain; import steampower.TileEntityMachine; -import universalelectricity.Vector3; import universalelectricity.electricity.ElectricityManager; -import universalelectricity.extend.IElectricUnit; -import universalelectricity.extend.TileEntityConductor; import universalelectricity.network.IPacketReceiver; +import universalelectricity.prefab.TileEntityConductor; +import universalelectricity.prefab.Vector3; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IElectricUnit,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory { //Maximum possible generation rate of watts in SECONDS public int maxGenerateRate = 1000; @@ -61,10 +59,12 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. */ - public void onUpdate(float watts, float voltage, ForgeDirection side) + public void updateEntity() { - super.onUpdate(watts, voltage, side); - count++; + super.updateEntity(); + if(count++ >= 10){ + count = 0; + float cPercent = (generateRate/10); int cCount = 1; if(cPercent > 25f) @@ -98,7 +98,6 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { posT = true; } - count =0; } TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); if(ent instanceof TileEntitytopGen) @@ -110,11 +109,11 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR //Check nearby blocks and see if the conductor is full. If so, then it is connected for(int i = 0;i<6;i++) { - TileEntity tileEntity = Vector3.getUEUnitFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), + TileEntity tileEntity = Vector3.getConnectorFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), ForgeDirection.getOrientation(i)); if (tileEntity instanceof TileEntityConductor) { - if (ElectricityManager.instance.electricityRequired(((TileEntityConductor)tileEntity).connectionID) > 0) + if (ElectricityManager.instance.getElectricityRequired(((TileEntityConductor)tileEntity).getConnectionID()) > 0) { this.connectedElectricUnit = (TileEntityConductor)tileEntity; } @@ -174,10 +173,11 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR if(this.generateRate > 1) { - ElectricityManager.instance.produceElectricity(this.connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); + ElectricityManager.instance.produceElectricity(this, connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); } } - } + } + } } /** * Reads a tile entity from NBT. diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/src/common/steampower/turbine/TileEntitytopGen.java index 8d9a2418..d57cd220 100644 --- a/src/common/steampower/turbine/TileEntitytopGen.java +++ b/src/common/steampower/turbine/TileEntitytopGen.java @@ -3,18 +3,17 @@ package steampower.turbine; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import steampower.TileEntityMachine; -import universalelectricity.extend.IElectricUnit; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; -public class TileEntitytopGen extends TileEntityMachine implements IElectricUnit,ILiquidConsumer,ILiquidProducer { +public class TileEntitytopGen extends TileEntityMachine implements ILiquidConsumer,ILiquidProducer { public TileEntitySteamPiston genB = null; - public void onUpdate(float watts, float voltage, ForgeDirection side) + public void updateEntity() { if(!this.worldObj.isRemote) { - super.onUpdate(watts, voltage, side); + super.updateEntity(); TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); if(ent instanceof TileEntitySteamPiston) { From 813392f5e1ef6182fc32fbe0bda1283fcfc0d130 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 25 Sep 2012 16:21:52 -0400 Subject: [PATCH 085/115] change package and started coding mechanical rod since i want the steam piston to output a rotational energy rather than strait electric i started coding the mechanical rod. It has a max range of 10 blocks, and only transfers energy in one direction. Later i'll add a gear box to allow for several directions, as well as speed control. Also right now the system is design to use rpm as power units but later i'm change it to correct units, since rpm just describes speed and not power. --- src/common/aa/DevProxy.java | 4 +- src/common/basicpipes/BasicPipesMain.java | 14 +- src/common/basicpipes/PipeProxy.java | 4 +- .../{pipes => conductors}/BlockPipe.java | 2 +- .../basicpipes/conductors/BlockRod.java | 59 ++++++++ .../{pipes => conductors}/ItemGuage.java | 2 +- .../{pipes => conductors}/ItemParts.java | 2 +- .../{pipes => conductors}/ItemPipe.java | 2 +- .../{pipes => conductors}/TileEntityPipe.java | 2 +- .../basicpipes/conductors/TileEntityRod.java | 133 ++++++++++++++++++ .../{pumps => machines}/BlockMachine.java | 2 +- .../{pumps => machines}/BlockValve.java | 2 +- .../{pumps => machines}/ItemMachine.java | 2 +- .../{pumps => machines}/ItemValve.java | 2 +- .../TileEntityCondenser.java | 2 +- .../{pumps => machines}/TileEntityPump.java | 2 +- .../{pumps => machines}/TileEntityValve.java | 4 +- .../basicpipes/pipes/api/IMechenical.java | 30 ++++ src/common/basicpipes/pipes/api/Liquid.java | 5 +- .../turbine/TileEntitySteamPiston.java | 4 +- src/minecraft/basicpipes/PipeClientProxy.java | 4 +- src/minecraft/basicpipes/RenderPipe.java | 2 +- src/minecraft/basicpipes/RenderPump.java | 4 +- 23 files changed, 256 insertions(+), 33 deletions(-) rename src/common/basicpipes/{pipes => conductors}/BlockPipe.java (99%) create mode 100644 src/common/basicpipes/conductors/BlockRod.java rename src/common/basicpipes/{pipes => conductors}/ItemGuage.java (98%) rename src/common/basicpipes/{pipes => conductors}/ItemParts.java (97%) rename src/common/basicpipes/{pipes => conductors}/ItemPipe.java (99%) rename src/common/basicpipes/{pipes => conductors}/TileEntityPipe.java (99%) create mode 100644 src/common/basicpipes/conductors/TileEntityRod.java rename src/common/basicpipes/{pumps => machines}/BlockMachine.java (98%) rename src/common/basicpipes/{pumps => machines}/BlockValve.java (99%) rename src/common/basicpipes/{pumps => machines}/ItemMachine.java (99%) rename src/common/basicpipes/{pumps => machines}/ItemValve.java (99%) rename src/common/basicpipes/{pumps => machines}/TileEntityCondenser.java (98%) rename src/common/basicpipes/{pumps => machines}/TileEntityPump.java (99%) rename src/common/basicpipes/{pumps => machines}/TileEntityValve.java (96%) create mode 100644 src/common/basicpipes/pipes/api/IMechenical.java diff --git a/src/common/aa/DevProxy.java b/src/common/aa/DevProxy.java index 80d12498..b07fbff3 100644 --- a/src/common/aa/DevProxy.java +++ b/src/common/aa/DevProxy.java @@ -5,8 +5,8 @@ import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraftforge.client.MinecraftForgeClient; import basicpipes.BasicPipesMain; -import basicpipes.pipes.TileEntityPipe; -import basicpipes.pumps.TileEntityPump; +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; diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 8b37d86a..8c7b4b2a 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -7,13 +7,13 @@ import net.minecraft.src.ItemStack; import net.minecraftforge.common.Configuration; import universalelectricity.BasicComponents; import universalelectricity.network.PacketManager; -import basicpipes.pipes.BlockPipe; -import basicpipes.pipes.ItemGuage; -import basicpipes.pipes.ItemParts; -import basicpipes.pipes.ItemPipe; +import basicpipes.conductors.BlockPipe; +import basicpipes.conductors.ItemGuage; +import basicpipes.conductors.ItemParts; +import basicpipes.conductors.ItemPipe; +import basicpipes.machines.BlockMachine; +import basicpipes.machines.BlockValve; import basicpipes.pipes.api.Liquid; -import basicpipes.pumps.BlockMachine; -import basicpipes.pumps.BlockValve; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.PostInit; @@ -70,7 +70,7 @@ public class BasicPipesMain{ { proxy.preInit(); GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(machine,basicpipes.pumps.ItemMachine.class); + GameRegistry.registerBlock(machine,basicpipes.machines.ItemMachine.class); } @Init public void load(FMLInitializationEvent evt) diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java index b82d9883..8318c60f 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/src/common/basicpipes/PipeProxy.java @@ -1,7 +1,7 @@ package basicpipes; -import basicpipes.pipes.TileEntityPipe; -import basicpipes.pumps.TileEntityPump; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.machines.TileEntityPump; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; import net.minecraft.src.World; diff --git a/src/common/basicpipes/pipes/BlockPipe.java b/src/common/basicpipes/conductors/BlockPipe.java similarity index 99% rename from src/common/basicpipes/pipes/BlockPipe.java rename to src/common/basicpipes/conductors/BlockPipe.java index e3b9985a..e6b4f5f2 100644 --- a/src/common/basicpipes/pipes/BlockPipe.java +++ b/src/common/basicpipes/conductors/BlockPipe.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.conductors; import java.util.Random; diff --git a/src/common/basicpipes/conductors/BlockRod.java b/src/common/basicpipes/conductors/BlockRod.java new file mode 100644 index 00000000..48ea564a --- /dev/null +++ b/src/common/basicpipes/conductors/BlockRod.java @@ -0,0 +1,59 @@ +package basicpipes.conductors; + +import net.minecraft.src.Block; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class BlockRod extends universalelectricity.prefab.BlockMachine { + + public BlockRod(int par1) { + super("MechanicRod", par1, Material.iron); + } + @Override + protected int damageDropped(int metadata) + { + return 0; + } + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta >= 5) + { + world.setBlockMetadataWithNotify(x, y, z, 0); + } + else + { + world.setBlockMetadataWithNotify(x,y,z,meta+1); + } + return true; + } + @Override + public TileEntity createNewTileEntity(World var1) + { + return new TileEntityRod(); + } + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + +} diff --git a/src/common/basicpipes/pipes/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java similarity index 98% rename from src/common/basicpipes/pipes/ItemGuage.java rename to src/common/basicpipes/conductors/ItemGuage.java index 22272389..a5af175c 100644 --- a/src/common/basicpipes/pipes/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.conductors; import java.util.ArrayList; import java.util.List; diff --git a/src/common/basicpipes/pipes/ItemParts.java b/src/common/basicpipes/conductors/ItemParts.java similarity index 97% rename from src/common/basicpipes/pipes/ItemParts.java rename to src/common/basicpipes/conductors/ItemParts.java index 274f1c71..a8821141 100644 --- a/src/common/basicpipes/pipes/ItemParts.java +++ b/src/common/basicpipes/conductors/ItemParts.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.conductors; import java.util.ArrayList; import java.util.List; diff --git a/src/common/basicpipes/pipes/ItemPipe.java b/src/common/basicpipes/conductors/ItemPipe.java similarity index 99% rename from src/common/basicpipes/pipes/ItemPipe.java rename to src/common/basicpipes/conductors/ItemPipe.java index e623a0d5..c0b77986 100644 --- a/src/common/basicpipes/pipes/ItemPipe.java +++ b/src/common/basicpipes/conductors/ItemPipe.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.conductors; import java.util.List; diff --git a/src/common/basicpipes/pipes/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java similarity index 99% rename from src/common/basicpipes/pipes/TileEntityPipe.java rename to src/common/basicpipes/conductors/TileEntityPipe.java index b4ab4046..9967f292 100644 --- a/src/common/basicpipes/pipes/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -1,4 +1,4 @@ -package basicpipes.pipes; +package basicpipes.conductors; import net.minecraft.src.EntityPlayer; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NetworkManager; diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java new file mode 100644 index 00000000..ca5bae34 --- /dev/null +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -0,0 +1,133 @@ +package basicpipes.conductors; + +import com.google.common.io.ByteArrayDataInput; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.IMechenical; +import basicpipes.pipes.api.Liquid; + +public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechenical { +private int count = 0; +private float rotation = 0; +public int rpm = 0;//rpm received from producer +public int loadRPM = 0; //rpm lost to the load +public int currentRPM = 0; +public TileEntity front = null; +public TileEntity back = null; +ForgeDirection frontD; +ForgeDirection backD; + @Override + public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + this.rpm = dataStream.readInt(); + this.loadRPM = dataStream.readInt(); + this.currentRPM = dataStream.readInt(); + }catch(Exception e) + { + + } + + } + public Object[] data() + { + return new Object[]{rpm,loadRPM,currentRPM}; + } + @Override + public void updateEntity() + { + if(count++ >= 5) + { + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + frontD = ForgeDirection.getOrientation(meta); + backD = ForgeDirection.getOrientation(meta).getOpposite(); + count = 0; + if(!worldObj.isRemote) + { + + + back = worldObj.getBlockTileEntity(xCoord+backD.offsetX, yCoord+backD.offsetY, zCoord+backD.offsetZ); + front = worldObj.getBlockTileEntity(xCoord+frontD.offsetX, yCoord+frontD.offsetY, zCoord+frontD.offsetZ); + + if(!(back instanceof IMechenical)) + { + back = null; + } + if(!(front instanceof IMechenical)) + { + front = null; + } + + if(back != null && front != null) + { + this.rpm = ((IMechenical) back).getRPM(backD); + this.loadRPM = ((IMechenical) front).useRPM(rpm)+10; + this.currentRPM = rpm-loadRPM-10;//minus 10 is what it take to over come the rods friction + if(currentRPM < 0) + { + //TODO add stress to rod and break if left stressed too long + } + }else + { + if(currentRPM > 0) + { + currentRPM-=10; + if(currentRPM < 0) + { + currentRPM = 0; + } + + } + } + + + + + + + PacketManager.sendTileEntityPacketWithRange(this, BasicPipesMain.channel, 20, this.data()); + + } + this.rotation = currentRPM * 240; + if(back != null && back instanceof TileEntityRod) + { + this.rotation = ((TileEntityRod)front).rotation; + } + } + } + @Override + public int getRPM(ForgeDirection side) { + return this.currentRPM; + } + @Override + public boolean canOutputSide(ForgeDirection side) { + if(frontD != null && side == frontD) + { + return true; + } + return false; + } + @Override + public boolean canInputSide(ForgeDirection side) { + if(backD != null && side == backD) + { + return true; + } + return false; + } + @Override + public int useRPM(int RPM) { + // TODO Auto-generated method stub + return 10+loadRPM; + } + +} diff --git a/src/common/basicpipes/pumps/BlockMachine.java b/src/common/basicpipes/machines/BlockMachine.java similarity index 98% rename from src/common/basicpipes/pumps/BlockMachine.java rename to src/common/basicpipes/machines/BlockMachine.java index cba024bf..ca99f0a2 100644 --- a/src/common/basicpipes/pumps/BlockMachine.java +++ b/src/common/basicpipes/machines/BlockMachine.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import java.util.Random; diff --git a/src/common/basicpipes/pumps/BlockValve.java b/src/common/basicpipes/machines/BlockValve.java similarity index 99% rename from src/common/basicpipes/pumps/BlockValve.java rename to src/common/basicpipes/machines/BlockValve.java index 062a35be..d139ba67 100644 --- a/src/common/basicpipes/pumps/BlockValve.java +++ b/src/common/basicpipes/machines/BlockValve.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import java.util.ArrayList; import net.minecraft.src.*; diff --git a/src/common/basicpipes/pumps/ItemMachine.java b/src/common/basicpipes/machines/ItemMachine.java similarity index 99% rename from src/common/basicpipes/pumps/ItemMachine.java rename to src/common/basicpipes/machines/ItemMachine.java index 6639d072..cfb994b5 100644 --- a/src/common/basicpipes/pumps/ItemMachine.java +++ b/src/common/basicpipes/machines/ItemMachine.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import java.util.List; diff --git a/src/common/basicpipes/pumps/ItemValve.java b/src/common/basicpipes/machines/ItemValve.java similarity index 99% rename from src/common/basicpipes/pumps/ItemValve.java rename to src/common/basicpipes/machines/ItemValve.java index b4b7ed72..8107b69d 100644 --- a/src/common/basicpipes/pumps/ItemValve.java +++ b/src/common/basicpipes/machines/ItemValve.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import java.util.List; diff --git a/src/common/basicpipes/pumps/TileEntityCondenser.java b/src/common/basicpipes/machines/TileEntityCondenser.java similarity index 98% rename from src/common/basicpipes/pumps/TileEntityCondenser.java rename to src/common/basicpipes/machines/TileEntityCondenser.java index 2e1a2469..ad14aa23 100644 --- a/src/common/basicpipes/pumps/TileEntityCondenser.java +++ b/src/common/basicpipes/machines/TileEntityCondenser.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import universalelectricity.implement.IElectricityReceiver; import net.minecraft.src.NBTTagCompound; diff --git a/src/common/basicpipes/pumps/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java similarity index 99% rename from src/common/basicpipes/pumps/TileEntityPump.java rename to src/common/basicpipes/machines/TileEntityPump.java index 1274577a..9e91834b 100644 --- a/src/common/basicpipes/pumps/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -1,4 +1,4 @@ -package basicpipes.pumps; +package basicpipes.machines; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; diff --git a/src/common/basicpipes/pumps/TileEntityValve.java b/src/common/basicpipes/machines/TileEntityValve.java similarity index 96% rename from src/common/basicpipes/pumps/TileEntityValve.java rename to src/common/basicpipes/machines/TileEntityValve.java index efecb80b..7542310f 100644 --- a/src/common/basicpipes/pumps/TileEntityValve.java +++ b/src/common/basicpipes/machines/TileEntityValve.java @@ -1,8 +1,8 @@ -package basicpipes.pumps; +package basicpipes.machines; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import basicpipes.pipes.TileEntityPipe; +import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.Liquid; import basicpipes.pipes.api.TradeHelper; diff --git a/src/common/basicpipes/pipes/api/IMechenical.java b/src/common/basicpipes/pipes/api/IMechenical.java new file mode 100644 index 00000000..d401b909 --- /dev/null +++ b/src/common/basicpipes/pipes/api/IMechenical.java @@ -0,0 +1,30 @@ +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; +// mechanical +public interface IMechenical { +/** + * + * @param side the rpm is coming from + * @return rpm that the block is running at + */ + public int getRPM(ForgeDirection side); + /** + * + * @param side + * @return if mechanical force can be outputed from this side + */ + public boolean canOutputSide(ForgeDirection side); + /** + * + * @param side + * @return if mechanical force can be inputed from this side + */ + public boolean canInputSide(ForgeDirection side); + /** + * + * @param RPM being applied to this machine + * @return the rpm after the load has been applied + */ + public int useRPM(int RPM);//will change later to include force of rotation +} diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/src/common/basicpipes/pipes/api/Liquid.java index 881033b9..807ca262 100644 --- a/src/common/basicpipes/pipes/api/Liquid.java +++ b/src/common/basicpipes/pipes/api/Liquid.java @@ -17,8 +17,9 @@ public enum Liquid { Air("Air",false,true,0,-1), Methain("Methain",true,true,-1,-1), BioFuel("BioFuel",true,false,-1,-1), - Coolent("Coolent",true,false,-1,-1), - NukeWaste("NukeWaste",true,false,-1,-1), + Coolent("Coolent",false,false,-1,-1), + NukeWaste("NukeWaste",false,false,-1,-1), + Ether("Ether",false,false,-1,-1), DEFUALT("Empty",false,false,-1,-1); public final boolean flamable;//can it catch on fire, not used but might be public final boolean isGas;//is it a gas, used to find if it floats diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 0c68fd10..ad35bd3e 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -175,8 +175,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { ElectricityManager.instance.produceElectricity(this, connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); } - } - } + } + } } } /** diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index 22c433af..61e07ace 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -2,8 +2,8 @@ package basicpipes; import steampower.SteamPowerMain; import basicpipes.PipeProxy; -import basicpipes.pipes.TileEntityPipe; -import basicpipes.pumps.TileEntityPump; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.machines.TileEntityPump; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.registry.GameRegistry; diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index bfd0c678..5af0ef6c 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -6,7 +6,7 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; -import basicpipes.pipes.TileEntityPipe; +import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.Liquid; diff --git a/src/minecraft/basicpipes/RenderPump.java b/src/minecraft/basicpipes/RenderPump.java index ca21ba12..49de4753 100644 --- a/src/minecraft/basicpipes/RenderPump.java +++ b/src/minecraft/basicpipes/RenderPump.java @@ -5,9 +5,9 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; -import basicpipes.pipes.TileEntityPipe; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.machines.TileEntityPump; import basicpipes.pipes.api.Liquid; -import basicpipes.pumps.TileEntityPump; public class RenderPump extends TileEntitySpecialRenderer From 0748ec34eeffa48c621e6ee66b6ba366e5d8f54e Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 30 Sep 2012 20:22:26 -0400 Subject: [PATCH 086/115] worked on mechanical system and updated for ue8.7 Simi unstable due to how i've been messing around with mechanical systems, but it looks good enough. It also seems to work fine on UE8.7, and i added dependence checks to remove some error on load. On top of that i update version number for both mods to be the same. Will help track versions better --- BasicPipesVersion.txt | 2 +- SteamPowerVersion.txt | 2 +- src/common/basicpipes/BasicPipesMain.java | 5 +- src/common/basicpipes/PipeProxy.java | 2 + .../basicpipes/conductors/BlockRod.java | 21 +++ .../basicpipes/conductors/ItemGuage.java | 13 ++ .../basicpipes/conductors/TileEntityRod.java | 24 +-- src/common/steampower/SteamPowerMain.java | 2 +- .../turbine/TileEntitySteamPiston.java | 85 ++++------- src/minecraft/basicpipes/ModelGearRod.java | 138 ++++++++++++++++++ src/minecraft/basicpipes/PipeClientProxy.java | 2 + src/minecraft/basicpipes/RenderGearRod.java | 52 +++++++ src/minecraft/steampower/GUIGenerator.java | 3 +- src/minecraft/textures/GearRod.png | Bin 0 -> 257 bytes 14 files changed, 280 insertions(+), 71 deletions(-) create mode 100644 src/minecraft/basicpipes/ModelGearRod.java create mode 100644 src/minecraft/basicpipes/RenderGearRod.java create mode 100644 src/minecraft/textures/GearRod.png diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index bf0d87ab..7c483e8f 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -4 \ No newline at end of file +1.7 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index c7930257..7c483e8f 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -7 \ No newline at end of file +1.7 \ No newline at end of file diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 8c7b4b2a..acd837e4 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -8,6 +8,7 @@ import net.minecraftforge.common.Configuration; import universalelectricity.BasicComponents; import universalelectricity.network.PacketManager; import basicpipes.conductors.BlockPipe; +import basicpipes.conductors.BlockRod; import basicpipes.conductors.ItemGuage; import basicpipes.conductors.ItemParts; import basicpipes.conductors.ItemPipe; @@ -25,7 +26,7 @@ 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 = "basicPipes", name = "Basic Pipes", version = "V4") +@Mod(modid = "basicPipes", name = "Basic Pipes", version = "1.7",dependencies = "after:UniversalElectricity") @NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class BasicPipesMain{ @@ -44,6 +45,7 @@ public class BasicPipesMain{ public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); public static Block machine = new BlockMachine(machineID).setBlockName("pump"); public static Block valve = new BlockValve(valveID).setBlockName("valve"); + public static Block rod = new BlockRod(valveID+1); public static Item parts = new ItemParts(partID); public static Item itemPipes = new ItemPipe(ppipeID); public static Item gauge = new ItemGuage(toolID); @@ -70,6 +72,7 @@ public class BasicPipesMain{ { proxy.preInit(); GameRegistry.registerBlock(pipe); + GameRegistry.registerBlock(rod); GameRegistry.registerBlock(machine,basicpipes.machines.ItemMachine.class); } @Init diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java index 8318c60f..c5621d9b 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/src/common/basicpipes/PipeProxy.java @@ -1,6 +1,7 @@ package basicpipes; import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; import basicpipes.machines.TileEntityPump; import net.minecraft.src.EntityPlayer; import net.minecraft.src.TileEntity; @@ -19,6 +20,7 @@ public class PipeProxy implements IGuiHandler { GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); } public void postInit() { diff --git a/src/common/basicpipes/conductors/BlockRod.java b/src/common/basicpipes/conductors/BlockRod.java index 48ea564a..e2f39ec9 100644 --- a/src/common/basicpipes/conductors/BlockRod.java +++ b/src/common/basicpipes/conductors/BlockRod.java @@ -1,15 +1,21 @@ package basicpipes.conductors; +import steampower.TileEntityMachine; import net.minecraft.src.Block; +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; +import net.minecraftforge.common.ForgeDirection; public class BlockRod extends universalelectricity.prefab.BlockMachine { public BlockRod(int par1) { super("MechanicRod", par1, Material.iron); + this.setCreativeTab(CreativeTabs.tabRedstone); } @Override protected int damageDropped(int metadata) @@ -17,6 +23,21 @@ public class BlockRod extends universalelectricity.prefab.BlockMachine { return 0; } @Override + public void onBlockPlacedBy(World world,int i,int j,int k, EntityLiving player) + { + int angle= MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int meta = 0; + ForgeDirection idr; + switch(angle) + { + case 0: meta = 2;break; + case 1: meta = 5;break; + case 2: meta = 3;break; + case 3: meta = 4;break; + } + world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); + } + @Override public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) { int meta = world.getBlockMetadata(x, y, z); diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index a5af175c..c14c8a9f 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -7,6 +7,7 @@ import basicpipes.BasicPipesMain; import basicpipes.pipes.api.Liquid; import net.minecraft.src.*; +import net.minecraftforge.common.ForgeDirection; public class ItemGuage extends Item { @@ -65,6 +66,18 @@ public class ItemGuage extends Item player.addChatMessage(print); return true; } + if(blockEntity instanceof TileEntityRod) + { + TileEntityRod rod = (TileEntityRod) blockEntity; + int steam = rod.loadRPM; + int pressure = rod.getRPM(ForgeDirection.getOrientation(par7)); + String print = "Error"; + + print = " " + steam +"Load "+pressure+"RPM"; + + player.addChatMessage(print); + return true; + } } } diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index ca5bae34..75039ff5 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -16,7 +16,7 @@ import basicpipes.pipes.api.Liquid; public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechenical { private int count = 0; -private float rotation = 0; +public float rotation = 0; public int rpm = 0;//rpm received from producer public int loadRPM = 0; //rpm lost to the load public int currentRPM = 0; @@ -70,11 +70,14 @@ ForgeDirection backD; if(back != null && front != null) { this.rpm = ((IMechenical) back).getRPM(backD); - this.loadRPM = ((IMechenical) front).useRPM(rpm)+10; - this.currentRPM = rpm-loadRPM-10;//minus 10 is what it take to over come the rods friction - if(currentRPM < 0) + if(rpm > 0) { - //TODO add stress to rod and break if left stressed too long + this.loadRPM = ((IMechenical) front).useRPM(rpm)+10; + this.currentRPM = rpm-loadRPM-10;//minus 10 is what it take to over come the rods friction + if(currentRPM < 0) + { + //TODO add stress to rod and break if left stressed too long + } } }else { @@ -97,10 +100,13 @@ ForgeDirection backD; PacketManager.sendTileEntityPacketWithRange(this, BasicPipesMain.channel, 20, this.data()); } - this.rotation = currentRPM * 240; - if(back != null && back instanceof TileEntityRod) + if(currentRPM > 0) { - this.rotation = ((TileEntityRod)front).rotation; + this.rotation = currentRPM * 240; + if(back != null && back instanceof TileEntityRod) + { + this.rotation = ((TileEntityRod)back).getRPM(backD) * 240; + } } } } @@ -126,7 +132,7 @@ ForgeDirection backD; } @Override public int useRPM(int RPM) { - // TODO Auto-generated method stub + //rpm * T / 5252 return 10+loadRPM; } diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 57cc2973..dd32146b 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -24,7 +24,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "0.0.10") +@Mod(modid = "SteamPower", name = "Steam Power", version = "1.7",dependencies = "after:basicPipes") @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index ad35bd3e..f4dfda23 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -12,17 +12,15 @@ import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import steampower.TileEntityMachine; -import universalelectricity.electricity.ElectricityManager; import universalelectricity.network.IPacketReceiver; -import universalelectricity.prefab.TileEntityConductor; -import universalelectricity.prefab.Vector3; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IMechenical; import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory,IMechenical { //Maximum possible generation rate of watts in SECONDS public int maxGenerateRate = 1000; @@ -42,19 +40,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR * The ItemStacks that hold the items currently being used in the battery box */ private ItemStack[] containingItems = new ItemStack[1]; - public TileEntityConductor connectedElectricUnit = null; public boolean isConnected = false; private boolean posT = true; - @Override - public boolean canConnect(ForgeDirection side) - { - return true; - } - public int getTickInterval() - { - return 10; - - } /** * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. @@ -104,28 +91,11 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { isConnected = true; } - - this.connectedElectricUnit = null; - //Check nearby blocks and see if the conductor is full. If so, then it is connected - for(int i = 0;i<6;i++) - { - TileEntity tileEntity = Vector3.getConnectorFromSide(this.worldObj, new Vector3(this.xCoord, this.yCoord, this.zCoord), - ForgeDirection.getOrientation(i)); - if (tileEntity instanceof TileEntityConductor) - { - if (ElectricityManager.instance.getElectricityRequired(((TileEntityConductor)tileEntity).getConnectionID()) > 0) - { - this.connectedElectricUnit = (TileEntityConductor)tileEntity; - } - } - } - if(!this.worldObj.isRemote) { - if(!this.isDisabled()) - { + //Adds time to runTime by consuming steam if(this.genTime <= 0) { @@ -160,25 +130,19 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { this.genTime --; - if(this.connectedElectricUnit != null) - { + this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); - } + } - if(this.connectedElectricUnit == null || this.genTime <= 0) + if(this.genTime <= 0) { this.generateRate = (float)Math.max(this.generateRate-0.05, 0); } - - if(this.generateRate > 1) - { - ElectricityManager.instance.produceElectricity(this, connectedElectricUnit, this.generateRate*this.getTickInterval(), this.getVoltage()); - } } } } - } + /** * Reads a tile entity from NBT. */ @@ -306,18 +270,6 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public void closeChest() { } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - @Override public int onProduceLiquid(Liquid type, int Vol, ForgeDirection side) { if(type == Liquid.WATER) @@ -384,7 +336,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public Object[] getSendData() { - return new Object[]{(int)facing,(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; + return new Object[]{(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; } @Override @@ -393,7 +345,6 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR ByteArrayDataInput dataStream) { try { - facing = dataStream.readInt(); waterStored = dataStream.readInt(); steamStored = dataStream.readInt(); steamConsumed = dataStream.readInt(); @@ -423,4 +374,24 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } return false; } + @Override + public int getRPM(ForgeDirection side) { + // TODO Auto-generated method stub + return 100; + } + @Override + public boolean canOutputSide(ForgeDirection side) { + // TODO Auto-generated method stub + return true; + } + @Override + public boolean canInputSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public int useRPM(int RPM) { + // TODO Auto-generated method stub + return 0; + } } diff --git a/src/minecraft/basicpipes/ModelGearRod.java b/src/minecraft/basicpipes/ModelGearRod.java new file mode 100644 index 00000000..56201a90 --- /dev/null +++ b/src/minecraft/basicpipes/ModelGearRod.java @@ -0,0 +1,138 @@ +// Date: 9/25/2012 4:29:17 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGearRod extends ModelBase +{ + //fields + ModelRenderer Rod; + ModelRenderer front; + ModelRenderer back; + ModelRenderer f2; + ModelRenderer b2; + ModelRenderer b3; + ModelRenderer b4; + ModelRenderer b1; + ModelRenderer f1; + ModelRenderer f4; + ModelRenderer f3; + ModelRenderer Rod2; + + public ModelGearRod() + { + textureWidth = 64; + textureHeight = 32; + + Rod = new ModelRenderer(this, 0, 0); + Rod.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); + Rod.setRotationPoint(0F, 16F, -6F); + Rod.setTextureSize(64, 32); + Rod.mirror = true; + setRotation(Rod, 0F, 0F, 0F); + front = new ModelRenderer(this, 35, 0); + front.addBox(-2F, -2F, -2F, 4, 4, 2); + front.setRotationPoint(0F, 16F, -6F); + front.setTextureSize(64, 32); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + back = new ModelRenderer(this, 35, 0); + back.addBox(-2F, -2F, 0F, 4, 4, 2); + back.setRotationPoint(0F, 16F, 6F); + back.setTextureSize(64, 32); + back.mirror = true; + setRotation(back, 0F, 0F, 0.7853982F); + f2 = new ModelRenderer(this, 0, 17); + f2.addBox(0F, 0F, 0F, 1, 1, 2); + f2.setRotationPoint(1F, 17F, -10F); + f2.setTextureSize(64, 32); + f2.mirror = true; + setRotation(f2, 0F, 0F, 0F); + b2 = new ModelRenderer(this, 0, 17); + b2.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b2.setRotationPoint(0F, 18F, 8F); + b2.setTextureSize(64, 32); + b2.mirror = true; + setRotation(b2, 0F, 0F, 0.7853982F); + b3 = new ModelRenderer(this, 0, 17); + b3.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b3.setRotationPoint(-2F, 16F, 8F); + b3.setTextureSize(64, 32); + b3.mirror = true; + setRotation(b3, 0F, 0F, 0.7853982F); + b4 = new ModelRenderer(this, 0, 17); + b4.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b4.setRotationPoint(2F, 16F, 8F); + b4.setTextureSize(64, 32); + b4.mirror = true; + setRotation(b4, 0F, 0F, 0.7853982F); + b1 = new ModelRenderer(this, 0, 17); + b1.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b1.setRotationPoint(0F, 14F, 8F); + b1.setTextureSize(64, 32); + b1.mirror = true; + setRotation(b1, 0F, 0F, 0.7853982F); + f1 = new ModelRenderer(this, 0, 17); + f1.addBox(0F, 0F, 0F, 1, 1, 2); + f1.setRotationPoint(1F, 14F, -10F); + f1.setTextureSize(64, 32); + f1.mirror = true; + setRotation(f1, 0F, 0F, 0F); + f4 = new ModelRenderer(this, 0, 17); + f4.addBox(0F, 0F, 0F, 1, 1, 2); + f4.setRotationPoint(-2F, 17F, -10F); + f4.setTextureSize(64, 32); + f4.mirror = true; + setRotation(f4, 0F, 0F, 0F); + f3 = new ModelRenderer(this, 0, 17); + f3.addBox(0F, 0F, 0F, 1, 1, 2); + f3.setRotationPoint(-2F, 14F, -10F); + f3.setTextureSize(64, 32); + f3.mirror = true; + setRotation(f3, 0F, 0F, 0F); + Rod2 = new ModelRenderer(this, 0, 0); + Rod2.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); + Rod2.setRotationPoint(0F, 16F, -6F); + Rod2.setTextureSize(64, 32); + Rod2.mirror = true; + setRotation(Rod2, 0F, 0F, 0.7853982F); + } + public void render(float f5,float r) + { + Rod.render(f5); + Rod2.render(f5); + Rod.rotateAngleZ+= r; + Rod2.rotateAngleZ+= r; + //TODO add rotation to rods + front.render(f5); + back.render(f5); + f2.render(f5); + b2.render(f5); + b3.render(f5); + b4.render(f5); + b1.render(f5); + f1.render(f5); + f4.render(f5); + f3.render(f5); + + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index 61e07ace..7d0ede83 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -3,6 +3,7 @@ package basicpipes; import steampower.SteamPowerMain; import basicpipes.PipeProxy; import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; import basicpipes.machines.TileEntityPump; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; @@ -23,5 +24,6 @@ public class PipeClientProxy extends PipeProxy { ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); ClientRegistry.registerTileEntity(TileEntityPump.class, "pump", new RenderPump()); + ClientRegistry.registerTileEntity(TileEntityRod.class, "rod", new RenderGearRod()); } } diff --git a/src/minecraft/basicpipes/RenderGearRod.java b/src/minecraft/basicpipes/RenderGearRod.java new file mode 100644 index 00000000..f306e4dd --- /dev/null +++ b/src/minecraft/basicpipes/RenderGearRod.java @@ -0,0 +1,52 @@ +package basicpipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; +import basicpipes.machines.TileEntityPump; +import basicpipes.pipes.api.Liquid; + + +public class RenderGearRod extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGearRod model; + + public RenderGearRod() + { + model = new ModelGearRod(); + } + + public void renderAModelAt(TileEntityRod tileEntity, double d, double d1, double d2, float f) + { + + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + bindTextureByName("/textures/GearRod.png"); + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + switch(meta) + { + case 0: GL11.glRotatef(90f, 1f, 0f, 0f);break; + case 1: GL11.glRotatef(-90f, 1f, 0f, 0f);break; + case 2:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 5: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.render(0.0625F,tileEntity.rotation); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityRod)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUIGenerator.java index 612922ff..b73ea08d 100644 --- a/src/minecraft/steampower/GUIGenerator.java +++ b/src/minecraft/steampower/GUIGenerator.java @@ -34,11 +34,12 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; String displayText = ""; String displayText2 = ""; String displayText3 = ""; + /** if(tileEntity.connectedElectricUnit == null) { displayText = "Not Connected"; } - else + else*/ if(tileEntity.generateRate*20 <= 0) { if(tileEntity.steamStored> 0) diff --git a/src/minecraft/textures/GearRod.png b/src/minecraft/textures/GearRod.png new file mode 100644 index 0000000000000000000000000000000000000000..11f4720d611fe02ed83037b2c00196e1e9cd4151 GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQjEnx?oJHr&dIz4a@dl*-CY>| zgW!U_%O?XxI14-?iy0XB4ude`@%$AjKtc8rPhVH|JDk$u;tDKFu5JJdHF~-@hGg7( zd)<)F!9k$)p=6*XMDB=8khCz+PQbgpkx8k-6SMm)EU!Ph8w4LEYxb$CpaV4e+znno_Pgg&ebxsLQ0Ce Date: Mon, 1 Oct 2012 23:14:58 -0400 Subject: [PATCH 087/115] writing Steam power since half of it was not working i'm going to write the mod part by part starting with the steam piston and its new model --- .../basicpipes/conductors/ItemGuage.java | 8 +- .../basicpipes/conductors/TileEntityRod.java | 145 ++---- .../basicpipes/pipes/api/IMechenical.java | 4 +- src/common/steampower/TileEntityMachine.java | 29 -- .../steampower/turbine/BlockSteamPiston.java | 26 +- .../turbine/ContainerGenerator.java | 2 +- src/common/steampower/turbine/ItemEngine.java | 32 +- .../turbine/TileEntitySteamPiston.java | 478 +++++++----------- src/minecraft/basicpipes/ModelGearRod.java | 4 +- src/minecraft/basicpipes/RenderGearRod.java | 2 +- src/minecraft/steampower/GUIGenerator.java | 19 +- .../steampower/RenderSteamEngine.java | 9 +- .../steampower/SteamClientProxy.java | 3 +- .../steampower/geared/ModelGearPiston.java | 324 ++++++++++++ .../steampower/geared/RenderGearPiston.java | 52 ++ src/minecraft/textures/GearShaftPiston.png | Bin 0 -> 706 bytes 16 files changed, 634 insertions(+), 503 deletions(-) create mode 100644 src/minecraft/steampower/geared/ModelGearPiston.java create mode 100644 src/minecraft/steampower/geared/RenderGearPiston.java create mode 100644 src/minecraft/textures/GearShaftPiston.png diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index c14c8a9f..0ec3ab71 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -65,19 +65,19 @@ public class ItemGuage extends Item player.addChatMessage(print); return true; - } + }/** if(blockEntity instanceof TileEntityRod) { TileEntityRod rod = (TileEntityRod) blockEntity; - int steam = rod.loadRPM; - int pressure = rod.getRPM(ForgeDirection.getOrientation(par7)); + double steam = rod.loadRPM; + double pressure = rod.getForce(ForgeDirection.getOrientation(par7)); String print = "Error"; print = " " + steam +"Load "+pressure+"RPM"; player.addChatMessage(print); return true; - } + }*/ } } diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index 75039ff5..ac9bda10 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -4,136 +4,51 @@ import com.google.common.io.ByteArrayDataInput; import net.minecraft.src.EntityPlayer; import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import net.minecraftforge.common.ForgeDirection; import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; +import universalelectricity.prefab.Vector3; import basicpipes.BasicPipesMain; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.IMechenical; import basicpipes.pipes.api.Liquid; public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechenical { -private int count = 0; -public float rotation = 0; -public int rpm = 0;//rpm received from producer -public int loadRPM = 0; //rpm lost to the load -public int currentRPM = 0; -public TileEntity front = null; -public TileEntity back = null; -ForgeDirection frontD; -ForgeDirection backD; + + public int pos = 0; + + @Override + public double getForce(ForgeDirection side) { + return 0; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + + @Override + public double applyForce(int force) { + // TODO Auto-generated method stub + return 0; + } + @Override public void handlePacketData(NetworkManager network, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { - try{ - this.rpm = dataStream.readInt(); - this.loadRPM = dataStream.readInt(); - this.currentRPM = dataStream.readInt(); - }catch(Exception e) - { - - } + // TODO Auto-generated method stub } - public Object[] data() - { - return new Object[]{rpm,loadRPM,currentRPM}; - } - @Override - public void updateEntity() - { - if(count++ >= 5) - { - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - frontD = ForgeDirection.getOrientation(meta); - backD = ForgeDirection.getOrientation(meta).getOpposite(); - count = 0; - if(!worldObj.isRemote) - { - - - back = worldObj.getBlockTileEntity(xCoord+backD.offsetX, yCoord+backD.offsetY, zCoord+backD.offsetZ); - front = worldObj.getBlockTileEntity(xCoord+frontD.offsetX, yCoord+frontD.offsetY, zCoord+frontD.offsetZ); - - if(!(back instanceof IMechenical)) - { - back = null; - } - if(!(front instanceof IMechenical)) - { - front = null; - } - - if(back != null && front != null) - { - this.rpm = ((IMechenical) back).getRPM(backD); - if(rpm > 0) - { - this.loadRPM = ((IMechenical) front).useRPM(rpm)+10; - this.currentRPM = rpm-loadRPM-10;//minus 10 is what it take to over come the rods friction - if(currentRPM < 0) - { - //TODO add stress to rod and break if left stressed too long - } - } - }else - { - if(currentRPM > 0) - { - currentRPM-=10; - if(currentRPM < 0) - { - currentRPM = 0; - } - - } - } - - - - - - - PacketManager.sendTileEntityPacketWithRange(this, BasicPipesMain.channel, 20, this.data()); - - } - if(currentRPM > 0) - { - this.rotation = currentRPM * 240; - if(back != null && back instanceof TileEntityRod) - { - this.rotation = ((TileEntityRod)back).getRPM(backD) * 240; - } - } - } - } - @Override - public int getRPM(ForgeDirection side) { - return this.currentRPM; - } - @Override - public boolean canOutputSide(ForgeDirection side) { - if(frontD != null && side == frontD) - { - return true; - } - return false; - } - @Override - public boolean canInputSide(ForgeDirection side) { - if(backD != null && side == backD) - { - return true; - } - return false; - } - @Override - public int useRPM(int RPM) { - //rpm * T / 5252 - return 10+loadRPM; - } - } diff --git a/src/common/basicpipes/pipes/api/IMechenical.java b/src/common/basicpipes/pipes/api/IMechenical.java index d401b909..9b4391f4 100644 --- a/src/common/basicpipes/pipes/api/IMechenical.java +++ b/src/common/basicpipes/pipes/api/IMechenical.java @@ -8,7 +8,7 @@ public interface IMechenical { * @param side the rpm is coming from * @return rpm that the block is running at */ - public int getRPM(ForgeDirection side); + public double getForce(ForgeDirection side); /** * * @param side @@ -26,5 +26,5 @@ public interface IMechenical { * @param RPM being applied to this machine * @return the rpm after the load has been applied */ - public int useRPM(int RPM);//will change later to include force of rotation + public double applyForce(int force); } diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index fed78970..505a1a39 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -90,35 +90,6 @@ public class TileEntityMachine extends TileEntityElectricityReceiver implements { return new Object[]{}; } - public int getNumSide(ForgeDirection side) - { - if(side == ForgeDirection.DOWN) - { - return 0; - } - if(side == ForgeDirection.UP) - { - return 1; - } - if(side == ForgeDirection.NORTH) - { - return 2; - } - if(side == ForgeDirection.SOUTH) - { - return 3; - } - if(side == ForgeDirection.WEST) - { - return 4; - } - if(side == ForgeDirection.EAST) - { - return 5; - } - return 0; - } - public void updateEntity() { super.updateEntity(); diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java index d5684180..5411682f 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -44,20 +44,20 @@ public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine{ } } @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if(metadata < 3) { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; + par1World.setBlockAndMetadata(x, y, z, blockID, metadata+angle); } - } + else + { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); + } + return true; + } public TileEntity createNewTileEntity(World var1) { return null; @@ -119,7 +119,7 @@ public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine{ public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) { int meta = par1World.getBlockMetadata(par2, par3, par4); - if (meta == 1) + if (meta < 4) { if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { diff --git a/src/common/steampower/turbine/ContainerGenerator.java b/src/common/steampower/turbine/ContainerGenerator.java index ac9dbfc4..98d9f06c 100644 --- a/src/common/steampower/turbine/ContainerGenerator.java +++ b/src/common/steampower/turbine/ContainerGenerator.java @@ -13,7 +13,7 @@ public class ContainerGenerator extends Container public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) { this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + // this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); int var3; for (var3 = 0; var3 < 3; ++var3) diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index be2e7ba1..7dac120e 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -9,6 +9,7 @@ import net.minecraft.src.ItemStack; import net.minecraft.src.MathHelper; import net.minecraft.src.World; import steampower.SteamPowerMain; +import steampower.TileEntityMachine; public class ItemEngine extends Item { @@ -30,9 +31,9 @@ public class ItemEngine extends Item return SteamPowerMain.textureFile+"Items.png"; } @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, World world, int x, int y, int z, int par7, float par8, float par9, float par10) { - if (par3World.isRemote) + if (world.isRemote) { return false; } @@ -40,17 +41,26 @@ public class ItemEngine extends Item Block var11 = SteamPowerMain.engine; int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (ePlayer.canPlayerEdit(par4, par5, par6)) + if (ePlayer.canPlayerEdit(x, y, z)) { - ++par5; - if (var11.canPlaceBlockAt(par3World, par4, par5, par6)) + ++y; + if (var11.canPlaceBlockAt(world, x, y, z)) { - par3World.editingBlocks = true; - par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var11.blockID, 1); - par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - par3World.setBlockAndMetadataWithNotify(par4, par5+1, par6, var11.blockID, 14); - par3World.notifyBlocksOfNeighborChange(par4, par5, par6, var11.blockID); - par3World.editingBlocks = false; + world.editingBlocks = true; + + switch (angle) + { + case 0: world.setBlockAndMetadata(x, y, z, var11.blockID, 0); break; + case 1: world.setBlockAndMetadata(x, y, z, var11.blockID, 1); break; + case 2: world.setBlockAndMetadata(x, y, z, var11.blockID, 2); break; + case 3: world.setBlockAndMetadata(x, y, z, var11.blockID, 3); break; + } + int meta = world.getBlockMetadata(x, y, z); + //ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); + world.notifyBlocksOfNeighborChange(x, y, z, var11.blockID); + world.setBlockAndMetadataWithNotify(x, y+1, z, var11.blockID, 14); + world.notifyBlocksOfNeighborChange(x, y, z, var11.blockID); + world.editingBlocks = false; --itemStack.stackSize; return true; } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index f4dfda23..3d13d666 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -13,270 +13,129 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import steampower.TileEntityMachine; import universalelectricity.network.IPacketReceiver; +import basicpipes.conductors.TileEntityRod; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.IMechenical; import basicpipes.pipes.api.Liquid; +import basicpipes.conductors.*; import com.google.common.io.ByteArrayDataInput; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer, IInventory, ISidedInventory,IMechenical +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechenical { - //Maximum possible generation rate of watts in SECONDS - public int maxGenerateRate = 1000; - public int waterStored = 0; - public int steamStored = 0; - public int steamConsumed = 0; - public float position = 0; - public int count = 0; - //Current generation rate based on hull heat. In TICKS. - public float generateRate = 0; - //public TileEntityConductor connectedWire = null; - /** - * The number of ticks that a fresh copy of the currently-burning item would keep the furnace burning for - */ - public int genTime = 0; - /** - * The ItemStacks that hold the items currently being used in the battery box - */ - private ItemStack[] containingItems = new ItemStack[1]; - public boolean isConnected = false; - private boolean posT = true; - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public void updateEntity() - { - super.updateEntity(); - if(count++ >= 10){ - count = 0; - - float cPercent = (generateRate/10); - int cCount = 1; - if(cPercent > 25f) - { - cCount = 2; - } - if(cPercent > 50f) - { - cCount = 3; - } - if(cPercent > 75f) - { - cCount = 4; - } - if(generateRate > 0) - { - - if(position < 9f && posT ) - { - position+= cCount; - } - else - { - posT = false; - } - if(position > 1f && !posT ) - { - position-= cCount; - } - else - { - posT = true; - } - } - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if(ent instanceof TileEntitytopGen) - { - isConnected = true; - } - if(!this.worldObj.isRemote) - { - - - - //Adds time to runTime by consuming steam - if(this.genTime <= 0) - { - if(steamStored > 0) - { - --steamStored; - ++steamConsumed; - if(steamConsumed >= 10) - { - ++waterStored; - steamConsumed = 0; - } - genTime += 65; - } - } - - //Empties water from tank to buckets - if (this.containingItems[0] != null) - { - if(this.containingItems[0].getItem().shiftedIndex == Item.bucketEmpty.shiftedIndex) - { - if(this.waterStored > 0) - { - this.containingItems[0] = new ItemStack(Item.bucketWater,1); - --waterStored; - } - } - } - - //Starts generating electricity if the device is heated up - if (this.genTime > 0) - { - this.genTime --; - - - this.generateRate = (float)Math.min(this.generateRate+Math.min((this.generateRate)*0.01+0.015, 0.05F), this.maxGenerateRate/20); - - } + public 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 maxSteam = 10; + public int pos = 0; //max at 7 + private int tickCount = 0; + private int runTime = 0; + + private ForgeDirection frontDir; + private ForgeDirection backDir; + + public boolean running= false; - if(this.genTime <= 0) - { - this.generateRate = (float)Math.max(this.generateRate-0.05, 0); - } - } - } - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.genTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - this.steamConsumed = par1NBTTagCompound.getInteger("steamConsumed"); - this.steamStored = par1NBTTagCompound.getInteger("steamStored"); - this.generateRate = par1NBTTagCompound.getFloat("generateRate"); - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.containingItems = new ItemStack[this.getSizeInventory()]; - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - if (var5 >= 0 && var5 < this.containingItems.length) - { - this.containingItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.genTime); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - par1NBTTagCompound.setInteger("steamConsumed", (int)this.steamConsumed); - par1NBTTagCompound.setInteger("steamStored", (int)this.steamStored); - par1NBTTagCompound.setFloat("generateRate", (int)this.generateRate); - NBTTagList var2 = new NBTTagList(); - for (int var3 = 0; var3 < this.containingItems.length; ++var3) - { - if (this.containingItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.containingItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - par1NBTTagCompound.setTag("Items", var2); - } @Override - public int getStartInventorySide(ForgeDirection side) + public void updateEntity() { - return 0; + if(tickCount++ >=10) + { + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; + switch(meta) + { + case 0: nMeta = 2;break; + case 1: nMeta = 4;break; + case 2: nMeta = 3;break; + case 3: nMeta = 5;break; + } + frontDir = ForgeDirection.getOrientation(nMeta); + backDir = ForgeDirection.getOrientation(nMeta).getOpposite(); + if(!worldObj.isRemote) + { + if(this.runTime < 0 && this.steam > 0) + { + this.steam--; + this.runTime+=60; + }else + if(this.runTime > 0) + { + this.running = true; + this.runTime-=1; + }else + { + this.running = false; + } + 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) + { + this.pos = ((TileEntitySteamPiston) bb).pos + 1; + if(this.pos > 7) + { + pos = 0; + } + }else + if(this.running) + { + this.pos += 1; + if(this.pos > 7) + { + pos = 0; + } + } + } + } } + + + //------------------- + //Liquid and mechanical stuff + //---------------- @Override - public int getSizeInventorySide(ForgeDirection side) { return 0; } - @Override - public int getSizeInventory() { return this.containingItems.length; } - @Override - public ItemStack getStackInSlot(int par1) { return this.containingItems[par1]; } - @Override - public ItemStack decrStackSize(int par1, int par2) - { - if (this.containingItems[par1] != null) - { - ItemStack var3; - if (this.containingItems[par1].stackSize <= par2) - { - var3 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var3; - } - else - { - var3 = this.containingItems[par1].splitStack(par2); - if (this.containingItems[par1].stackSize == 0) - { - this.containingItems[par1] = null; - } - return var3; - } - } - else - { - return null; - } + public double getForce(ForgeDirection side) { + return aForce; } - @Override - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.containingItems[par1] != null) - { - ItemStack var2 = this.containingItems[par1]; - this.containingItems[par1] = null; - return var2; - } - else - { - return null; - } - } - @Override - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.containingItems[par1] = par2ItemStack; - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public String getInvName() { - return "SteamGen"; - } - @Override - public int getInventoryStackLimit() - { - return 64; - } - @Override - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - @Override - public void openChest() { } - @Override - public void closeChest() { } @Override - public int onProduceLiquid(Liquid type, int Vol, ForgeDirection side) { + public boolean canOutputSide(ForgeDirection side) { + if(frontDir == side) + { + return true; + } + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(backDir == side) + { + return true; + } + return false; + } + + @Override + public double applyForce(int force) { + return aForce; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { if(type == Liquid.WATER) { - if(this.waterStored >= 1) - { - this.waterStored--; + if(this.water > 0) + { + this.water -= 1; return 1; } } @@ -293,18 +152,36 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) { - int rejectedSteam = Math.max((this.steamStored + vol) - 100, 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; + return true; } - return vol; + return false; } @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + + @Override + 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); + this.steam += vol - rejectedSteam; + return rejectedSteam; + } + return 0; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { if(type == Liquid.STEAM) { return true; @@ -314,84 +191,71 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public int getStoredLiquid(Liquid type) { - if(type == Liquid.STEAM) - { - return this.steamStored; - } if(type == Liquid.WATER) { - return this.waterStored; + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; } return 0; } @Override public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return this.maxWater; + }else if(type == Liquid.STEAM) { - return 100; + return this.maxSteam; } return 0; } - @Override + //------------------- + //Data + //---------------- public Object[] getSendData() { - return new Object[]{(int)waterStored,(int)steamStored,(int)steamConsumed,(float)generateRate,(int)genTime}; + return new Object[]{steam,water,force,aForce,pos}; } - @Override - public void handlePacketData(NetworkManager network, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { try { - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - steamConsumed = dataStream.readInt(); - generateRate = dataStream.readFloat(); - genTime = dataStream.readInt(); + this.steam = dataStream.readInt(); + this.water = dataStream.readInt(); + this.force = dataStream.readInt(); + this.aForce = dataStream.readInt(); + this.pos = dataStream.readInt(); } catch(Exception e) { + System.out.print("SteamPistonDataFail"); e.printStackTrace(); } } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) - { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - @Override - public int getRPM(ForgeDirection side) { - // TODO Auto-generated method stub - return 100; - } - @Override - public boolean canOutputSide(ForgeDirection side) { - // TODO Auto-generated method stub - return true; - } - @Override - public boolean canInputSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public int useRPM(int RPM) { - // TODO Auto-generated method stub - return 0; - } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.runTime = par1NBTTagCompound.getShort("time"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.water = par1NBTTagCompound.getInteger("water"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setShort("time", (short)this.runTime); + par1NBTTagCompound.setInteger("steam", (int)this.steam); + par1NBTTagCompound.setInteger("water", (int)this.water); + + } + } diff --git a/src/minecraft/basicpipes/ModelGearRod.java b/src/minecraft/basicpipes/ModelGearRod.java index 56201a90..6bd69af4 100644 --- a/src/minecraft/basicpipes/ModelGearRod.java +++ b/src/minecraft/basicpipes/ModelGearRod.java @@ -113,8 +113,8 @@ public class ModelGearRod extends ModelBase { Rod.render(f5); Rod2.render(f5); - Rod.rotateAngleZ+= r; - Rod2.rotateAngleZ+= r; + Rod.rotateAngleZ+= (r)*45; + Rod2.rotateAngleZ+= (r)*45; //TODO add rotation to rods front.render(f5); back.render(f5); diff --git a/src/minecraft/basicpipes/RenderGearRod.java b/src/minecraft/basicpipes/RenderGearRod.java index f306e4dd..d1fe637a 100644 --- a/src/minecraft/basicpipes/RenderGearRod.java +++ b/src/minecraft/basicpipes/RenderGearRod.java @@ -39,7 +39,7 @@ public class RenderGearRod extends TileEntitySpecialRenderer case 3:GL11.glRotatef(180f, 0f, 1f, 0f);break; case 4:GL11.glRotatef(270f, 0f, 1f, 0f);break; } - model.render(0.0625F,tileEntity.rotation); + model.render(0.0625F,tileEntity.pos); GL11.glPopMatrix(); } diff --git a/src/minecraft/steampower/GUIGenerator.java b/src/minecraft/steampower/GUIGenerator.java index b73ea08d..b0e9d6e7 100644 --- a/src/minecraft/steampower/GUIGenerator.java +++ b/src/minecraft/steampower/GUIGenerator.java @@ -40,29 +40,24 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; displayText = "Not Connected"; } else*/ - if(tileEntity.generateRate*20 <= 0) + if(!tileEntity.running) { - if(tileEntity.steamStored> 0) + if(tileEntity.steam> 0) { - displayText = "Power Full"; + displayText = "OutPut Full"; } - if(tileEntity.steamStored<= 0) + if(tileEntity.steam<= 0) { displayText = "No Steam"; } } - - else if(tileEntity.generateRate*20 < 20) - { - displayText = "Warming UP: "+(int)(tileEntity.generateRate*100)+"%"; - } else { //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); - displayText = ElectricInfo.getDisplay(ElectricInfo.getWatts(tileEntity.generateRate*20, tileEntity.getVoltage()), ElectricUnit.WATT); + displayText = "Force: "+tileEntity.force+"N"; } - displayText2 = "water" + "-" + tileEntity.waterStored; - displayText3 = "steam" + "-" + tileEntity.steamStored; + displayText2 = "water" + "-" + tileEntity.water; + displayText3 = "steam" + "-" + tileEntity.steam; 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); diff --git a/src/minecraft/steampower/RenderSteamEngine.java b/src/minecraft/steampower/RenderSteamEngine.java index a8f66ae9..de2ab5da 100644 --- a/src/minecraft/steampower/RenderSteamEngine.java +++ b/src/minecraft/steampower/RenderSteamEngine.java @@ -25,8 +25,8 @@ public class RenderSteamEngine extends TileEntitySpecialRenderer GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - float p = ((TileEntitySteamPiston)tileEntity).position; - boolean cc = ((TileEntitySteamPiston)tileEntity).isConnected; + float p = ((TileEntitySteamPiston)tileEntity).pos; + //boolean cc = ((TileEntitySteamPiston)tileEntity).isConnected; int meta = ((TileEntityMachine) tileEntity).getDirection(); switch(meta) { @@ -35,11 +35,10 @@ public class RenderSteamEngine extends TileEntitySpecialRenderer case 3:GL11.glRotatef(180f, 0f, 1f, 0f);break; case 4:GL11.glRotatef(270f, 0f, 1f, 0f);break; } - if(cc) - { + model.renderTop(0.0625F); model.renderMid(0.0625F,p); - } + model.renderBot(0.0625F); diff --git a/src/minecraft/steampower/SteamClientProxy.java b/src/minecraft/steampower/SteamClientProxy.java index 6c133f63..e5201e88 100644 --- a/src/minecraft/steampower/SteamClientProxy.java +++ b/src/minecraft/steampower/SteamClientProxy.java @@ -4,6 +4,7 @@ package steampower; import net.minecraftforge.client.MinecraftForgeClient; import steampower.boiler.TileEntityBoiler; import steampower.burner.TileEntityFireBox; +import steampower.geared.RenderGearPiston; import steampower.turbine.TileEntityGen; import steampower.turbine.TileEntitySteamPiston; import cpw.mods.fml.client.registry.ClientRegistry; @@ -20,7 +21,7 @@ public class SteamClientProxy extends SteamProxy{ { ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderSteamEngine()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); } public void postInit() diff --git a/src/minecraft/steampower/geared/ModelGearPiston.java b/src/minecraft/steampower/geared/ModelGearPiston.java new file mode 100644 index 00000000..3e37e874 --- /dev/null +++ b/src/minecraft/steampower/geared/ModelGearPiston.java @@ -0,0 +1,324 @@ +// Date: 10/1/2012 12:32:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower.geared; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGearPiston extends ModelBase +{ + //fields + ModelRenderer PistonCover; + ModelRenderer RSpiston; + ModelRenderer LSpiston; + ModelRenderer RodPiston; + ModelRenderer Base; + ModelRenderer Front; + ModelRenderer BackCC; + ModelRenderer RightPipe; + ModelRenderer FrontCC; + ModelRenderer LeftCC; + ModelRenderer FrontPipe; + ModelRenderer Right; + ModelRenderer RightCC; + ModelRenderer Back; + ModelRenderer BackPipe; + ModelRenderer Left; + ModelRenderer LeftPipe; + ModelRenderer RigthF4; + ModelRenderer LeftF4; + ModelRenderer LeftF3; + ModelRenderer LeftF2; + ModelRenderer LeftF1; + ModelRenderer RigthF3; + ModelRenderer RigthF2; + ModelRenderer RigthF1; + ModelRenderer RigthGCC; + ModelRenderer RightSlide; + ModelRenderer LeftSlide; + ModelRenderer RightRod2; + ModelRenderer LeftGCC; + ModelRenderer LeftRod2; + ModelRenderer LeftSlide2; + + public ModelGearPiston() + { + textureWidth = 128; + textureHeight = 128; + + PistonCover = new ModelRenderer(this, 13, 31); + PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); + PistonCover.setRotationPoint(-3F, 20F, 0F); + PistonCover.setTextureSize(128, 128); + PistonCover.mirror = true; + setRotation(PistonCover, 0F, 0F, 0F); + RSpiston = new ModelRenderer(this, 0, 32); + RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); + RSpiston.setRotationPoint(1F, 3F, 0F); + RSpiston.setTextureSize(128, 128); + RSpiston.mirror = true; + setRotation(RSpiston, 0F, 0F, 0F); + LSpiston = new ModelRenderer(this, 0, 32); + LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); + LSpiston.setRotationPoint(2F, 3F, 0F); + LSpiston.setTextureSize(128, 128); + LSpiston.mirror = true; + setRotation(LSpiston, 0F, 0F, 0F); + RodPiston = new ModelRenderer(this, 0, 59); + RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); + RodPiston.setRotationPoint(0F, 8F, 0F); + RodPiston.setTextureSize(128, 128); + RodPiston.mirror = true; + setRotation(RodPiston, 0F, 0F, 0F); + Base = new ModelRenderer(this, 12, 49); + Base.addBox(0F, 0F, 0F, 10, 5, 10); + Base.setRotationPoint(-5F, 19F, -5F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Front = new ModelRenderer(this, 28, 68); + Front.addBox(-3F, 0F, 0F, 6, 12, 1); + Front.setRotationPoint(0F, 12F, -7F); + Front.setTextureSize(128, 128); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + BackCC = new ModelRenderer(this, 43, 68); + BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); + BackCC.setRotationPoint(0F, 16F, 6F); + BackCC.setTextureSize(128, 128); + BackCC.mirror = true; + setRotation(BackCC, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 12, 87); + RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); + RightPipe.setRotationPoint(-6F, 14F, 0F); + RightPipe.setTextureSize(128, 128); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + FrontCC = new ModelRenderer(this, 43, 68); + FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); + FrontCC.setRotationPoint(0F, 16F, -7F); + FrontCC.setTextureSize(128, 128); + FrontCC.mirror = true; + setRotation(FrontCC, 0F, 0F, 0F); + LeftCC = new ModelRenderer(this, 43, 74); + LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); + LeftCC.setRotationPoint(7F, 16F, 0F); + LeftCC.setTextureSize(128, 128); + LeftCC.mirror = true; + setRotation(LeftCC, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 28, 82); + FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); + FrontPipe.setRotationPoint(0F, 14F, -6F); + FrontPipe.setTextureSize(128, 128); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + Right = new ModelRenderer(this, 12, 68); + Right.addBox(0F, 0F, -3F, 1, 12, 6); + Right.setRotationPoint(-7F, 12F, 0F); + Right.setTextureSize(128, 128); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + RightCC = new ModelRenderer(this, 43, 74); + RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); + RightCC.setRotationPoint(-7F, 16F, 0F); + RightCC.setTextureSize(128, 128); + RightCC.mirror = true; + setRotation(RightCC, 0F, 0F, 0F); + Back = new ModelRenderer(this, 28, 68); + Back.addBox(-3F, 0F, 0F, 6, 12, 1); + Back.setRotationPoint(0F, 12F, 6F); + Back.setTextureSize(128, 128); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 28, 82); + BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); + BackPipe.setRotationPoint(0F, 14F, 6F); + BackPipe.setTextureSize(128, 128); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + Left = new ModelRenderer(this, 12, 68); + Left.addBox(0F, 0F, -3F, 1, 12, 6); + Left.setRotationPoint(6F, 12F, 0F); + Left.setTextureSize(128, 128); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 12, 87); + LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); + LeftPipe.setRotationPoint(6F, 14F, 0F); + LeftPipe.setTextureSize(128, 128); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + RigthF4 = new ModelRenderer(this, 0, 56); + RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); + RigthF4.setRotationPoint(-8F, 0F, 0F); + RigthF4.setTextureSize(128, 128); + RigthF4.mirror = true; + setRotation(RigthF4, 0F, 0F, 0F); + LeftF4 = new ModelRenderer(this, 0, 56); + LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); + LeftF4.setRotationPoint(8F, 0F, 0F); + LeftF4.setTextureSize(128, 128); + LeftF4.mirror = true; + setRotation(LeftF4, 0.7853982F, 0F, 0F); + LeftF3 = new ModelRenderer(this, 0, 56); + LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); + LeftF3.setRotationPoint(8F, 0F, 0F); + LeftF3.setTextureSize(128, 128); + LeftF3.mirror = true; + setRotation(LeftF3, 0.7853982F, 0F, 0F); + LeftF2 = new ModelRenderer(this, 0, 56); + LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); + LeftF2.setRotationPoint(8F, 0F, 0F); + LeftF2.setTextureSize(128, 128); + LeftF2.mirror = true; + setRotation(LeftF2, 0.7853982F, 0F, 0F); + LeftF1 = new ModelRenderer(this, 0, 56); + LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); + LeftF1.setRotationPoint(8F, 0F, 0F); + LeftF1.setTextureSize(128, 128); + LeftF1.mirror = true; + setRotation(LeftF1, 0.7853982F, 0F, 0F); + RigthF3 = new ModelRenderer(this, 0, 56); + RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); + RigthF3.setRotationPoint(-8F, 0F, 0F); + RigthF3.setTextureSize(128, 128); + RigthF3.mirror = true; + setRotation(RigthF3, 0F, 0F, 0F); + RigthF2 = new ModelRenderer(this, 0, 56); + RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); + RigthF2.setRotationPoint(-8F, 0F, 0F); + RigthF2.setTextureSize(128, 128); + RigthF2.mirror = true; + setRotation(RigthF2, 0F, 0F, 0F); + RigthF1 = new ModelRenderer(this, 0, 56); + RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); + RigthF1.setRotationPoint(-8F, 0F, 0F); + RigthF1.setTextureSize(128, 128); + RigthF1.mirror = true; + setRotation(RigthF1, 0F, 0F, 0F); + RigthGCC = new ModelRenderer(this, 12, 18); + RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); + RigthGCC.setRotationPoint(-6F, 0F, 0F); + RigthGCC.setTextureSize(128, 128); + RigthGCC.mirror = true; + setRotation(RigthGCC, 0F, 0F, 0F); + RightSlide = new ModelRenderer(this, 0, 44); + RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); + RightSlide.setRotationPoint(-4F, 0F, 0F); + RightSlide.setTextureSize(128, 128); + RightSlide.mirror = true; + setRotation(RightSlide, 0F, 0F, 0F); + LeftSlide2 = new ModelRenderer(this, 0, 27); + LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); + LeftSlide2.setRotationPoint(-3F, 0F, 0F); + LeftSlide2.setTextureSize(128, 128); + LeftSlide2.mirror = true; + setRotation(LeftSlide2, 0F, 0F, 0F); + RightRod2 = new ModelRenderer(this, 0, 20); + RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); + RightRod2.setRotationPoint(-6F, 0F, 0F); + RightRod2.setTextureSize(128, 128); + RightRod2.mirror = true; + setRotation(RightRod2, 0F, 0F, 0F); + LeftGCC = new ModelRenderer(this, 24, 18); + LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); + LeftGCC.setRotationPoint(7F, 0F, 0F); + LeftGCC.setTextureSize(128, 128); + LeftGCC.mirror = true; + setRotation(LeftGCC, 0.7853982F, 0F, 0F); + LeftRod2 = new ModelRenderer(this, 0, 20); + LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); + LeftRod2.setRotationPoint(7F, 0F, 0F); + 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); + } + public void renderBody(float f5) + { + Base.render(f5); + PistonCover.render(f5); + + } + public void renderGear(float f5) + { + //Rod connectors + LeftF4.render(f5); + LeftF3.render(f5); + LeftF2.render(f5); + LeftF1.render(f5); + RigthF4.render(f5); + RigthF3.render(f5); + RigthF2.render(f5); + RigthF1.render(f5); + RigthGCC.render(f5); + LeftGCC.render(f5); + } + public void renderR(float f5,int pos) + { + int change = pos/2; + + //Piston Arm + RSpiston.render(f5); + LSpiston.render(f5); + RodPiston.render(f5); + RodPiston.setRotationPoint(0, 8f-change, 0); + //GearShaft + RightSlide.render(f5); + LeftSlide.render(f5); + RightRod2.render(f5); + LeftRod2.render(f5); + LeftSlide2.render(f5); + } + public void renderLeft(float f5) + { + Left.render(f5); + LeftPipe.render(f5); + LeftCC.render(f5); + } + public void renderRight(float f5) + { + Right.render(f5); + RightCC.render(f5); + RightPipe.render(f5); + } + public void renderFront(float f5) + { + Front.render(f5); + FrontCC.render(f5); + FrontPipe.render(f5); + } + public void renderBack(float f5) + { + Back.render(f5); + BackPipe.render(f5); + BackCC.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/steampower/geared/RenderGearPiston.java b/src/minecraft/steampower/geared/RenderGearPiston.java new file mode 100644 index 00000000..cfb4dfd7 --- /dev/null +++ b/src/minecraft/steampower/geared/RenderGearPiston.java @@ -0,0 +1,52 @@ +package steampower.geared; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.SteamPowerMain; +import steampower.turbine.TileEntitySteamPiston; + +public class RenderGearPiston extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGearPiston model; + + public RenderGearPiston() + { + model = new ModelGearPiston(); + } + public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + + 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.renderGear(0.0625F); + model.renderR(0.0625F,tileEntity.pos); + model.renderBody(0.0625F); + model.renderBack(0.0625F); + model.renderFront(0.0625F); + model.renderLeft(0.0625F); + model.renderRight(0.0625F); + GL11.glPopMatrix(); + } + + + @Override + public void renderTileEntityAt(TileEntity var1, double d, double d1, + double d2, float d3) { + this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); + + } + +} \ No newline at end of file diff --git a/src/minecraft/textures/GearShaftPiston.png b/src/minecraft/textures/GearShaftPiston.png new file mode 100644 index 0000000000000000000000000000000000000000..fa16d1d6bc1d035e3855f439bb3c6335495bb65c GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!T#PKTitjb45_&F z_Kt1Pp#TxK3*vQB<_Fk}3~~;hisPQ1wQ%p$=z@|P4AL7C4a`#5loUB_j1(=G2X%;i zczW-5oQfjQR0#MxG3FPOJb(GkfA7D)xA#2rc;~u_+Y@f6{oZe5YbQTv?)rTFbAF-? z2SXZ)tNz95pRYetc3f0`ef6GIm(v)!QunV>&0vpWU}E^<6|{|IO_JILrWc;9C(1+@ zyz$`|J-?bo%VDR9?`9KU{g*yB~knRujJdN6h8pnc+cq`egf;CH~&cdGz?YLS2Rb?jirf%92GFoNSkV9ieE* ztiZs*z|_DXkS&@ZnV31` zJqkOneZbPX^XL65JM|l*FJ&?Ut#sJ!oFL6pAfeR0z5cp?!Hc(14BO)vSDpLwsPMQJ zqZY$NmDsfm%hMRGt}u1Uui*FL1_jSAOXd*X!ZapPpqmU%A6T}91;_$P0D}(_-7r$> Z2lMyImjd>!kbead@^tlcS?83{1OS^U6FL9@ literal 0 HcmV?d00001 From 3d238fdd382b0d690a0b5cc7cccc5d7f79d6622f Mon Sep 17 00:00:00 2001 From: Rseifert Date: Tue, 2 Oct 2012 23:27:18 -0400 Subject: [PATCH 088/115] 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 Date: Wed, 3 Oct 2012 13:16:44 -0400 Subject: [PATCH 089/115] Steam Piston & rod now translate energy correctly Took some time but i got it too work, the steam piston will generate mechanical energy and then traslate that energy to a rod which will translate it to the next and so on. Now too just create the generator and i'm done. --- src/common/basicpipes/BasicPipesMain.java | 6 + src/common/basicpipes/PipeProxy.java | 4 +- .../basicpipes/conductors/BlockRod.java | 14 ++- .../basicpipes/conductors/ItemGuage.java | 17 +-- .../basicpipes/conductors/TileEntityRod.java | 103 +++++++++++++++--- .../{IMechenical.java => IMechanical.java} | 12 +- .../turbine/TileEntitySteamPiston.java | 68 ++++++++---- .../steampower/turbine/TileEntitytopGen.java | 74 +------------ src/minecraft/basicpipes/ModelGearRod.java | 7 +- src/minecraft/basicpipes/PipeClientProxy.java | 6 +- src/minecraft/basicpipes/RenderGearRod.java | 9 +- src/minecraft/steampower/GUISteamPiston.java | 13 ++- .../steampower/geared/RenderGearPiston.java | 1 - 13 files changed, 186 insertions(+), 148 deletions(-) rename src/common/basicpipes/pipes/api/{IMechenical.java => IMechanical.java} (67%) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index a69401f8..cd6711a4 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -12,8 +12,11 @@ import basicpipes.conductors.BlockRod; import basicpipes.conductors.ItemGuage; import basicpipes.conductors.ItemParts; import basicpipes.conductors.ItemPipe; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; import basicpipes.machines.BlockMachine; import basicpipes.machines.BlockValve; +import basicpipes.machines.TileEntityPump; import basicpipes.pipes.api.Liquid; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -82,6 +85,9 @@ public class BasicPipesMain{ { //register proxy.init(); + GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); + GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); //Names and lang stuff //Pipe Names for(int i =0; i < Liquid.values().length;i++) diff --git a/src/common/basicpipes/PipeProxy.java b/src/common/basicpipes/PipeProxy.java index c5621d9b..39009dbb 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/src/common/basicpipes/PipeProxy.java @@ -18,9 +18,7 @@ public class PipeProxy implements IGuiHandler } public void init() { - GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); - GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); - GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); + } public void postInit() { diff --git a/src/common/basicpipes/conductors/BlockRod.java b/src/common/basicpipes/conductors/BlockRod.java index e2f39ec9..5098f8a4 100644 --- a/src/common/basicpipes/conductors/BlockRod.java +++ b/src/common/basicpipes/conductors/BlockRod.java @@ -28,14 +28,18 @@ public class BlockRod extends universalelectricity.prefab.BlockMachine { int angle= MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; int meta = 0; ForgeDirection idr; + int dZ = 0; + int dX = 0; switch(angle) { - case 0: meta = 2;break; - case 1: meta = 5;break; - case 2: meta = 3;break; - case 3: meta = 4;break; + case 0: meta = 2;dZ--;break; + case 1: meta = 5;dX--;break; + case 2: meta = 3;dZ++;break; + case 3: meta = 4;dX++;break; } - world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); + //ForgeDirection dir = ForgeDirection.getOrientation(meta); + world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); + // world.setBlockAndMetadataWithUpdate(i+dir.offsetX, j, k+dir.offsetZ,blockID, meta, true); } @Override public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index 0ec3ab71..a1f56831 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -3,7 +3,10 @@ package basicpipes.conductors; import java.util.ArrayList; import java.util.List; +import steampower.turbine.TileEntitySteamPiston; + import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.IMechanical; import basicpipes.pipes.api.Liquid; import net.minecraft.src.*; @@ -65,19 +68,19 @@ public class ItemGuage extends Item player.addChatMessage(print); return true; - }/** - if(blockEntity instanceof TileEntityRod) + } + if(blockEntity instanceof IMechanical) { - TileEntityRod rod = (TileEntityRod) blockEntity; - double steam = rod.loadRPM; - double pressure = rod.getForce(ForgeDirection.getOrientation(par7)); + IMechanical rod = (IMechanical) blockEntity; + int steam = rod.getForce(); + int pressure = rod.getAnimationPos(); String print = "Error"; - print = " " + steam +"Load "+pressure+"RPM"; + print = " " + steam +"N "+pressure*45+"degrees"; player.addChatMessage(print); return true; - }*/ + } } } diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index ac9bda10..96c90821 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -1,54 +1,123 @@ package basicpipes.conductors; -import com.google.common.io.ByteArrayDataInput; - import net.minecraft.src.EntityPlayer; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; -import net.minecraft.src.World; import net.minecraftforge.common.ForgeDirection; +import steampower.SteamPowerMain; import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; import universalelectricity.prefab.Vector3; -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.IMechenical; -import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.IMechanical; -public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechenical { +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechanical { public int pos = 0; - + private int force = 0; + public int aForce = 0; + public int forceMax = 1000; + private int tickCount = 0; + private int posCount = 0; + + private ForgeDirection frontDir; + private ForgeDirection backDir; + + private TileEntity bb; + private TileEntity ff; @Override - public double getForce(ForgeDirection side) { - return 0; + public void updateEntity() + { + super.updateEntity(); + if(tickCount++ >=10) + { tickCount = 0; + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + frontDir = ForgeDirection.getOrientation(meta); + backDir = ForgeDirection.getOrientation(meta).getOpposite(); + bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord, zCoord+backDir.offsetZ); + ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord, zCoord+frontDir.offsetZ); + if(force > 0) + { + int posCountA = (forceMax/force) & 10; + if(posCount++ >= posCountA) + { + pos ++;if(pos > 7){pos = 0;}; + } + } + if(bb instanceof TileEntityRod) + { + this.pos = ((IMechanical)bb).getAnimationPos(); + } + if(!worldObj.isRemote) + { + aForce = Math.max(force - 10,0); + if(ff instanceof IMechanical) + { + if(((IMechanical) ff).canInputSide(backDir)) + { + ((IMechanical) ff).applyForce(aForce); + } + } + + Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force,aForce}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + } + } + } + @Override + public int getForceSide(ForgeDirection side) { + return aForce; } @Override public boolean canOutputSide(ForgeDirection side) { - // TODO Auto-generated method stub + if(side == frontDir) + { + return true; + } return false; } @Override public boolean canInputSide(ForgeDirection side) { - // TODO Auto-generated method stub + if(side == backDir) + { + return true; + } return false; } @Override - public double applyForce(int force) { - // TODO Auto-generated method stub - return 0; + public int applyForce(int force) { + this.force = force; + return force; } @Override public void handlePacketData(NetworkManager network, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { - // TODO Auto-generated method stub + try + { + this.force = dataStream.readInt(); + this.aForce = dataStream.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + System.out.print("MechRodDataFailure \n"); + } } + @Override + public int getAnimationPos() { + return this.pos; + } + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } } diff --git a/src/common/basicpipes/pipes/api/IMechenical.java b/src/common/basicpipes/pipes/api/IMechanical.java similarity index 67% rename from src/common/basicpipes/pipes/api/IMechenical.java rename to src/common/basicpipes/pipes/api/IMechanical.java index 9b4391f4..4577388e 100644 --- a/src/common/basicpipes/pipes/api/IMechenical.java +++ b/src/common/basicpipes/pipes/api/IMechanical.java @@ -2,13 +2,14 @@ package basicpipes.pipes.api; import net.minecraftforge.common.ForgeDirection; // mechanical -public interface IMechenical { +public interface IMechanical { /** * * @param side the rpm is coming from * @return rpm that the block is running at */ - public double getForce(ForgeDirection side); + public int getForceSide(ForgeDirection side); + public int getForce(); /** * * @param side @@ -26,5 +27,10 @@ public interface IMechenical { * @param RPM being applied to this machine * @return the rpm after the load has been applied */ - public double applyForce(int force); + public int applyForce(int force); + /** + * not required but is handy to get animation position of some mechanical block + * @return int between 0 -7 + */ + public int getAnimationPos(); } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 66739312..98d7d28b 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -16,15 +16,15 @@ import universalelectricity.network.IPacketReceiver; import basicpipes.conductors.TileEntityRod; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IMechenical; +import basicpipes.pipes.api.IMechanical; import basicpipes.pipes.api.Liquid; import basicpipes.conductors.*; import com.google.common.io.ByteArrayDataInput; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechenical +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechanical { - private int force = 0; + public int force = 0; public int aForce = 0; private int frictionLoad = 10; public int steam = 0; @@ -36,6 +36,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR private int runTime = 0; private int genRate = 0;//max 100 private int posCount = 0; + public int tCount = 0; private ForgeDirection frontDir; private ForgeDirection backDir; public TileEntity bb; @@ -48,11 +49,13 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { super.updateEntity(); if(tickCount++ >=10) - { - //++runTime; - //pos += 1;if(pos > 7){pos =0;} //for testing + {tickCount = 0; + + ++tCount;if(tCount > 120){tCount = 0;} + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); int nMeta = 0; + switch(meta) { case 0: nMeta = 2;break; @@ -82,34 +85,39 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } if(bb instanceof TileEntitySteamPiston) { - this.pos = ((TileEntitySteamPiston) bb).pos + 1; + this.pos = ((TileEntitySteamPiston) bb).getAnimationPos() + 1; if(this.pos > 7){pos = 0;} } if(!worldObj.isRemote) { - if(this.runTime <= 0 && this.steam > 0) + if(this.runTime < 1 && this.steam > 0) { this.steam--; - this.runTime+=30; - }else + this.runTime=60; + } if(this.runTime > 0) { + genRate=Math.min(genRate + 1, 100); this.runTime-=1; - this.force = genRate * 10; + this.force = Math.min(genRate * 10,1000); + this.aForce = Math.max(force - this.frictionLoad,0); } - if(ff instanceof IMechenical) + if(runTime == 0 && this.steam == 0) { - ((IMechenical) ff).applyForce(this.aForce); + genRate = Math.max(genRate--, 0); + force= Math.max(force-=10, 0);; } - if(genRate <=0 && runTime > 0) + + if(ff instanceof IMechanical) { - genRate++; - }else - { - genRate--; + if(((IMechanical) ff).canInputSide(backDir)) + { + ((IMechanical) ff).applyForce(this.aForce); + } } + } } } @@ -119,7 +127,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR //Liquid and mechanical stuff //---------------- @Override - public double getForce(ForgeDirection side) { + public int getForceSide(ForgeDirection side) { return aForce; } @@ -142,7 +150,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } @Override - public double applyForce(int force) { + public int applyForce(int force) { this.aForce = this.force + force- frictionLoad; return aForce; } @@ -261,7 +269,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); - this.runTime = par1NBTTagCompound.getShort("time"); + this.runTime = par1NBTTagCompound.getInteger("time"); + this.genRate = par1NBTTagCompound.getInteger("gen"); this.steam = par1NBTTagCompound.getInteger("steam"); this.water = par1NBTTagCompound.getInteger("water"); } @@ -272,10 +281,25 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("time", (short)this.runTime); + par1NBTTagCompound.setInteger("time", (int)this.runTime); + par1NBTTagCompound.setInteger("gen", (int)this.genRate); par1NBTTagCompound.setInteger("steam", (int)this.steam); par1NBTTagCompound.setInteger("water", (int)this.water); } + + + @Override + public int getAnimationPos() { + // TODO Auto-generated method stub + return this.pos; + } + + + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } } diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/src/common/steampower/turbine/TileEntitytopGen.java index d57cd220..9c6e957e 100644 --- a/src/common/steampower/turbine/TileEntitytopGen.java +++ b/src/common/steampower/turbine/TileEntitytopGen.java @@ -7,76 +7,6 @@ import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; -public class TileEntitytopGen extends TileEntityMachine implements ILiquidConsumer,ILiquidProducer { -public TileEntitySteamPiston genB = null; - public void updateEntity() - { - if(!this.worldObj.isRemote) - { - super.updateEntity(); - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, xCoord); - if(ent instanceof TileEntitySteamPiston) - { - genB = (TileEntitySteamPiston)ent; - } - } - } - @Override - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.onProduceLiquid(type, maxVol, side) : 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return genB !=null ? genB.canProduceLiquid(type, side) : false; - } - - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - // TODO Auto-generated method stub - return genB !=null ? genB.onReceiveLiquid(type, vol, side) : vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return genB !=null ? genB.canRecieveLiquid(type, side): false; - } - - @Override - public int getStoredLiquid(Liquid type) { - // TODO Auto-generated method stub - return genB !=null ? genB.getStoredLiquid(type): 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - // TODO Auto-generated method stub - return genB !=null ? genB.getLiquidCapacity(type): 0; - } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) - { - if(type == Liquid.WATER) - { - return true; - } - return false; - } +public class TileEntitytopGen extends TileEntityMachine { + } diff --git a/src/minecraft/basicpipes/ModelGearRod.java b/src/minecraft/basicpipes/ModelGearRod.java index 6bd69af4..7e85322f 100644 --- a/src/minecraft/basicpipes/ModelGearRod.java +++ b/src/minecraft/basicpipes/ModelGearRod.java @@ -109,12 +109,13 @@ public class ModelGearRod extends ModelBase Rod2.mirror = true; setRotation(Rod2, 0F, 0F, 0.7853982F); } - public void render(float f5,float r) + public void render(float f5,int r) { + + Rod.rotateAngleZ= 45 * r; + Rod2.rotateAngleZ= Rod.rotateAngleZ + 45; Rod.render(f5); Rod2.render(f5); - Rod.rotateAngleZ+= (r)*45; - Rod2.rotateAngleZ+= (r)*45; //TODO add rotation to rods front.render(f5); back.render(f5); diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index 7d0ede83..d25e7b7e 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -22,8 +22,8 @@ public class PipeClientProxy extends PipeProxy @Override public void init() { - ClientRegistry.registerTileEntity(TileEntityPipe.class, "pipe", new RenderPipe()); - ClientRegistry.registerTileEntity(TileEntityPump.class, "pump", new RenderPump()); - ClientRegistry.registerTileEntity(TileEntityRod.class, "rod", new RenderGearRod()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPump.class, new RenderPump()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod()); } } diff --git a/src/minecraft/basicpipes/RenderGearRod.java b/src/minecraft/basicpipes/RenderGearRod.java index d1fe637a..9531d470 100644 --- a/src/minecraft/basicpipes/RenderGearRod.java +++ b/src/minecraft/basicpipes/RenderGearRod.java @@ -5,6 +5,8 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; +import steampower.geared.ModelGearPiston; + import basicpipes.conductors.TileEntityPipe; import basicpipes.conductors.TileEntityRod; import basicpipes.machines.TileEntityPump; @@ -13,23 +15,18 @@ import basicpipes.pipes.api.Liquid; public class RenderGearRod extends TileEntitySpecialRenderer { - int type = 0; private ModelGearRod model; - public RenderGearRod() { model = new ModelGearRod(); } - public void renderAModelAt(TileEntityRod tileEntity, double d, double d1, double d2, float f) { - - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); bindTextureByName("/textures/GearRod.png"); - GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); switch(meta) { case 0: GL11.glRotatef(90f, 1f, 0f, 0f);break; diff --git a/src/minecraft/steampower/GUISteamPiston.java b/src/minecraft/steampower/GUISteamPiston.java index 19bd62aa..f3e314df 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -46,7 +46,7 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; { if(tileEntity.steam> 0) { - displayText = "OutPut Full"; + displayText = "No Load"; } if(tileEntity.steam<= 0) { @@ -56,17 +56,18 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; else { //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); - displayText = "ForceOut: "+tileEntity.aForce+"N"; + displayText = "ForceOut: "+tileEntity.force+"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();} + + displayText4 = "Debug:Time" + "=" + tileEntity.tCount; + 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(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/geared/RenderGearPiston.java b/src/minecraft/steampower/geared/RenderGearPiston.java index cfb4dfd7..5e09a922 100644 --- a/src/minecraft/steampower/geared/RenderGearPiston.java +++ b/src/minecraft/steampower/geared/RenderGearPiston.java @@ -10,7 +10,6 @@ import steampower.turbine.TileEntitySteamPiston; public class RenderGearPiston extends TileEntitySpecialRenderer { - int type = 0; private ModelGearPiston model; public RenderGearPiston() From 6d73eede9f2263240be1e33625c8cec21b21a2b6 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 3 Oct 2012 13:43:52 -0400 Subject: [PATCH 090/115] Generator now works and outputs power Well since i'm using UE lite i think it outputs power, I have more testing to too. Right now my only indication is the generator will place a stone block above it when its genrate is above 0. --- .../steampower/turbine/BlockGenerator.java | 26 ++ .../steampower/turbine/TileEntityGen.java | 184 ++++++++++--- src/minecraft/steampower/ModelToyEngine.java | 242 ------------------ src/minecraft/steampower/RenderGenerator.java | 8 + src/minecraft/steampower/RenderToyEngine.java | 29 --- 5 files changed, 187 insertions(+), 302 deletions(-) delete mode 100644 src/minecraft/steampower/ModelToyEngine.java delete mode 100644 src/minecraft/steampower/RenderToyEngine.java diff --git a/src/common/steampower/turbine/BlockGenerator.java b/src/common/steampower/turbine/BlockGenerator.java index cc4017e0..4bcb0997 100644 --- a/src/common/steampower/turbine/BlockGenerator.java +++ b/src/common/steampower/turbine/BlockGenerator.java @@ -2,9 +2,14 @@ package steampower.turbine; import java.util.ArrayList; +import steampower.TileEntityMachine; + 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; @@ -19,6 +24,27 @@ public class BlockGenerator extends universalelectricity.prefab.BlockMachine { { itemList.add(new ItemStack(this, 1,0)); } + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving) + { + int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); + } + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if(metadata < 3) + { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata+angle); + } + else + { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); + } + return true; + } @Override public boolean isOpaqueCube() { diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index 89a3800a..bbadeb66 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -3,15 +3,91 @@ package steampower.turbine; import net.minecraft.src.EntityPlayer; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import steampower.TileEntityMachine; +import universalelectricity.electricity.ElectricityManager; +import universalelectricity.implement.IConductor; +import universalelectricity.implement.IElectricityProducer; import universalelectricity.network.IPacketReceiver; +import basicpipes.pipes.api.IMechanical; + import com.google.common.io.ByteArrayDataInput; -public class TileEntityGen extends TileEntityMachine implements IPacketReceiver +public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, IMechanical,IElectricityProducer { - + ForgeDirection facing; + + public int force = 0; + public int aForce = 0; + public int pos = 0; + public int disableTicks = 0; + public double genAmmount = 0; + public int tCount = 0; + public boolean empProf = false; + + IConductor[] wires = {null,null,null,null,null,null}; + + @Override + public void updateEntity() + { + + if(tCount++ >= 10) + {tCount = 0; + super.updateEntity(); + this.genAmmount = (force * 1.2)/this.getVoltage(); + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; + + switch(meta) + { + case 0: nMeta = 2;break; + case 1: nMeta = 4;break; + case 2: nMeta = 3;break; + case 3: nMeta = 5;break; + } + facing = ForgeDirection.getOrientation(nMeta).getOpposite(); + if(genAmmount > 0) + { + worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); + } + for(int i = 0; i < 6; i++) + { + ForgeDirection side = ForgeDirection.UNKNOWN; + switch(i) + { + case 0: side = ForgeDirection.UP;break; + //case 1: side = ForgeDirection.DOWN;break; + case 2: side = ForgeDirection.NORTH;break; + case 3: side = ForgeDirection.EAST;break; + case 4: side = ForgeDirection.SOUTH;break; + case 5: side = ForgeDirection.WEST;break; + } + if(side != facing && side != facing.getOpposite()) + { + TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord+side.offsetX, yCoord+side.offsetY, zCoord+side.offsetZ); + + if (tileEntity instanceof IConductor) + { + if (ElectricityManager.instance.getElectricityRequired( ((IConductor)tileEntity).getConnectionID()) > 0) + { + this.wires[i] = (IConductor)tileEntity; + ElectricityManager.instance.produceElectricity(this, this.wires[i],genAmmount, this.getVoltage()); + } + else + { + this.wires[i] = null; + } + } + else + { + this.wires[i] = null; + } + } + } + } + } @Override public void handlePacketData(NetworkManager network, Packet250CustomPayload packet, EntityPlayer player, @@ -19,36 +95,82 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver // TODO Auto-generated method stub } - - - - public float electricityRequest() - { + //------------------------------ + //Mechanics + //------------------------------ + @Override + public int getForceSide(ForgeDirection side) { + if(side == facing.getOpposite()) + { + return aForce; + } return 0; - - } - public boolean canConnect(ForgeDirection side) - { - int face = this.facing; - if(side != ForgeDirection.UP && side != ForgeDirection.DOWN) - { - return true; - } + } + + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + if(side == facing.getOpposite()) + { + return true; + } return false; - - } - public boolean canReceiveFromSide(ForgeDirection side) - { - return false; - } - public double getVoltage() - { - return 120; - } - - public int getTickInterval() - { - return 10; - } + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(side == facing) + { + return true; + } + return false; + } + + @Override + public int applyForce(int force) { + this.force = force; + return force; + } + + @Override + public int getAnimationPos() { + return pos; + } + //------------------------------ + //Electric + //------------------------------ + @Override + public void onDisable(int duration) + { + this.disableTicks = duration; + } + + @Override + public boolean isDisabled() { + if(disableTicks-- <= 0) + { + return false; + } + return true; + } + + @Override + public double getVoltage() { + return 120; + } + + @Override + public boolean canConnect(ForgeDirection side) { + if(side != ForgeDirection.DOWN && side != facing && side != facing.getOpposite()) + { + return true; + } + return false; + } } diff --git a/src/minecraft/steampower/ModelToyEngine.java b/src/minecraft/steampower/ModelToyEngine.java deleted file mode 100644 index c465a858..00000000 --- a/src/minecraft/steampower/ModelToyEngine.java +++ /dev/null @@ -1,242 +0,0 @@ -// Date: 8/14/2012 3:20:15 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelToyEngine extends ModelBase -{ - //fields - ModelRenderer BASE; - ModelRenderer PISTON_WALL_1; - ModelRenderer PISTON_HEAD_MOVES; - ModelRenderer PISTON_TURNER_MOVES; - ModelRenderer PISTON_ARM_MOVES; - ModelRenderer GEAR_A_NECK; - ModelRenderer PISTON_WALL_2; - ModelRenderer PISTON_WALL_3; - ModelRenderer PISTON_WALL_4; - ModelRenderer PISTON_SUPPORT_1; - ModelRenderer PISTON_SUPPORT_2; - ModelRenderer FORCE_CONDUCTOR_BOX; - ModelRenderer GEAR_A_TEETH_1_ROTATES; - ModelRenderer GEAR_A_TEETH_2_ROTATES; - ModelRenderer GEAR_A_TEETH_3_ROTATES; - ModelRenderer FORCE_TRANSMITTER_ROTATES; - ModelRenderer GEAR_B_TEETH_1_ROTATES; - ModelRenderer GEAR_B_TEETH_2_ROTATES; - ModelRenderer GEAR_B_TEETH_3_ROTATES; - ModelRenderer SUPPORT_PLATE; - ModelRenderer ORNAMENT_1; - ModelRenderer ORNAMENT_2; - ModelRenderer LEVER_1_CAN_BE_TURNED; - ModelRenderer LEVER_2_CAN_BE_TURNED; - - public ModelToyEngine() - { - textureWidth = 128; - textureHeight = 128; - - BASE = new ModelRenderer(this, 0, 0); - BASE.addBox(0F, 0F, 0F, 16, 1, 16); - BASE.setRotationPoint(-8F, 23F, -8F); - BASE.setTextureSize(128, 128); - BASE.mirror = true; - setRotation(BASE, 0F, 0F, 0F); - PISTON_WALL_1 = new ModelRenderer(this, 0, 18); - PISTON_WALL_1.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_1.setRotationPoint(0F, 22F, 1F); - PISTON_WALL_1.setTextureSize(128, 128); - PISTON_WALL_1.mirror = true; - setRotation(PISTON_WALL_1, 1.570796F, 0F, 0F); - PISTON_HEAD_MOVES = new ModelRenderer(this, 0, 24); - PISTON_HEAD_MOVES.addBox(0F, -2F, -2F, 4, 4, 4); - PISTON_HEAD_MOVES.setRotationPoint(0F, 20F, 4F); - PISTON_HEAD_MOVES.setTextureSize(128, 128); - PISTON_HEAD_MOVES.mirror = true; - setRotation(PISTON_HEAD_MOVES, 0F, 0F, 0F); - PISTON_TURNER_MOVES = new ModelRenderer(this, 0, 33); - PISTON_TURNER_MOVES.addBox(0F, -1F, -1F, 1, 2, 2); - PISTON_TURNER_MOVES.setRotationPoint(-1F, 20F, 4F); - PISTON_TURNER_MOVES.setTextureSize(128, 128); - PISTON_TURNER_MOVES.mirror = true; - setRotation(PISTON_TURNER_MOVES, 0F, 0F, 0F); - PISTON_ARM_MOVES = new ModelRenderer(this, 0, 38); - PISTON_ARM_MOVES.addBox(0F, 0F, -1F, 4, 1, 1); - PISTON_ARM_MOVES.setRotationPoint(-5F, 19F, 4F); - PISTON_ARM_MOVES.setTextureSize(128, 128); - PISTON_ARM_MOVES.mirror = true; - setRotation(PISTON_ARM_MOVES, 0F, 0F, 0F); - GEAR_A_NECK = new ModelRenderer(this, 65, 25); - GEAR_A_NECK.addBox(-1F, -1F, 0F, 2, 2, 1); - GEAR_A_NECK.setRotationPoint(-4F, 19F, -4F); - GEAR_A_NECK.setTextureSize(128, 128); - GEAR_A_NECK.mirror = true; - setRotation(GEAR_A_NECK, 0F, 0F, 0F); - PISTON_WALL_2 = new ModelRenderer(this, 0, 18); - PISTON_WALL_2.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_2.setRotationPoint(0F, 17F, 2F); - PISTON_WALL_2.setTextureSize(128, 128); - PISTON_WALL_2.mirror = true; - setRotation(PISTON_WALL_2, 0F, 0F, 0F); - PISTON_WALL_3 = new ModelRenderer(this, 0, 18); - PISTON_WALL_3.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_3.setRotationPoint(0F, 22F, 2F); - PISTON_WALL_3.setTextureSize(128, 128); - PISTON_WALL_3.mirror = true; - setRotation(PISTON_WALL_3, 0F, 0F, 0F); - PISTON_WALL_4 = new ModelRenderer(this, 0, 18); - PISTON_WALL_4.addBox(0F, 0F, 0F, 7, 1, 4); - PISTON_WALL_4.setRotationPoint(0F, 22F, 6F); - PISTON_WALL_4.setTextureSize(128, 128); - PISTON_WALL_4.mirror = true; - setRotation(PISTON_WALL_4, 1.570796F, 0F, 0F); - PISTON_SUPPORT_1 = new ModelRenderer(this, 0, 41); - PISTON_SUPPORT_1.addBox(0F, 0F, 0F, 1, 8, 6); - PISTON_SUPPORT_1.setRotationPoint(7F, 15F, 1F); - PISTON_SUPPORT_1.setTextureSize(128, 128); - PISTON_SUPPORT_1.mirror = true; - setRotation(PISTON_SUPPORT_1, 0F, 0F, 0F); - PISTON_SUPPORT_2 = new ModelRenderer(this, 0, 57); - PISTON_SUPPORT_2.addBox(0F, 0F, 0F, 1, 4, 4); - PISTON_SUPPORT_2.setRotationPoint(7F, 12F, 4F); - PISTON_SUPPORT_2.setTextureSize(128, 128); - PISTON_SUPPORT_2.mirror = true; - setRotation(PISTON_SUPPORT_2, -0.7853982F, 0F, 0F); - FORCE_CONDUCTOR_BOX = new ModelRenderer(this, 65, 0); - FORCE_CONDUCTOR_BOX.addBox(0F, 0F, 0F, 4, 5, 6); - FORCE_CONDUCTOR_BOX.setRotationPoint(-6F, 18F, -3F); - FORCE_CONDUCTOR_BOX.setTextureSize(128, 128); - FORCE_CONDUCTOR_BOX.mirror = true; - setRotation(FORCE_CONDUCTOR_BOX, 0F, 0F, 0F); - GEAR_A_TEETH_1_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_1_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_A_TEETH_2_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_2_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_A_TEETH_3_ROTATES = new ModelRenderer(this, 93, 0); - GEAR_A_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 1); - GEAR_A_TEETH_3_ROTATES.setRotationPoint(-4F, 19F, -5F); - GEAR_A_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_A_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_A_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - FORCE_TRANSMITTER_ROTATES = new ModelRenderer(this, 65, 25); - FORCE_TRANSMITTER_ROTATES.addBox(-1F, -1F, 0F, 2, 2, 1); - FORCE_TRANSMITTER_ROTATES.setRotationPoint(0F, 17F, -8F); - FORCE_TRANSMITTER_ROTATES.setTextureSize(128, 128); - FORCE_TRANSMITTER_ROTATES.mirror = true; - setRotation(FORCE_TRANSMITTER_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_1_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_1_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_1_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_1_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_1_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_1_ROTATES, 0F, 0F, 0F); - GEAR_B_TEETH_2_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_2_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_2_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_2_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_2_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_2_ROTATES, 0F, 0F, 1.047198F); - GEAR_B_TEETH_3_ROTATES = new ModelRenderer(this, 93, 5); - GEAR_B_TEETH_3_ROTATES.addBox(-3F, -1F, 0F, 6, 2, 3); - GEAR_B_TEETH_3_ROTATES.setRotationPoint(0F, 17F, -7F); - GEAR_B_TEETH_3_ROTATES.setTextureSize(128, 128); - GEAR_B_TEETH_3_ROTATES.mirror = true; - setRotation(GEAR_B_TEETH_3_ROTATES, 0F, 0F, -1.047198F); - SUPPORT_PLATE = new ModelRenderer(this, 65, 12); - SUPPORT_PLATE.addBox(0F, 0F, 0F, 9, 8, 4); - SUPPORT_PLATE.setRotationPoint(-1F, 15F, -4F); - SUPPORT_PLATE.setTextureSize(128, 128); - SUPPORT_PLATE.mirror = true; - setRotation(SUPPORT_PLATE, 0F, 0F, 0F); - ORNAMENT_1 = new ModelRenderer(this, 86, 0); - ORNAMENT_1.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_1.setRotationPoint(6F, 19F, -5F); - ORNAMENT_1.setTextureSize(128, 128); - ORNAMENT_1.mirror = true; - setRotation(ORNAMENT_1, -0.2094395F, 0F, 0F); - ORNAMENT_2 = new ModelRenderer(this, 86, 0); - ORNAMENT_2.addBox(0F, 0F, 0F, 1, 4, 2); - ORNAMENT_2.setRotationPoint(4F, 19F, -5F); - ORNAMENT_2.setTextureSize(128, 128); - ORNAMENT_2.mirror = true; - setRotation(ORNAMENT_2, -0.2094395F, 0F, 0F); - LEVER_1_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_1_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_1_CAN_BE_TURNED.setRotationPoint(6F, 16F, -3F); - LEVER_1_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_1_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_1_CAN_BE_TURNED, 0F, 0F, 0F); - LEVER_2_CAN_BE_TURNED = new ModelRenderer(this, 0, 0); - LEVER_2_CAN_BE_TURNED.addBox(0F, -6F, 0F, 1, 6, 1); - LEVER_2_CAN_BE_TURNED.setRotationPoint(4F, 16F, -3F); - LEVER_2_CAN_BE_TURNED.setTextureSize(128, 128); - LEVER_2_CAN_BE_TURNED.mirror = true; - setRotation(LEVER_2_CAN_BE_TURNED, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - genRender(f5); - } - public void genRender(float f5) - { - BASE.render(f5); - PISTON_WALL_1.render(f5); - PISTON_HEAD_MOVES.render(f5); - PISTON_TURNER_MOVES.render(f5); - PISTON_ARM_MOVES.render(f5); - GEAR_A_NECK.render(f5); - PISTON_WALL_2.render(f5); - PISTON_WALL_3.render(f5); - PISTON_WALL_4.render(f5); - PISTON_SUPPORT_1.render(f5); - PISTON_SUPPORT_2.render(f5); - FORCE_CONDUCTOR_BOX.render(f5); - GEAR_A_TEETH_1_ROTATES.render(f5); - GEAR_A_TEETH_2_ROTATES.render(f5); - GEAR_A_TEETH_3_ROTATES.render(f5); - FORCE_TRANSMITTER_ROTATES.render(f5); - GEAR_B_TEETH_1_ROTATES.render(f5); - GEAR_B_TEETH_2_ROTATES.render(f5); - GEAR_B_TEETH_3_ROTATES.render(f5); - SUPPORT_PLATE.render(f5); - ORNAMENT_1.render(f5); - ORNAMENT_2.render(f5); - LEVER_1_CAN_BE_TURNED.render(f5); - LEVER_2_CAN_BE_TURNED.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - -} diff --git a/src/minecraft/steampower/RenderGenerator.java b/src/minecraft/steampower/RenderGenerator.java index d5f3a83b..b3ae8f82 100644 --- a/src/minecraft/steampower/RenderGenerator.java +++ b/src/minecraft/steampower/RenderGenerator.java @@ -22,6 +22,14 @@ public class RenderGenerator extends TileEntitySpecialRenderer GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(meta) + { + case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; + case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } model.RenderMain(0.0625F); GL11.glPopMatrix(); } diff --git a/src/minecraft/steampower/RenderToyEngine.java b/src/minecraft/steampower/RenderToyEngine.java deleted file mode 100644 index 5f84187c..00000000 --- a/src/minecraft/steampower/RenderToyEngine.java +++ /dev/null @@ -1,29 +0,0 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderToyEngine extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelToyEngine model; - - public RenderToyEngine() - { - model = new ModelToyEngine(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - model.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file From 10c0eedf88c26a27f7fae9d0a9252745ddf9d833 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 3 Oct 2012 22:20:50 -0400 Subject: [PATCH 091/115] Version bump --- BasicPipesVersion.txt | 2 +- SteamPowerVersion.txt | 2 +- src/common/steampower/turbine/TileEntityGen.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index 7c483e8f..46843749 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -1.7 \ No newline at end of file +1.8 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index 7c483e8f..46843749 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -1.7 \ No newline at end of file +1.8 \ No newline at end of file diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index bbadeb66..eafffc81 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -50,7 +50,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, facing = ForgeDirection.getOrientation(nMeta).getOpposite(); if(genAmmount > 0) { - worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); + //worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); } for(int i = 0; i < 6; i++) { From bf060956df7db0d8bf84cc02b31df607d997ad3e Mon Sep 17 00:00:00 2001 From: Rseifert Date: Thu, 4 Oct 2012 01:47:34 -0400 Subject: [PATCH 092/115] Bug Fixed and add new Item renders Fixed a few bugs and improved how some thing work. Also added item renders for some blocks so they look better in hand. --- .../basicpipes/conductors/BlockRod.java | 5 +- .../basicpipes/machines/BlockMachine.java | 8 +- .../basicpipes/machines/ItemMachine.java | 2 +- src/common/ic2/api/BaseSeed.java | 56 +++ src/common/ic2/api/CropCard.java | 475 ++++++++++++++++++ src/common/ic2/api/Crops.java | 47 ++ src/common/ic2/api/Direction.java | 106 ++++ src/common/ic2/api/ElectricItem.java | 128 +++++ src/common/ic2/api/EnergyNet.java | 119 +++++ src/common/ic2/api/ExplosionWhitelist.java | 46 ++ src/common/ic2/api/IBoxable.java | 18 + src/common/ic2/api/IElectricItem.java | 52 ++ src/common/ic2/api/IEnergyAcceptor.java | 20 + src/common/ic2/api/IEnergyConductor.java | 51 ++ src/common/ic2/api/IEnergyEmitter.java | 21 + src/common/ic2/api/IEnergySink.java | 23 + src/common/ic2/api/IEnergySource.java | 15 + src/common/ic2/api/IEnergyStorage.java | 27 + src/common/ic2/api/IEnergyTile.java | 18 + src/common/ic2/api/IMetalArmor.java | 20 + ...INetworkClientTileEntityEventListener.java | 17 + src/common/ic2/api/INetworkDataProvider.java | 18 + .../ic2/api/INetworkItemEventListener.java | 18 + .../api/INetworkTileEntityEventListener.java | 14 + .../ic2/api/INetworkUpdateListener.java | 14 + src/common/ic2/api/IPaintableBlock.java | 21 + src/common/ic2/api/IReactor.java | 134 +++++ src/common/ic2/api/IReactorChamber.java | 13 + src/common/ic2/api/IReactorComponent.java | 97 ++++ src/common/ic2/api/ITerraformingBP.java | 35 ++ src/common/ic2/api/IWrenchable.java | 50 ++ src/common/ic2/api/Ic2Recipes.java | 358 +++++++++++++ src/common/ic2/api/Items.java | 401 +++++++++++++++ src/common/ic2/api/NetworkHelper.java | 236 +++++++++ src/common/ic2/api/TECrop.java | 161 ++++++ .../railcraft/common/api/carts/CartBase.java | 118 +++++ .../railcraft/common/api/carts/CartTools.java | 364 ++++++++++++++ .../api/carts/ICartRenderInterface.java | 24 + .../common/api/carts/IEnergyTransfer.java | 82 +++ .../common/api/carts/IItemTransfer.java | 65 +++ .../common/api/carts/ILinkableCart.java | 77 +++ .../common/api/carts/ILinkageManager.java | 102 ++++ .../common/api/carts/ILiquidTransfer.java | 53 ++ .../railcraft/common/api/carts/IMinecart.java | 52 ++ .../common/api/carts/TransferCartBase.java | 252 ++++++++++ .../common/api/carts/bore/IBoreHead.java | 37 ++ .../common/api/carts/bore/IMineable.java | 36 ++ .../common/api/core/INetworkedObject.java | 16 + .../common/api/core/IPostConnection.java | 27 + .../common/api/core/WorldCoordinate.java | 78 +++ .../api/core/items/BallastRegistry.java | 93 ++++ .../common/api/core/items/EnumItemType.java | 47 ++ .../common/api/core/items/ICrowbar.java | 14 + .../common/api/core/items/IMinecartItem.java | 39 ++ .../common/api/core/items/ITrackItem.java | 46 ++ .../common/api/core/items/ItemRegistry.java | 93 ++++ .../IBlastFurnaceCraftingManager.java | 25 + .../api/crafting/IBlastFurnaceRecipe.java | 21 + .../crafting/ICokeOvenCraftingManager.java | 26 + .../common/api/crafting/ICokeOvenRecipe.java | 20 + .../crafting/IRockCrusherCraftingManager.java | 35 ++ .../api/crafting/IRockCrusherRecipe.java | 37 ++ .../IRollingMachineCraftingManager.java | 23 + .../crafting/RailcraftCraftingManager.java | 16 + .../common/api/signals/EnumSignalAspect.java | 155 ++++++ .../common/api/signals/IBlockSignal.java | 47 ++ .../common/api/signals/ISignalController.java | 45 ++ .../common/api/signals/ISignalReceiver.java | 43 ++ .../common/api/signals/SignalTools.java | 159 ++++++ .../common/api/tracks/ITrackCustomPlaced.java | 29 ++ .../common/api/tracks/ITrackCustomShape.java | 24 + .../common/api/tracks/ITrackEmitter.java | 22 + .../common/api/tracks/ITrackInstance.java | 123 +++++ .../common/api/tracks/ITrackLockdown.java | 18 + .../common/api/tracks/ITrackPowered.java | 24 + .../common/api/tracks/ITrackReversable.java | 17 + .../common/api/tracks/ITrackSwitch.java | 21 + .../common/api/tracks/ITrackTile.java | 13 + .../common/api/tracks/RailTools.java | 175 +++++++ .../common/api/tracks/TrackInstanceBase.java | 385 ++++++++++++++ .../common/api/tracks/TrackRegistry.java | 62 +++ .../common/api/tracks/TrackSpec.java | 86 ++++ src/common/steampower/BlockMachine.java | 2 +- src/common/steampower/ItemMachine.java | 2 +- .../steampower/turbine/BlockGenerator.java | 3 +- .../steampower/turbine/TileEntityGen.java | 27 +- .../turbine/TileEntitySteamPiston.java | 54 +- .../basicpipes/ItemRenderHelper.java | 56 +++ src/minecraft/basicpipes/PipeClientProxy.java | 2 + src/minecraft/steampower/GUISteamPiston.java | 3 +- .../steampower/ItemRenderHelperS.java | 62 +++ .../steampower/SteamClientProxy.java | 2 + 92 files changed, 6381 insertions(+), 42 deletions(-) create mode 100644 src/common/ic2/api/BaseSeed.java create mode 100644 src/common/ic2/api/CropCard.java create mode 100644 src/common/ic2/api/Crops.java create mode 100644 src/common/ic2/api/Direction.java create mode 100644 src/common/ic2/api/ElectricItem.java create mode 100644 src/common/ic2/api/EnergyNet.java create mode 100644 src/common/ic2/api/ExplosionWhitelist.java create mode 100644 src/common/ic2/api/IBoxable.java create mode 100644 src/common/ic2/api/IElectricItem.java create mode 100644 src/common/ic2/api/IEnergyAcceptor.java create mode 100644 src/common/ic2/api/IEnergyConductor.java create mode 100644 src/common/ic2/api/IEnergyEmitter.java create mode 100644 src/common/ic2/api/IEnergySink.java create mode 100644 src/common/ic2/api/IEnergySource.java create mode 100644 src/common/ic2/api/IEnergyStorage.java create mode 100644 src/common/ic2/api/IEnergyTile.java create mode 100644 src/common/ic2/api/IMetalArmor.java create mode 100644 src/common/ic2/api/INetworkClientTileEntityEventListener.java create mode 100644 src/common/ic2/api/INetworkDataProvider.java create mode 100644 src/common/ic2/api/INetworkItemEventListener.java create mode 100644 src/common/ic2/api/INetworkTileEntityEventListener.java create mode 100644 src/common/ic2/api/INetworkUpdateListener.java create mode 100644 src/common/ic2/api/IPaintableBlock.java create mode 100644 src/common/ic2/api/IReactor.java create mode 100644 src/common/ic2/api/IReactorChamber.java create mode 100644 src/common/ic2/api/IReactorComponent.java create mode 100644 src/common/ic2/api/ITerraformingBP.java create mode 100644 src/common/ic2/api/IWrenchable.java create mode 100644 src/common/ic2/api/Ic2Recipes.java create mode 100644 src/common/ic2/api/Items.java create mode 100644 src/common/ic2/api/NetworkHelper.java create mode 100644 src/common/ic2/api/TECrop.java create mode 100644 src/common/railcraft/common/api/carts/CartBase.java create mode 100644 src/common/railcraft/common/api/carts/CartTools.java create mode 100644 src/common/railcraft/common/api/carts/ICartRenderInterface.java create mode 100644 src/common/railcraft/common/api/carts/IEnergyTransfer.java create mode 100644 src/common/railcraft/common/api/carts/IItemTransfer.java create mode 100644 src/common/railcraft/common/api/carts/ILinkableCart.java create mode 100644 src/common/railcraft/common/api/carts/ILinkageManager.java create mode 100644 src/common/railcraft/common/api/carts/ILiquidTransfer.java create mode 100644 src/common/railcraft/common/api/carts/IMinecart.java create mode 100644 src/common/railcraft/common/api/carts/TransferCartBase.java create mode 100644 src/common/railcraft/common/api/carts/bore/IBoreHead.java create mode 100644 src/common/railcraft/common/api/carts/bore/IMineable.java create mode 100644 src/common/railcraft/common/api/core/INetworkedObject.java create mode 100644 src/common/railcraft/common/api/core/IPostConnection.java create mode 100644 src/common/railcraft/common/api/core/WorldCoordinate.java create mode 100644 src/common/railcraft/common/api/core/items/BallastRegistry.java create mode 100644 src/common/railcraft/common/api/core/items/EnumItemType.java create mode 100644 src/common/railcraft/common/api/core/items/ICrowbar.java create mode 100644 src/common/railcraft/common/api/core/items/IMinecartItem.java create mode 100644 src/common/railcraft/common/api/core/items/ITrackItem.java create mode 100644 src/common/railcraft/common/api/core/items/ItemRegistry.java create mode 100644 src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java create mode 100644 src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java create mode 100644 src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java create mode 100644 src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java create mode 100644 src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java create mode 100644 src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java create mode 100644 src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java create mode 100644 src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java create mode 100644 src/common/railcraft/common/api/signals/EnumSignalAspect.java create mode 100644 src/common/railcraft/common/api/signals/IBlockSignal.java create mode 100644 src/common/railcraft/common/api/signals/ISignalController.java create mode 100644 src/common/railcraft/common/api/signals/ISignalReceiver.java create mode 100644 src/common/railcraft/common/api/signals/SignalTools.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackCustomShape.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackEmitter.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackInstance.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackLockdown.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackPowered.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackReversable.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackSwitch.java create mode 100644 src/common/railcraft/common/api/tracks/ITrackTile.java create mode 100644 src/common/railcraft/common/api/tracks/RailTools.java create mode 100644 src/common/railcraft/common/api/tracks/TrackInstanceBase.java create mode 100644 src/common/railcraft/common/api/tracks/TrackRegistry.java create mode 100644 src/common/railcraft/common/api/tracks/TrackSpec.java create mode 100644 src/minecraft/basicpipes/ItemRenderHelper.java create mode 100644 src/minecraft/steampower/ItemRenderHelperS.java diff --git a/src/common/basicpipes/conductors/BlockRod.java b/src/common/basicpipes/conductors/BlockRod.java index 5098f8a4..ea4eb87a 100644 --- a/src/common/basicpipes/conductors/BlockRod.java +++ b/src/common/basicpipes/conductors/BlockRod.java @@ -1,5 +1,6 @@ package basicpipes.conductors; +import basicpipes.ItemRenderHelper; import steampower.TileEntityMachine; import net.minecraft.src.Block; import net.minecraft.src.CreativeTabs; @@ -37,9 +38,7 @@ public class BlockRod extends universalelectricity.prefab.BlockMachine { case 2: meta = 3;dZ++;break; case 3: meta = 4;dX++;break; } - //ForgeDirection dir = ForgeDirection.getOrientation(meta); world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); - // world.setBlockAndMetadataWithUpdate(i+dir.offsetX, j, k+dir.offsetZ,blockID, meta, true); } @Override public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) @@ -78,7 +77,7 @@ public class BlockRod extends universalelectricity.prefab.BlockMachine { */ public int getRenderType() { - return -1; + return ItemRenderHelper.renderID; } } diff --git a/src/common/basicpipes/machines/BlockMachine.java b/src/common/basicpipes/machines/BlockMachine.java index ca99f0a2..99bef5ea 100644 --- a/src/common/basicpipes/machines/BlockMachine.java +++ b/src/common/basicpipes/machines/BlockMachine.java @@ -8,6 +8,7 @@ import net.minecraft.src.Material; import net.minecraft.src.TileEntity; import net.minecraft.src.World; import basicpipes.BasicPipesMain; +import basicpipes.ItemRenderHelper; public class BlockMachine extends BlockContainer { @@ -36,7 +37,7 @@ public class BlockMachine extends BlockContainer */ public int getRenderType() { - return -1; + return ItemRenderHelper.renderID; } /** @@ -58,11 +59,6 @@ public class BlockMachine extends BlockContainer } return 0; } - //Per tick - public int conductorCapacity() - { - return 1; - } @Override public TileEntity createNewTileEntity(World var1,int meta) { // TODO Auto-generated method stub diff --git a/src/common/basicpipes/machines/ItemMachine.java b/src/common/basicpipes/machines/ItemMachine.java index cfb994b5..b1488aea 100644 --- a/src/common/basicpipes/machines/ItemMachine.java +++ b/src/common/basicpipes/machines/ItemMachine.java @@ -42,7 +42,7 @@ public class ItemMachine extends ItemBlock { par3List.add(new ItemStack(this, 1, 0)); - par3List.add(new ItemStack(this, 1, 4)); + //par3List.add(new ItemStack(this, 1, 4)); } public String getTextureFile() { diff --git a/src/common/ic2/api/BaseSeed.java b/src/common/ic2/api/BaseSeed.java new file mode 100644 index 00000000..6f4e57a5 --- /dev/null +++ b/src/common/ic2/api/BaseSeed.java @@ -0,0 +1,56 @@ +package ic2.api; + +/** + * Base agriculture seed. Used to determine the state of a plant once it is planted from an item. + */ +public class BaseSeed { + /** + * Plant ID. + */ + public int id; + + /** + * Plant size. + */ + public int size; + + /** + * Plant growth stat. + */ + public int statGrowth; + + /** + * Plant gain stat. + */ + public int statGain; + + /** + * Plant resistance stat. + */ + public int statResistance; + + /** + * For internal usage only. + */ + public int stackSize; + + /** + * Create a BaseSeed object. + * + * @param id plant ID + * @param size plant size + * @param statGrowth plant growth stat + * @param statGain plant gain stat + * @param statResistance plant resistance stat + * @param stackSize for internal usage only + */ + public BaseSeed(int id, int size, int statGrowth, int statGain, int statResistance, int stackSize) { + super(); + this.id = id; + this.size = size; + this.statGrowth = statGrowth; + this.statGain = statGain; + this.statResistance = statResistance; + this.stackSize = stackSize; + } +} diff --git a/src/common/ic2/api/CropCard.java b/src/common/ic2/api/CropCard.java new file mode 100644 index 00000000..79d1f3d8 --- /dev/null +++ b/src/common/ic2/api/CropCard.java @@ -0,0 +1,475 @@ +package ic2.api; + +import java.util.HashMap; + +import net.minecraft.src.Entity; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; + +/** + * Base agriculture crop. + * + * Any crop extending this can be registered using registerCrop to be added into the game. + */ +public abstract class CropCard +{ + /** + * Plant name. Will be displayed to the player. + * + * @return Plant name + */ + public abstract String name(); + + /** + * Your name here, will be shown in "Discovered by:" when analyzing seeds. + * + * @return Your name + */ + public String discoveredBy() {return "Alblaka";} + + /** + * Description of your plant. Keep it short, a few characters per line for up to two lines. + * Default is showing attributes of your plant, 2 per line. + * + * @param i line to get, starting from 0 + * @return The line + */ + public String desc(int i) + { + String[] att = attributes(); + if (att == null || att.length==0) return ""; + if (i == 0) + { + String s = att[0]; + if (att.length >= 2) + { + s+=", "+att[1]; + if (att.length >= 3) s+=","; + } + return s; + } + else + { + if (att.length < 3) return ""; + String s = att[2]; + if (att.length >= 4) s+=", "+att[3]; + return s; + } + } + + /** + * Tier of the plant. Ranges from 1 to 16, 0 is Weed. + * Valuable and powerful crops have higher tiers, useless and weak ones have lower tiers. + * + * @return Tier + */ + public abstract int tier(); + + /** + * Describe the plant through a set of stats, influencing breeding. + * Plants sharing stats and attributes will tend to cross-breed more often. + * + * Stats: + * - 0: Chemistry (Industrial uses based on chemical plant components) + * - 1: Consumable (Food, potion ingredients, stuff meant to be eaten or similarly used) + * - 2: Defensive (Plants with defense capabilities (damaging, explosive, chemical) or special abilities in general) + * - 3: Colorful (How colorful/aesthetically/beautiful is the plant, like dye-plants or plants without actual effects) + * - 4: Weed (Is this plant weed-like and rather unwanted/quick-spreading? Rare super-breed plants should have low values here) + * + * @param n index of the requested stat + * @return The requested value of the stats + */ + public abstract int stat(int n); + + /** + * Additional attributes of the plant, also influencing breeding. + * Plants sharing stats and attributes will tend to cross-breed more often. + * + * @return Attributes as an array of strings + */ + public abstract String[] attributes(); + + /** + * Sprite index the crop is meant to be rendered with. + * + * @param crop reference to TECrop + * @return 0-255, representing the sprite index on the crop's spritesheet. + */ + public abstract int getSpriteIndex(TECrop crop); + + /** + * Get the crop's spritesheet. + * Per default crops_0.png of ic2-sprites + * @return Texture file path + */ + public String getTextureFile() { + return "/ic2/sprites/crops_0.png"; + } + + /** + * Amount of growth points needed to increase the plant's size. + * Default is 200 * tier. + */ + public int growthDuration(TECrop crop) + { + return tier()*200; + } + + /** + * Check whether the plant can grow further. + * + * Consider: + * - Humidity, nutrients and air quality + * - Current size + * - Light level + * - Special biomes or conditions, accessible through crop.worldObj + * + * This method will be called upon empty upgraded crops to check whether a neighboring plant can cross onto it! Don't check if the size is greater than 0 and if the ID is real. + * + * @param crop reference to TECrop + * @return Whether the crop can grow + */ + public abstract boolean canGrow(TECrop crop); + + /** + * Calculate the influence for the plant to grow based on humidity, nutrients and air. + * Normal behavior is rating the three stats "normal", with each of them ranging from 0-30. + * Basic rule: Assume everything returns 10. All together must equal 30. Add the factors to your likings, for example (humidity*0.7)+(nutrients*0.9)+(air*1.4) + * + * Default is humidity + nutrients + air (no factors). + * + * @param crop reference to TECrop + * @param humidity ground humidity, influenced by hydration + * @param nutrients nutrient quality in ground, based on fertilizers + * @param air air quality, influences by open gardens and less crops surrounding this one + * @return 0-30 + */ + public int weightInfluences(TECrop crop, float humidity, float nutrients, float air) + { + return (int) (humidity+nutrients+air); + } + + /** + * Used to determine whether the plant can crossbreed with another crop. + * Default is allow crossbreeding if the size is greater or equal than 3. + * + * @param crop crop to crossbreed with + */ + public boolean canCross(TECrop crop) + { + return crop.size >= 3; + } + + + /** + * Called when the plant is rightclicked by a player. + * Default action is harvesting. + * + * @param crop reference to TECrop + * @param player player rightclicking the crop + * @return Whether the plant has changed + */ + public boolean rightclick(TECrop crop, EntityPlayer player) + { + return crop.harvest(true); + } + + /** + * Check whether the crop can be harvested. + * + * @param crop reference to TECrop + * @return Whether the crop can be harvested in its current state. + */ + public abstract boolean canBeHarvested(TECrop crop); + + /** + * Base chance for dropping the plant's gains, specify values greater than 1 for multiple drops. + * Default is 0.95^tier. + * + * @return Chance to drop the gains + */ + public float dropGainChance() + { + float base = 1F; + for (int i = 0; i < tier(); i++) {base*=0.95;} + return base; + } + + /** + * Item obtained from harvesting the plant. + * + * @param crop reference to TECrop + * @return Item obtained + */ + public abstract ItemStack getGain(TECrop crop); + + /** + * Get the size of the plant after harvesting. + * Default is 1. + * + * @param crop reference to TECrop + * @return Plant size after harvesting + */ + public byte getSizeAfterHarvest(TECrop crop) {return 1;} + + + /** + * Called when the plant is leftclicked by a player. + * Default action is picking the plant. + * + * @param crop reference to TECrop + * @param player player leftclicked the crop + * @return Whether the plant has changed + */ + public boolean leftclick(TECrop crop, EntityPlayer player) + { + return crop.pick(true); + } + + /** + * Base chance for dropping seeds when the plant is picked. + * Default is 0.5*0.8^tier with a bigger chance for sizes greater than 2 and absolutely no chance for size 0. + * + * @param crop reference to TECrop + * @return Chance to drop the seeds + */ + public float dropSeedChance(TECrop crop) + { + if (crop.size == 1) return 0; + float base = 0.5F; + if (crop.size == 2) base/=2F; + for (int i = 0; i < tier(); i++) {base*=0.8;} + return base; + } + + /** + * Obtain seeds dropped when the plant is picked. + * Multiple drops of the returned ItemStack can occur. + * Default action is generating a seed from this crop. + * + * @param crop reference to TECrop + * @return Seeds + */ + public ItemStack getSeeds(TECrop crop) + { + return crop.generateSeeds(crop.id, crop.statGrowth, crop.statGain, crop.statResistance, crop.scanLevel); + } + + /** + * Called when a neighbor block to the crop has changed. + * + * @param crop reference to TECrop + */ + public void onNeighbourChange(TECrop crop){} + + /** + * Check if the crop should emit redstone. + * + * @return Whether the crop should emit redstone + */ + public boolean emitRedstone(TECrop crop){return false;} + + /** + * Called when the crop is destroyed. + * + * @param crop reference to TECrop + */ + public void onBlockDestroyed(TECrop crop){} + + /** + * Get the light value emitted by the plant. + * + * @param crop reference to TECrop + * @return Light value emitted + */ + public int getEmittedLight(TECrop crop) {return 0;} + + /** + * Default is true if the entity is an EntityLiving in jumping or sprinting state. + * + * @param crop reference to TECrop + * @param entity entity colliding + * @return Whether trampling calculation should happen, return false if the plant is no longer valid. + */ + public boolean onEntityCollision(TECrop crop, Entity entity) + { + if (entity instanceof EntityLiving) + { + return ((EntityLiving)entity).isSprinting(); + } + return false; + } + + + /** + * Called every time the crop ticks. + * Should be called every 256 ticks or around 13 seconds. + * + * @param crop reference to TECrop + */ + public void tick(TECrop crop) {} + + /** + * Check whether this plant spreads weed to surrounding tiles. + * Default is true if the plant has a high growth stat (or is weeds) and size greater or equal than 2. + * + * @param crop reference to TECrop + * @return Whether the plant spreads weed + */ + public boolean isWeed(TECrop crop) + { + return crop.size>=2 && (crop.id==0 || crop.statGrowth>=24); + } + + + /** + * Get this plant's ID. + * + * @return ID of this CropCard or -1 if it's not registered + */ + public final int getId() + { + for (int i = 0; i < cropCardList.length; i++) + { + if (this == cropCardList[i]) + { + return i; + } + } + return -1; + } + + private static final CropCard[] cropCardList = new CropCard[256]; + + /** + * Get the size of the plant list. + * + * @return Plant list size + */ + public static int cropCardListLength() {return cropCardList.length;} + + /** + * Return the CropCard assigned to the given ID. + * If the ID is out of bounds, weed should be returned. If the ID is not registered, weed should be returned and a console print will notify. + * + * @param id plant ID + * @return Plant class + */ + public static final CropCard getCrop(int id) + { + if (id < 0 || id >= cropCardList.length) + {// Out of bounds + return cropCardList[0]; + } + if (cropCardList[id]==null) + {// Out of bounds + System.out.println("[IndustrialCraft] Something tried to access non-existant cropID #"+id+"!!!"); + return cropCardList[0]; + } + + return cropCardList[id]; + } + + /** + * Check whether the specified plant ID is already assigned. + * @param id ID to be checked + * @return true if the the given id is inbounds and the registered slot is not null + */ + public static final boolean idExists(int id) + { + return !(id < 0 || id >= cropCardList.length || cropCardList[id]==null); + } + + /** + * Auto-assign an ID to a plant and register it. + * Usage of this method is not recommended! Other plants could take your IDs and cause your plants to turn into other plants. + * + * @param crop plant to register + * @return The ID assigned to the plant + */ + public static final short registerCrop(CropCard crop) + { + for (short x = 0; x < cropCardList.length; x++) + {// Iterate through list + if (cropCardList[x]==null) + {// Found empty slot, add crop here + cropCardList[x]=crop; + nameReference.addLocal("item.cropSeed"+x+".name", crop.name()+" Seeds"); + return x; + } + } + //No free slot avaible + return -1; + } + + /** + * Attempt to register a plant to an ID. + * If the ID is taken, the crop will not be registered and a console print will notify the user. + * + * @param crop plant to register + * @param i ID to register the plant to + * @return Whether the crop was registered + */ + public static final boolean registerCrop(CropCard crop, int i) + { + if (i < 0 || i >= cropCardList.length) + {// Out of bounds + return false; + } + if (cropCardList[i]==null) + { + cropCardList[i]=crop; + nameReference.addLocal("item.cropSeed"+i+".name", crop.name()+" Seeds"); + return true; + } + System.out.println("[IndustrialCraft] Cannot add crop:"+crop.name()+" on ID #"+i+", slot already occupied by crop:"+cropCardList[i].name()); + return false; + } + + /** + * For internal usage only. + */ + public static TECrop nameReference; + + private static HashMap baseseeds = new HashMap(); + + /** + * Registers a base seed, an item used to plant a crop. + * + * @param stack item + * @param id plant ID + * @param size initial size + * @param growth initial growth stat + * @param gain initial gain stat + * @param resistance initial resistance stat + * @return True if successful + */ + public static boolean registerBaseSeed(ItemStack stack, int id, int size, int growth, int gain, int resistance) + { + for (ItemStack key : baseseeds.keySet()) + if (key.itemID==stack.itemID && key.getItemDamage()==stack.getItemDamage()) return false; + + baseseeds.put(stack, new BaseSeed(id, size, growth, gain, resistance, stack.stackSize)); + return true; + } + + /** + * Finds a base seed from the given item. + * + * @return Base seed or null if none found + */ + public static BaseSeed getBaseSeed(ItemStack stack) + { + if (stack == null) return null; + for (ItemStack key : baseseeds.keySet()) + { + if (key.itemID == stack.itemID && + (key.getItemDamage() == -1 || key.getItemDamage() == stack.getItemDamage())) + { + return baseseeds.get(key); + } + } + return null; + } +} diff --git a/src/common/ic2/api/Crops.java b/src/common/ic2/api/Crops.java new file mode 100644 index 00000000..e2fbe1aa --- /dev/null +++ b/src/common/ic2/api/Crops.java @@ -0,0 +1,47 @@ +package ic2.api; + +import java.util.HashMap; + +import net.minecraft.src.BiomeGenBase; + +/** + * General management of the crop system. All crop management methods will be moved here in the 2.00 update. + */ +public class Crops { + private static final HashMap humidityBiomeBonus = new HashMap(); + private static final HashMap nutrientBiomeBonus = new HashMap(); + + /** + * Add a crop humidity and nutrient biome bonus. + * + * 0 indicates no bonus and negative values indicate a penalty. + * + * @param biome Biome to apply the bonus in + * @param humidityBonus Humidity stat bonus + * @param nutrientsBonus Nutrient stat bonus + */ + public static void addBiomeBonus(BiomeGenBase biome, int humidityBonus, int nutrientsBonus) { + humidityBiomeBonus.put(biome, humidityBonus); + nutrientBiomeBonus.put(biome, nutrientsBonus); + } + + /** + * Get the humidity bonus for a biome. + * + * @param biome biome to check + * @return Humidity bonus or 0 if none + */ + public static int getHumidityBiomeBonus(BiomeGenBase biome) { + return humidityBiomeBonus.containsKey(biome) ? humidityBiomeBonus.get(biome) : 0; + } + + /** + * Get the nutrient bonus for a biome. + * + * @param biome biome to check + * @return Nutrient bonus or 0 if none + */ + public static int getNutrientBiomeBonus(BiomeGenBase biome) { + return nutrientBiomeBonus.containsKey(biome) ? nutrientBiomeBonus.get(biome) : 0; + } +} diff --git a/src/common/ic2/api/Direction.java b/src/common/ic2/api/Direction.java new file mode 100644 index 00000000..52381c16 --- /dev/null +++ b/src/common/ic2/api/Direction.java @@ -0,0 +1,106 @@ +package ic2.api; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +/** + * Represents the 6 possible directions along the axis of a block. + */ +public enum Direction { + /** + * -X + */ + XN(0), + /** + * +X + */ + XP(1), + + /** + * -Y + */ + YN(2), //MC-Code starts with 0 here + /** + * +Y + */ + YP(3), // 1... + + /** + * -Z + */ + ZN(4), + /** + * +Z + */ + ZP(5); + + Direction(int dir) { + this.dir = dir; + } + + /*public CoordinateTuple ApplyToCoordinates(CoordinateTuple coordinates) { + CoordinateTuple ret = new CoordinateTuple(coordinates); + + ret.coords[dir/2] += GetSign(); + + return ret; + }*/ + + /** + * Get the tile entity next to a tile entity following this direction. + * + * @param tileEntity tile entity to check + * @return Adjacent tile entity or null if none exists + */ + public TileEntity applyToTileEntity(TileEntity tileEntity) { + int coords[] = { tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord }; + + coords[dir/2] += getSign(); + + if (tileEntity.worldObj != null && tileEntity.worldObj.blockExists(coords[0], coords[1], coords[2])) { + return tileEntity.worldObj.getBlockTileEntity(coords[0], coords[1], coords[2]); + } else { + return null; + } + } + + /** + * Get the inverse of this direction (XN -> XP, XP -> XN, etc.) + * + * @return Inverse direction + */ + public Direction getInverse() { + int inverseDir = dir - getSign(); + + for (Direction direction: Direction.values()) { + if (direction.dir == inverseDir) return direction; + } + + return this; + } + + /** + * Convert this direction to a Minecraft side value. + * + * @return Minecraft side value + */ + public int toSideValue() { + return (dir + 4) % 6; + } + + /** + * Determine direction sign (N for negative or P for positive). + * + * @return -1 if the direction is negative, +1 if the direction is positive + */ + private int getSign() { + return (dir % 2) * 2 - 1; + } + + public ForgeDirection toForgeDirection() { + return ForgeDirection.getOrientation(toSideValue()); + } + + private int dir; +} + diff --git a/src/common/ic2/api/ElectricItem.java b/src/common/ic2/api/ElectricItem.java new file mode 100644 index 00000000..3f4a4972 --- /dev/null +++ b/src/common/ic2/api/ElectricItem.java @@ -0,0 +1,128 @@ +package ic2.api; + +import java.lang.reflect.Method; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; + +/** + * Allows for charging, discharging and using electric items (IElectricItem). + * + * The charge or remaining capacity of an item can be determined by calling charge/discharge with + * ignoreTransferLimit and simulate set to true. + */ +public final class ElectricItem { + /** + * Charge an item with a specified amount of energy + * + * @param itemStack electric item's stack + * @param amount amount of energy to charge in EU + * @param tier tier of the charging device, has to be at least as high as the item to charge + * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() + * @param simulate don't actually change the item, just determine the return value + * @return Energy transferred into the electric item + */ + public static int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { + try { + if (ElectricItem_charge == null) ElectricItem_charge = Class.forName(getPackage() + ".common.ElectricItem").getMethod("charge", ItemStack.class, Integer.TYPE, Integer.TYPE, Boolean.TYPE, Boolean.TYPE); + + return (Integer) ElectricItem_charge.invoke(null, itemStack, amount, tier, ignoreTransferLimit, simulate); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Discharge an item by a specified amount of energy + * + * @param itemStack electric item's stack + * @param amount amount of energy to charge in EU + * @param tier tier of the discharging device, has to be at least as high as the item to discharge + * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() + * @param simulate don't actually discharge the item, just determine the return value + * @return Energy retrieved from the electric item + */ + public static int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { + try { + if (ElectricItem_discharge == null) ElectricItem_discharge = Class.forName(getPackage() + ".common.ElectricItem").getMethod("discharge", ItemStack.class, Integer.TYPE, Integer.TYPE, Boolean.TYPE, Boolean.TYPE); + + return (Integer) ElectricItem_discharge.invoke(null, itemStack, amount, tier, ignoreTransferLimit, simulate); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Determine if the specified electric item has at least a specific amount of EU. + * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. + * BatPacks are not taken into account. + * + * @param itemStack electric item's stack + * @param amount minimum amount of energy required + * @return true if there's enough energy + */ + public static boolean canUse(ItemStack itemStack, int amount) { + try { + if (ElectricItem_canUse == null) ElectricItem_canUse = Class.forName(getPackage() + ".common.ElectricItem").getMethod("canUse", ItemStack.class, Integer.TYPE); + + return (Boolean) ElectricItem_canUse.invoke(null, itemStack, amount); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Try to retrieve a specific amount of energy from an Item, and if applicable, a BatPack. + * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. + * + * @param itemStack electric item's stack + * @param amount amount of energy to discharge in EU + * @param player player holding the item + * @return true if the operation succeeded + */ + public static boolean use(ItemStack itemStack, int amount, EntityPlayer player) { + try { + if (ElectricItem_use == null) ElectricItem_use = Class.forName(getPackage() + ".common.ElectricItem").getMethod("use", ItemStack.class, Integer.TYPE, EntityPlayer.class); + + return (Boolean) ElectricItem_use.invoke(null, itemStack, amount, player); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Charge an item from the BatPack a player is wearing. + * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. + * use() already contains this functionality. + * + * @param itemStack electric item's stack + * @param player player holding the item + */ + public static void chargeFromArmor(ItemStack itemStack, EntityPlayer player) { + try { + if (ElectricItem_chargeFromArmor == null) ElectricItem_chargeFromArmor = Class.forName(getPackage() + ".common.ElectricItem").getMethod("chargeFromArmor", ItemStack.class, EntityPlayer.class); + + ElectricItem_chargeFromArmor.invoke(null, itemStack, player); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Get the base IC2 package name, used internally. + * + * @return IC2 package name, if unable to be determined defaults to ic2 + */ + private static String getPackage() { + Package pkg = ElectricItem.class.getPackage(); + if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); + else return "ic2"; + } + + private static Method ElectricItem_charge; + private static Method ElectricItem_discharge; + private static Method ElectricItem_canUse; + private static Method ElectricItem_use; + private static Method ElectricItem_chargeFromArmor; +} + diff --git a/src/common/ic2/api/EnergyNet.java b/src/common/ic2/api/EnergyNet.java new file mode 100644 index 00000000..2e98537e --- /dev/null +++ b/src/common/ic2/api/EnergyNet.java @@ -0,0 +1,119 @@ +package ic2.api; + +import java.lang.reflect.Method; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +/** + * Provides access to the energy network. + */ +public final class EnergyNet { + /** + * Gets the EnergyNet instance for the specified world. + * + * @param world world + * @return EnergyNet instance for the world + */ + public static EnergyNet getForWorld(World world) { + try { + if (EnergyNet_getForWorld == null) EnergyNet_getForWorld = Class.forName(getPackage() + ".common.EnergyNet").getMethod("getForWorld", World.class); + + return new EnergyNet(EnergyNet_getForWorld.invoke(null, world)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private EnergyNet(Object energyNetInstance) { + this.energyNetInstance = energyNetInstance; + } + + /** + * Add a tile entity to the energy network. + * The tile entity has to be valid and initialized. + * + * @param addedTileEntity tile entity to add + */ + public void addTileEntity(TileEntity addedTileEntity) { + try { + if (EnergyNet_addTileEntity == null) EnergyNet_addTileEntity = Class.forName(getPackage() + ".common.EnergyNet").getMethod("addTileEntity", TileEntity.class); + + EnergyNet_addTileEntity.invoke(energyNetInstance, addedTileEntity); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Removes a tile entity from the energy network. + * The tile entity has to be still valid. + * + * @param removedTileEntity tile entity to remove + */ + public void removeTileEntity(TileEntity removedTileEntity) { + try { + if (EnergyNet_removeTileEntity == null) EnergyNet_removeTileEntity = Class.forName(getPackage() + ".common.EnergyNet").getMethod("removeTileEntity", TileEntity.class); + + EnergyNet_removeTileEntity.invoke(energyNetInstance, removedTileEntity); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Emit energy from an energy source to the energy network. + * + * @param energySource energy source to emit energy from + * @param amount amount of energy to emit in EU + * @return Leftover (unused) power + */ + public int emitEnergyFrom(IEnergySource energySource, int amount) { + try { + if (EnergyNet_emitEnergyFrom == null) EnergyNet_emitEnergyFrom = Class.forName(getPackage() + ".common.EnergyNet").getMethod("emitEnergyFrom", IEnergySource.class, Integer.TYPE); + + return ((Integer) EnergyNet_emitEnergyFrom.invoke(energyNetInstance, energySource, amount)).intValue(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Get the amount of energy currently being conducted by a conductor. + * Call this twice with a delay to get the average conducted power by doing (call2 - call1) / 2. + * + * @param tileEntity conductor + */ + public long getTotalEnergyConducted(TileEntity tileEntity) { + try { + if (EnergyNet_getTotalEnergyConducted == null) EnergyNet_getTotalEnergyConducted = Class.forName(getPackage() + ".common.EnergyNet").getMethod("getTotalEnergyConducted", TileEntity.class); + + return ((Long) EnergyNet_getTotalEnergyConducted.invoke(energyNetInstance, tileEntity)).longValue(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Get the base IC2 package name, used internally. + * + * @return IC2 package name, if unable to be determined defaults to ic2 + */ + private static String getPackage() { + Package pkg = EnergyNet.class.getPackage(); + if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); + else return "ic2"; + } + + /** + * Instance of the energy network. + */ + Object energyNetInstance; + + private static Method EnergyNet_getForWorld; + private static Method EnergyNet_addTileEntity; + private static Method EnergyNet_removeTileEntity; + private static Method EnergyNet_emitEnergyFrom; + private static Method EnergyNet_getTotalEnergyConducted; +} + diff --git a/src/common/ic2/api/ExplosionWhitelist.java b/src/common/ic2/api/ExplosionWhitelist.java new file mode 100644 index 00000000..d36ccc36 --- /dev/null +++ b/src/common/ic2/api/ExplosionWhitelist.java @@ -0,0 +1,46 @@ +package ic2.api; + +import java.util.*; + +import net.minecraft.src.Block; + +/** + * Blocks on this whitelist will not resist an explosion but won't be destroyed. + * + * The explosion code by default ignores blocks which absorb more than 1000 explosion power to + * prevent abusing personal safes, Trade-O-Mats and other blocks to serve as a cheap and + * invulnerable reactor chambers. Said blocks will not shield the explosion and won't get + * destroyed. + */ +public final class ExplosionWhitelist { + /** + * Add a block to the whitelist. + * + * @param block block to add + */ + public static void addWhitelistedBlock(Block block) { + whitelist.add(block); + } + + /** + * Remove a block from the whitelist. + * + * @param block block to remove + */ + public static void removeWhitelistedBlock(Block block) { + whitelist.remove(block); + } + + /** + * Check if a block is on the whitelist. + * + * @param block block to check if whitelisted + * @return Whether the block is whitelisted + */ + public static boolean isBlockWhitelisted(Block block) { + return whitelist.contains(block); + } + + private static Set whitelist = new HashSet(); +} + diff --git a/src/common/ic2/api/IBoxable.java b/src/common/ic2/api/IBoxable.java new file mode 100644 index 00000000..24dc5716 --- /dev/null +++ b/src/common/ic2/api/IBoxable.java @@ -0,0 +1,18 @@ +package ic2.api; + +import net.minecraft.src.ItemStack; + +/** + * Provides custom toolbox storage behavior for items. + * + * The normal condition for storing an item in a toolbox is having a maximum stack size of 1. + */ +public interface IBoxable { + /** + * Determine whether an item can be stored in a toolbox or not. + * + * @param itemstack item to be stored + * @return Whether to store the item in the toolbox or not + */ + public abstract boolean canBeStoredInToolbox(ItemStack itemstack); +} diff --git a/src/common/ic2/api/IElectricItem.java b/src/common/ic2/api/IElectricItem.java new file mode 100644 index 00000000..20a19e47 --- /dev/null +++ b/src/common/ic2/api/IElectricItem.java @@ -0,0 +1,52 @@ +package ic2.api; + +/** + * Provides the ability to store energy on the implementing item. + * + * The item should have a maximum damage of 13. + */ +public interface IElectricItem { + /** + * Determine if the item can be used in a machine to supply energy. + * + * @return Whether the item can supply energy + */ + boolean canProvideEnergy(); + + /** + * Get the item ID to use for a charge energy greater than 0. + * + * @return Item ID to use + */ + int getChargedItemId(); + + /** + * Get the item ID to use for a charge energy of 0. + * + * @return Item ID to use + */ + int getEmptyItemId(); + + /** + * Get the item's maximum charge energy in EU. + * + * @return Maximum charge energy + */ + int getMaxCharge(); + + /** + * Get the item's tier, lower tiers can't send energy to higher ones. + * Batteries are Tier 1, Energy Crystals are Tier 2, Lapotron Crystals are Tier 3. + * + * @return Item's tier + */ + int getTier(); + + /** + * Get the item's transfer limit in EU per transfer operation. + * + * @return Transfer limit + */ + int getTransferLimit(); +} + diff --git a/src/common/ic2/api/IEnergyAcceptor.java b/src/common/ic2/api/IEnergyAcceptor.java new file mode 100644 index 00000000..4b001923 --- /dev/null +++ b/src/common/ic2/api/IEnergyAcceptor.java @@ -0,0 +1,20 @@ +package ic2.api; + +import net.minecraft.src.TileEntity; + +/** + * For internal usage only. + * + * @see IEnergySink + * @see IEnergyConductor + */ +public interface IEnergyAcceptor extends IEnergyTile { + /** + * Determine if this acceptor can accept current from an adjacent emitter in a direction. + * + * @param emitter energy emitter + * @param direction direction the energy is being received from + */ + boolean acceptsEnergyFrom(TileEntity emitter, Direction direction); +} + diff --git a/src/common/ic2/api/IEnergyConductor.java b/src/common/ic2/api/IEnergyConductor.java new file mode 100644 index 00000000..3d755404 --- /dev/null +++ b/src/common/ic2/api/IEnergyConductor.java @@ -0,0 +1,51 @@ +package ic2.api; + +/** + * Tile entities which conduct energy pulses without buffering (mostly cables) have to implement this + * interface. + */ +public interface IEnergyConductor extends IEnergyAcceptor, IEnergyEmitter { + /** + * Energy loss for the conductor in EU per block. + * + * @return Energy loss + */ + double getConductionLoss(); + + /** + * Amount of energy the insulation will handle before shocking nearby players and mobs. + * + * @return Insulation energy absorption in EU + */ + int getInsulationEnergyAbsorption(); + + /** + * Amount of energy the insulation will handle before it is destroyed. + * Ensure that this value is greater than the insulation energy absorption + 64. + * + * @return Insulation-destroying energy in EU + */ + int getInsulationBreakdownEnergy(); + + /** + * Amount of energy the conductor will handle before it melts. + * + * @return Conductor-destroying energy in EU + */ + int getConductorBreakdownEnergy(); + + /** + * Remove the conductor's insulation if the insulation breakdown energy was exceeded. + * + * @see #getInsulationBreakdownEnergy() + */ + void removeInsulation(); + + /** + * Remove the conductor if the conductor breakdown energy was exceeded. + * + * @see #getConductorBreakdownEnergy() + */ + void removeConductor(); +} + diff --git a/src/common/ic2/api/IEnergyEmitter.java b/src/common/ic2/api/IEnergyEmitter.java new file mode 100644 index 00000000..94699b9a --- /dev/null +++ b/src/common/ic2/api/IEnergyEmitter.java @@ -0,0 +1,21 @@ +package ic2.api; + +import net.minecraft.src.TileEntity; + +/** + * For internal usage only. + * + * @see IEnergySource + * @see IEnergyConductor + */ +public interface IEnergyEmitter extends IEnergyTile { + /** + * Determine if this emitter can emit energy to an adjacent receiver. + * + * @param receiver receiver + * @param direction direction the receiver is from the emitter + * @return Whether energy should be emitted + */ + boolean emitsEnergyTo(TileEntity receiver, Direction direction); +} + diff --git a/src/common/ic2/api/IEnergySink.java b/src/common/ic2/api/IEnergySink.java new file mode 100644 index 00000000..a0ed9a55 --- /dev/null +++ b/src/common/ic2/api/IEnergySink.java @@ -0,0 +1,23 @@ +package ic2.api; + +/** + * Allows a tile entity (mostly a machine) to receive energy. + */ +public interface IEnergySink extends IEnergyAcceptor { + /** + * Determine whether the sink requires energy. + * + * @return Whether the sink is requiring energy + */ + boolean demandsEnergy(); + + /** + * Transfer energy to the sink. + * + * @param directionFrom direction from which the energy comes from + * @param amount energy to be transferred + * @return Energy not consumed (leftover) + */ + int injectEnergy(Direction directionFrom, int amount); +} + diff --git a/src/common/ic2/api/IEnergySource.java b/src/common/ic2/api/IEnergySource.java new file mode 100644 index 00000000..39d14a20 --- /dev/null +++ b/src/common/ic2/api/IEnergySource.java @@ -0,0 +1,15 @@ +package ic2.api; + +/** + * Allows a tile entity (mostly a generator) to emit energy. + */ +public interface IEnergySource extends IEnergyEmitter { + /** + * Maximum energy output provided by the source. + * If unsure, use Integer.MAX_VALUE. + * + * @return Maximum energy output + */ + int getMaxEnergyOutput(); +} + diff --git a/src/common/ic2/api/IEnergyStorage.java b/src/common/ic2/api/IEnergyStorage.java new file mode 100644 index 00000000..a89bd7dc --- /dev/null +++ b/src/common/ic2/api/IEnergyStorage.java @@ -0,0 +1,27 @@ +package ic2.api; + +/** + * Interface implemented by the tile entity of energy storage blocks. + */ +public interface IEnergyStorage { + /** + * Get the amount of energy currently stored in the block. + * + * @return Energy stored in the block + */ + public int getStored(); + + /** + * Get the maximum amount of energy the block can store. + * + * @return Maximum energy stored + */ + public int getCapacity(); + + /** + * Get the block's energy output. + * + * @return Energy output in EU/t + */ + public int getOutput(); +} diff --git a/src/common/ic2/api/IEnergyTile.java b/src/common/ic2/api/IEnergyTile.java new file mode 100644 index 00000000..10445432 --- /dev/null +++ b/src/common/ic2/api/IEnergyTile.java @@ -0,0 +1,18 @@ +package ic2.api; + +/** + * For internal usage only. + * + * @see IEnergySink + * @see IEnergySource + * @see IEnergyConductor + */ +public interface IEnergyTile { + /** + * Determine if this tile entity has been added to the energy network + * + * @return Whether the tile entity has been added + */ + boolean isAddedToEnergyNet(); +} + diff --git a/src/common/ic2/api/IMetalArmor.java b/src/common/ic2/api/IMetalArmor.java new file mode 100644 index 00000000..fe8db2ed --- /dev/null +++ b/src/common/ic2/api/IMetalArmor.java @@ -0,0 +1,20 @@ +package ic2.api; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; + +/** + * Armor items implementing this can be considered metal armor. + * + * Currently used for determining which boots can be used to slide up a magnetic pole. + */ +public interface IMetalArmor { + /** + * Determine if the given armor piece is metal armor. + * + * @param itemstack Armor piece as worn by the player + * @param player The player + * @return Whether the armor piece is metal armor + */ + public boolean isMetalArmor(ItemStack itemstack, EntityPlayer player); +} diff --git a/src/common/ic2/api/INetworkClientTileEntityEventListener.java b/src/common/ic2/api/INetworkClientTileEntityEventListener.java new file mode 100644 index 00000000..594f1d7f --- /dev/null +++ b/src/common/ic2/api/INetworkClientTileEntityEventListener.java @@ -0,0 +1,17 @@ +package ic2.api; + +import net.minecraft.src.EntityPlayer; + +/** + * Allows a tile entity to receive network events received from clients. + */ +public interface INetworkClientTileEntityEventListener { + /** + * Called when a network event is received. + * + * @param player client which sent the event + * @param event event ID + */ + void onNetworkEvent(EntityPlayer player, int event); +} + diff --git a/src/common/ic2/api/INetworkDataProvider.java b/src/common/ic2/api/INetworkDataProvider.java new file mode 100644 index 00000000..da393868 --- /dev/null +++ b/src/common/ic2/api/INetworkDataProvider.java @@ -0,0 +1,18 @@ +package ic2.api; + +import java.util.List; + +/** + * Tile entities which want to synchronized specific fields between client and server have to implement this. + * + * The fields don't update themselves, a field update must be sent every time a synchronized field changes. + */ +public interface INetworkDataProvider { + /** + * Get the list of synchronized fields. + * + * @return Names of the synchronized fields + */ + List getNetworkedFields(); +} + diff --git a/src/common/ic2/api/INetworkItemEventListener.java b/src/common/ic2/api/INetworkItemEventListener.java new file mode 100644 index 00000000..a0126b39 --- /dev/null +++ b/src/common/ic2/api/INetworkItemEventListener.java @@ -0,0 +1,18 @@ +package ic2.api; + +import net.minecraft.src.EntityPlayer; + +/** + * Allows an item to receive network events received from the server. + */ +public interface INetworkItemEventListener { + /** + * Called when a network event is received. + * + * @param metaData item metadata + * @param player player containing the item + * @param event event ID + */ + void onNetworkEvent(int metaData, EntityPlayer player, int event); +} + diff --git a/src/common/ic2/api/INetworkTileEntityEventListener.java b/src/common/ic2/api/INetworkTileEntityEventListener.java new file mode 100644 index 00000000..4433cb89 --- /dev/null +++ b/src/common/ic2/api/INetworkTileEntityEventListener.java @@ -0,0 +1,14 @@ +package ic2.api; + +/** + * Allows a tile entity to receive network events received from the server. + */ +public interface INetworkTileEntityEventListener { + /** + * Called when a network event is received. + * + * @param event Event ID + */ + void onNetworkEvent(int event); +} + diff --git a/src/common/ic2/api/INetworkUpdateListener.java b/src/common/ic2/api/INetworkUpdateListener.java new file mode 100644 index 00000000..be2adb88 --- /dev/null +++ b/src/common/ic2/api/INetworkUpdateListener.java @@ -0,0 +1,14 @@ +package ic2.api; + +/** + * Allows a tile entity to receive field sync updates received from the server. + */ +public interface INetworkUpdateListener { + /** + * Called when a field is synchronized. + * + * @param field field synchronized + */ + void onNetworkUpdate(String field); +} + diff --git a/src/common/ic2/api/IPaintableBlock.java b/src/common/ic2/api/IPaintableBlock.java new file mode 100644 index 00000000..9ee2a6b0 --- /dev/null +++ b/src/common/ic2/api/IPaintableBlock.java @@ -0,0 +1,21 @@ +package ic2.api; + +import net.minecraft.src.World; + +/** + * Allows a block to be painted by a Painter. + */ +public interface IPaintableBlock +{ + /** + * Color the block. + * + * @param world block's world + * @param x block X position + * @param y block Y position + * @param z block Z position + * @param color painter color, same as dye metadata values + * @return Whether the block was painted and the painter should be damaged + */ + public boolean colorBlock(World world, int x, int y, int z, int color); +} diff --git a/src/common/ic2/api/IReactor.java b/src/common/ic2/api/IReactor.java new file mode 100644 index 00000000..8c6a9291 --- /dev/null +++ b/src/common/ic2/api/IReactor.java @@ -0,0 +1,134 @@ +package ic2.api; + +import net.minecraft.src.ChunkCoordinates; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; + +/** + * Interface implemented by the tile entity of nuclear reactors. + */ +public interface IReactor { + /** + * Get the reactor's position in the world. + * + * @return Position of the reactor + */ + public ChunkCoordinates getPosition(); + + /** + * Get the reactor's corresponding world. + * + * @return The reactor's world + */ + public World getWorld(); + + /** + * Get the reactor's heat. + * + * @return The reactor's heat + */ + public int getHeat(); + + /** + * Set the reactor's heat. + * + * @param heat reactor heat + */ + public void setHeat(int heat); + + /** + * Increase the reactor's heat. + * + * Use negative values to decrease. + * + * @param amount amount of heat to add + * @return The reactor's heat after adding the specified amount + */ + public int addHeat(int amount); + + /** + * Get the reactor's maximum heat before exploding. + * + * @return Maximum heat value + */ + public int getMaxHeat(); + + /** + * Set the reactor's stored maxHeat variable. + * Used by plating to increase the reactors MaxHeat capacity. + * Needs to be called during each cycle process. + */ + public void setMaxHeat(int newMaxHeat); + + /** + * Get's the reactor's HEM (Heat Effect Modifier) + * Basic value is 1.0F. + * Reducing the value causes a weakening/reduction of the heat-based sideeffects of reactors + * (F.e. water evaporation, melting, damaging entitys, etc) + * + * @return HEM + */ + public float getHeatEffectModifier(); + + /** + * Set's the reactor's HEM + * Needs to be called during each cycle process. + */ + public void setHeatEffectModifier(float newHEM); + + /** + * Get the reactor's energy output. + * + * @return Energy output in EU/t + */ + public int getOutput(); + + /** + * Add's the given amount of energy to the Reactor's output. + * + * @return Energy output after adding the value, in EU/t + */ + public int addOutput(int energy); + + /** + * Get's the EU worth of a single basic Uranium pulse + * Please use this variable to alter energy output, as it represents the config modifiers as well. + */ + public int getPulsePower(); + + /** + * Get the item at the specified grid coordinates. + * + * @param x X position of the item + * @param y Y position of the item + * @return The item or null if there is no item + */ + public ItemStack getItemAt(int x, int y); + + /** + * Set the item at the specified grid coordinates. + * + * @param x X position of the item + * @param y Y position of the item + * @param item The item to set. + */ + public void setItemAt(int x, int y, ItemStack item); + + /** + * Explode the reactor. + */ + public void explode(); + + /** + * Get the reactor's tick rate (game ticks per reactor tick). + * + * @return Tick rate + */ + public int getTickRate(); + + /** + * Get whether the reactor is active and supposed to produce energy + * @return Whether the reactor is active + */ + public boolean produceEnergy(); +} diff --git a/src/common/ic2/api/IReactorChamber.java b/src/common/ic2/api/IReactorChamber.java new file mode 100644 index 00000000..fad40c27 --- /dev/null +++ b/src/common/ic2/api/IReactorChamber.java @@ -0,0 +1,13 @@ +package ic2.api; + +/** + * Interface implemented by the reactor chamber tile entity. + */ +public interface IReactorChamber { + /** + * Get the chamber's reactor. + * + * @return The reactor + */ + public IReactor getReactor(); +} diff --git a/src/common/ic2/api/IReactorComponent.java b/src/common/ic2/api/IReactorComponent.java new file mode 100644 index 00000000..26de8f2c --- /dev/null +++ b/src/common/ic2/api/IReactorComponent.java @@ -0,0 +1,97 @@ +package ic2.api; + +import net.minecraft.src.ItemStack; + +/** + * Design custom Reactor components by implementing this Interface + * Items implementing the interface will not be ejected from Reactors in their clean-up + * and can/will be interacted with by other elements, f.e. Uranium Cells. + * + * All IC2 ReactorComponents implement and use this Interface + * + */ +public interface IReactorComponent +{ + /** + * Called by reactor upon iterating through it's inventory (every cycle). + * Perform all necessary calculation/interaction here + * + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @param x X-coordinate of the stack in the grid + * @param y Y-coordinate of the stack in the grid + */ + public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y); + + /** + * Can be called by Uranium-Components who attempt to generate energy by pulsing to other components. + * Uranium-Uranium interaction (f.e.) uses this method. + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of called ItemStack + * @param pulsingStack Reference to the specific instance of pulsing ItemStack + * @param youX X-coordinate of your stack in the grid + * @param youY Y-coordinate of your stack in the grid + * @param pulseX X-coordinate of pulsing stack in the grid + * @param pulseY Y-coordinate of pulsing stack in the grid + * @return true if this component reacts to the pulse (and pulse is therefore meant to produce heat) + */ + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, int pulseX, int pulseY); + + /** + * Called by components to determine whether your component can be heated. + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @param x X-coordinate of the stack in the grid + * @param y Y-coordinate of the stack in the grid + * @return true if your component can take heat + */ + public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y); + + /** + * Called by heat-switches to determine how much heat to distribute into which direction. + * Please return the maximum capacity of your heat-containing component here. + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @param x X-coordinate of the stack in the grid + * @param y Y-coordinate of the stack in the grid + * @return Maximum heat + */ + public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y); + + /** + * Called by heat-switches to determine how much heat to distribute into which direction. + * Please return the current amount of heat stored in this component + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @param x X-coordinate of the stack in the grid + * @param y Y-coordinate of the stack in the grid + * @return Current Heat + */ + public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y); + + /** + * Called by components to distribute heat to your component. + * Perform heating-calculations and increase your heat (dmg) level accordingly. + * This method will as well be called to REDUCE heat, by providing a negative amount. + * + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @param x X-coordinate of the stack in the grid + * @param y Y-coordinate of the stack in the grid + * @param heat Amount of heat to be added (may be negative to subtract heat) + * @return 0 if the 'order' was accepted, return >0 to indicate the 'remaining' heat which couldn't be absorbed (and vice versa for <0) + */ + public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat); + + /** + * Called upon reactor explosion + * Alter the explosion size. + * Returning a float 0 < f < 1 will be counted as multiplier. + * Anything else will be counted as a flat addition (in case of <0 = reduction). + * + * @param reactor Reference to the Reactor + * @param yourStack Reference to the specific instance of iterated ItemStack + * @return your explosion modifier + */ + public float influenceExplosion(IReactor reactor, ItemStack yourStack); +} diff --git a/src/common/ic2/api/ITerraformingBP.java b/src/common/ic2/api/ITerraformingBP.java new file mode 100644 index 00000000..490d4ee2 --- /dev/null +++ b/src/common/ic2/api/ITerraformingBP.java @@ -0,0 +1,35 @@ +package ic2.api; + +import net.minecraft.src.World; + +/** + * Allows an item to act as a terraformer blueprint. + */ +public interface ITerraformingBP +{ + /** + * Get the energy consumption per operation of the blueprint. + * + * @return Energy consumption in EU + */ + public abstract int getConsume(); + + /** + * Get the maximum range of the blueprint. + * Should be a divisor of 5. + * + * @return Maximum range in blocks + */ + public abstract int getRange(); + + /** + * Perform the terraforming operation. + * + * @param world world to terraform + * @param x X position to terraform + * @param z Z position to terraform + * @param yCoord Y position of the terraformer + * @return Whether the operation was successful and the terraformer should consume energy. + */ + public abstract boolean terraform(World world, int x, int z, int yCoord); +} diff --git a/src/common/ic2/api/IWrenchable.java b/src/common/ic2/api/IWrenchable.java new file mode 100644 index 00000000..f2925361 --- /dev/null +++ b/src/common/ic2/api/IWrenchable.java @@ -0,0 +1,50 @@ +package ic2.api; + +import net.minecraft.src.EntityPlayer; + +/** + * Allows a tile entity to make use of the wrench's removal and rotation functions. + */ +public interface IWrenchable { + /** + * Determine if the wrench can be used to set the block's facing. + * Called before wrenchCanRemove(). + * + * @param entityPlayer player using the wrench + * @param side block's side the wrench was clicked on + * @return Whether the wrenching was done and the wrench should be damaged + */ + boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side); + + /** + * Get the block's facing. + * + * @return Block facing + */ + short getFacing(); + + /** + * Set the block's facing + * + * @param facing facing to set the block to + */ + void setFacing(short facing); + + /** + * Determine if the wrench can be used to remove the block. + * Called if wrenchSetFacing fails. + * + * @param entityPlayer player using the wrench + * @return Whether the wrenching was done and the wrench should be damaged + */ + boolean wrenchCanRemove(EntityPlayer entityPlayer); + + /** + * Determine the probability to drop the block as it is. + * The first entry in getBlockDropped will be replaced by blockid:meta if the drop is successful. + * + * @return Probability from 0 to 1 + */ + float getWrenchDropRate(); +} + diff --git a/src/common/ic2/api/Ic2Recipes.java b/src/common/ic2/api/Ic2Recipes.java new file mode 100644 index 00000000..6d286cb1 --- /dev/null +++ b/src/common/ic2/api/Ic2Recipes.java @@ -0,0 +1,358 @@ +package ic2.api; + +import java.lang.reflect.Array; +import java.util.AbstractMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.src.Block; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; + +/** + * Provides access to Compressor, Extractor and Macerator recipes, as well as charge-aware recipes + * and the Recycler blacklist. + * + * The recipes are only valid after IC2 has been loaded and are metadata and stack size sensitive, + * for example you can create a recipe to compress 3 wooden planks into 2 sticks. + */ +public final class Ic2Recipes { + /** + * Add a charge-aware shaped crafting recipe. + */ + public static void addCraftingRecipe(ItemStack result, Object... args) { + try { + Class.forName(getPackage() + ".common.AdvRecipe").getMethod("addAndRegister", ItemStack.class, Array.newInstance(Object.class, 0).getClass()).invoke(null, result, args); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Add a charge-aware shapeless crafting recipe. + */ + public static void addShapelessCraftingRecipe(ItemStack result, Object... args) { + try { + Class.forName(getPackage() + ".common.AdvShapelessRecipe").getMethod("addAndRegister", ItemStack.class, Array.newInstance(Object.class, 0).getClass()).invoke(null, result, args); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Retrieve the registered Compressor recipes. + * + * @return Recipe list as a list of map entries, the key is the input and the value is the output + */ + public static List > getCompressorRecipes() { + if (TileEntityCompressor_recipes == null) { + try { + TileEntityCompressor_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityCompressor").getField("recipes").get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + return TileEntityCompressor_recipes; + } + + /** + * Add a Compressor recipe. + * + * @param input Input + * @param output Output + */ + public static void addCompressorRecipe(ItemStack input, ItemStack output) { + getCompressorRecipes().add(new AbstractMap.SimpleEntry(input, output)); + } + + + /** + * Get the Compressor output for an input item. + * + * @param input input item + * @param adjustInput remove the processing requirements from input + * @return Output item as an independent stack + */ + public static ItemStack getCompressorOutputFor(ItemStack input, boolean adjustInput) { + return getOutputFor(input, adjustInput, getCompressorRecipes()); + } + + /** + * Retrieve the registered Extractor recipes. + * + * @return Recipe list as a list of map entries, the key is the input and the value is the output + */ + public static List > getExtractorRecipes() { + if (TileEntityExtractor_recipes == null) { + try { + TileEntityExtractor_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityExtractor").getField("recipes").get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + return TileEntityExtractor_recipes; + } + + /** + * Add a Extractor recipe. + * + * @param input Input + * @param output Output + */ + public static void addExtractorRecipe(ItemStack input, ItemStack output) { + getExtractorRecipes().add(new AbstractMap.SimpleEntry(input, output)); + } + + + /** + * Get the Extractor output for an input item. + * + * @param input input item + * @param adjustInput remove the processing requirements from input + * @return Output item as an independent stack + */ + public static ItemStack getExtractorOutputFor(ItemStack input, boolean adjustInput) { + return getOutputFor(input, adjustInput, getExtractorRecipes()); + } + + /** + * Retrieve the registered Macerator recipes. + * + * @return Recipe list as a list of map entries, the key is the input and the value is the output + */ + public static List > getMaceratorRecipes() { + if (TileEntityMacerator_recipes == null) { + try { + TileEntityMacerator_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityMacerator").getField("recipes").get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + return TileEntityMacerator_recipes; + } + + /** + * Add a Macerator recipe. + * + * @param input Input + * @param output Output + */ + public static void addMaceratorRecipe(ItemStack input, ItemStack output) { + getMaceratorRecipes().add(new AbstractMap.SimpleEntry(input, output)); + } + + + /** + * Get the Macerator output for an input item. + * + * @param input input item + * @param adjustInput remove the processing requirements from input + * @return Output item as an independent stack + */ + public static ItemStack getMaceratorOutputFor(ItemStack input, boolean adjustInput) { + return getOutputFor(input, adjustInput, getMaceratorRecipes()); + } + + + private static ItemStack getOutputFor(ItemStack input, boolean adjustInput, List > recipeList) { + assert input != null; + + for (Map.Entry entry: recipeList) { + if (entry.getKey().isItemEqual(input) && input.stackSize >= entry.getKey().stackSize) { + if (adjustInput) input.stackSize -= entry.getKey().stackSize; + + return entry.getValue().copy(); + } + } + + return null; + } + + + /** + * Retrieve the registered Recycler blacklist items. + * + * @return Blacklist + */ + public static List getRecyclerBlacklist() { + if (TileEntityRecycler_blacklist == null) { + try { + TileEntityRecycler_blacklist = (List) Class.forName(getPackage() + ".common.TileEntityRecycler").getField("blacklist").get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + return TileEntityRecycler_blacklist; + } + + /** + * Add an item stack to the Recycler blacklist. + * + * @param newBlacklistedItem item stack to add + */ + public static void addRecyclerBlacklistItem(ItemStack newBlacklistedItem) { + getRecyclerBlacklist().add(newBlacklistedItem); + } + + /** + * Add an item to the Recycler blacklist. + * + * @param newBlacklistedItem item to add + */ + public static void addRecyclerBlacklistItem(Item newBlacklistedItem) { + addRecyclerBlacklistItem(new ItemStack(newBlacklistedItem, 1, -1)); + } + + /** + * Add a block to the Recycler blacklist. + * + * @param newBlacklistedBlock block to add + */ + public static void addRecyclerBlacklistItem(Block newBlacklistedBlock) { + addRecyclerBlacklistItem(new ItemStack(newBlacklistedBlock, 1, -1)); + } + + + /** + * Determine if an item is in the Recycler blacklist. + * + * @param itemStack item to check + * @return Whether the item is blacklisted or not + */ + public static boolean isRecyclerInputBlacklisted(ItemStack itemStack) { + for (ItemStack blackItem: getRecyclerBlacklist()) { + if (itemStack.isItemEqual(blackItem)) return true; + } + + return false; + } + + /** + * Retrieve the registered Scrap Box drops. + * + * @return Drops as a list of item stack and float (chance) pairs + */ + public static List> getScrapboxDrops() { + try { + return (List>) Class.forName(getPackage() + ".common.ItemScrapbox").getMethod("getDropList").invoke(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /* + * Reference scrap box chance values: + * + * 0.1: Diamond + * 0.5: Cake, Gold Helmet, Iron Ore, Gold Ore + * 1.0: Wooden tools, Soul Sand, Sign, Leather, Feather, Bone + * 1.5: Apple, Bread + * 2.0: Netherrack, Rotten Flesh + * 3.0: Grass, Gravel + * 4.0: Stick + * 5.0: Dirt, Wooden Hoe + */ + + /** + * Add an item stack to the Scrap Box drops. + * + * @param dropItem item stack to add + * @param chance chance for the item to drop, see the code comments for reference values + */ + public static void addScrapboxDrop(ItemStack dropItem, float chance) { + try { + Class.forName(getPackage() + ".common.ItemScrapbox").getMethod("addDrop", ItemStack.class, float.class).invoke(null, dropItem, chance); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Add an item to the Scrap Box drops. + * + * @param dropItem item to add + * @param chance chance for the item to drop, see the code comments for reference values + */ + public static void addScrapboxDrop(Item dropItem, float chance) { + addScrapboxDrop(new ItemStack(dropItem, 1), chance); + } + + /** + * Add a block to the Scrap Box drops. + * + * @param dropItem item to add + * @param chance chance for the item to drop, see the code comments for reference values + */ + public static void addScrapboxDrop(Block dropItem, float chance) { + addScrapboxDrop(new ItemStack(dropItem), chance); + } + + /** + * Retrieve the registered Mass Fabricator amplifiers. + * + * @return Amplifiers as a list of item stack and integer (amplifier value) pairs + */ + public static List > getMatterAmplifiers() { + if (TileEntityMatter_amplifiers == null) { + try { + TileEntityMatter_amplifiers = (List >) Class.forName(getPackage() + ".common.TileEntityMatter").getField("amplifiers").get(null); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + return TileEntityMatter_amplifiers; + } + + /** + * Add an item stack to the Mass Fabricator amplifiers. + * + * @param amplifierItem item stack to add + * @param value amplifier value for the item, scrap is 5000 + */ + public static void addMatterAmplifier(ItemStack amplifierItem, int value) { + getMatterAmplifiers().add(new AbstractMap.SimpleEntry(amplifierItem, value)); + } + + /** + * Add an item to the Mass Fabricator amplifiers. + * + * @param amplifierItem item to add + * @param value amplifier value for the item, scrap is 5000 + */ + public static void addMatterAmplifier(Item amplifierItem, int value) { + addMatterAmplifier(new ItemStack(amplifierItem, 1, -1), value); + } + + /** + * Add a block to the Mass Fabricator amplifiers. + * + * @param amplifierItem item to add + * @param value amplifier value for the item, scrap is 5000 + */ + public static void addMatterAmplifier(Block amplifierItem, int value) { + addMatterAmplifier(new ItemStack(amplifierItem, 1, -1), value); + } + + /** + * Get the base IC2 package name, used internally. + * + * @return IC2 package name, if unable to be determined defaults to ic2 + */ + private static String getPackage() { + Package pkg = Ic2Recipes.class.getPackage(); + if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); + else return "ic2"; + } + + private static List > TileEntityCompressor_recipes; + private static List > TileEntityExtractor_recipes; + private static List > TileEntityMacerator_recipes; + private static List TileEntityRecycler_blacklist; + private static List > TileEntityMatter_amplifiers; +} + diff --git a/src/common/ic2/api/Items.java b/src/common/ic2/api/Items.java new file mode 100644 index 00000000..5835eb5d --- /dev/null +++ b/src/common/ic2/api/Items.java @@ -0,0 +1,401 @@ +package ic2.api; + +import net.minecraft.src.ItemStack; + +/** + * Provides access to IC2 blocks and items. + * + * Some items can be acquired through the ore dictionary which is the recommended way. + * The items are initialized while IC2 is being loaded - try to use ModsLoaded() or load your mod after IC2. + * Some blocks/items can be disabled by a config setting, so it's recommended to check if they're null first. + * + * Getting the associated Block/Item for an ItemStack x: + * Blocks: Block.blocksList[x.itemID] + * Items: x.getItem() + */ +public final class Items { + /** + * Get an ItemStack for a specific item name, example: Items.getItem("resin") + * See the list below for item names. + * Make sure to copy() the ItemStack if you want to modify it. + * + * @param name item name + * @return The item or null if the item does not exist or an error occurred + */ + public static ItemStack getItem(String name) { + try { + if (Ic2Items == null) Ic2Items = Class.forName(getPackage() + ".common.Ic2Items"); + + Object ret = Ic2Items.getField(name).get(null); + + if (ret instanceof ItemStack) { + return (ItemStack) ret; + } else { + return null; + } + } catch (Exception e) { + System.out.println("IC2 API: Call getItem failed for "+name); + + return null; + } + } + + /* Possible values: + + ----- blocks ----- + + ores + copperOre Copper Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreCopper, null with enableWorldGenOreCopper=false + tinOre Tin Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreTin, null with enableWorldGenOreTin=false + uraniumOre Tin Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreUranium, null with enableWorldGenOreUranium=false + + rubber related + Rubber wood block, meta reflects the state, meta in ItemStack set to 0, ore dictionary: woodRubber (with meta 0), null with enableWorldGenTreeRubber=false + dropped (as an item) -> metadata 0 + block, no resin spot -> metadata 0 or 1 + block, wet resin spot -> metadata 2-5 (according to the side) + block, dry resin spot -> metadata 8-11 (wet state + 6) + + rubberWood + rubberLeaves Rubber Leaves block, currently not meta sensitive, meta in ItemStack set to 0, null with enableWorldGenTreeRubber=false + rubberSapling Rubber Sapling block, currently not meta sensitive, meta in ItemStack set to 0, null with enableWorldGenTreeRubber=false + resinSheet Resin Sheet block, currently not meta sensitive + rubberTrampoline Rubber Trampoline block, meta reflects internal state, meta in ItemStack set to 0 + + building/storage + ironFence Iron Fence block, currently not meta sensitive + + reinforcedStone Reinforced Stone block, currently not meta sensitive + reinforcedGlass Reinforced Glass block, currently not meta sensitive + reinforcedDoorBlock Reinforced Door block, meta reflects the state (see vanilla doors), meta in ItemStack set to 0 + + constructionFoam Construction Foam block, currently not meta sensitive + constructionFoamWall Construction Foam Wall block, meta = color, implements IPaintableBlock + scaffold Scaffold block, meta reflects internal physical model data + + bronzeBlock Bronze block, meta sensitive + copperBlock Copper block, meta sensitive + tinBlock Tin block, meta sensitive + uraniumBlock Uranium block, meta sensitive + + cables (when placed as a block, inventory items are different TE implements IEnergyConductor) + copperCableBlock Copper Cable block, meta sensitive + insulatedCopperCableBlock Insulated Copper Cable block, meta sensitive + + goldCableBlock Gold Cable block, meta sensitive + insulatedGoldCableBlock Insulated Gold Cable block, meta sensitive + doubleInsulatedGoldCableBlock Double Insulated Gold Cable block, meta sensitive + + ironCableBlock Iron Cable block, meta sensitive + insulatedIronCableBlock Insulated Iron Cable block, meta sensitive + doubleInsulatedIronCableBlock Double Insulated Iron Cable block, meta sensitive + trippleInsulatedIronCableBlock Tripple Insulated Iron Cable block, meta sensitive + + glassFiberCableBlock Glass Fiber Cable block, meta sensitive + + tinCableBlock Tin Cable block, meta sensitive + + detectorCableBlock Detector Cable block, meta sensitive + splitterCableBlock Splitter Cable block, meta sensitive + + generators + related (TE implements IEnergySource ex. reactorChamber) + generator Generator block, meta sensitive + geothermalGenerator Geothermal Generator block, meta sensitive + waterMill Water Mill block, meta sensitive + solarPanel Solar Panel block, meta sensitive + windMill Wind Mill block, meta sensitive + nuclearReactor Nuclear Reactor block, meta sensitive + reactorChamber Reactor Chamber block, currently not meta sensitive + + energy storages (TE implements IEnergySource and IEnergyConductor) + batBox BatBox block, meta sensitive + mfeUnit MFE Unit block, meta sensitive + mfsUnit MFS Unit block, meta sensitive + + transformers (TE implements IEnergySource and IEnergyConductor) + lvTransformer LV Transformer block, meta sensitive + mvTransformer MV Transformer block, meta sensitive + hvTransformer HV Transformer block, meta sensitive + + machines + related (TE implements IEnergySink ex. machine, miningPipe, miningPipeTip) + machine Machine block, meta sensitive + advancedMachine Advanced Machine block, meta sensitive + + ironFurnace Iron Furnace block, meta sensitive + electroFurnace Electro Furnace block, meta sensitive + macerator Macerator block, meta sensitive + extractor Extractor block, meta sensitive + compressor Compressor block, meta sensitive + canner Canner block, meta sensitive + miner Miner block, meta sensitive + pump Pump block, meta sensitive + magnetizer Magnetizer block, meta sensitive + electrolyzer Electrolyzer block, meta sensitive + recycler Recycler block, meta sensitive + inductionFurnace Induction Furnace block, meta sensitive + massFabricator Mass Fabricator block, meta sensitive + terraformer Terraformer block, meta sensitive + teleporter Teleporter block, meta sensitive + teslaCoil Tesla Coil block, meta sensitive + luminator Passive (dark) Luminator block, meta = facing + activeLuminator Active (bright) Luminator block, meta = facing + + miningPipe Mining Pipe block, currently not meta sensitive, meta in ItemStack set to 0 + miningPipeTip Mining Pipe Tip block, currently not meta sensitive, meta in ItemStack set to 0 + + personal blocks + personalSafe Personal Safe block, meta sensitive + tradeOMat Trade-O-Mat block, meta sensitive + energyOMat Energy-O-Mat block, meta sensitive + + explosives + industrialTnt Industrial TNT block, currently not meta sensitive + nuke Nuke block, currently not meta sensitive + dynamiteStick Dynamite Stick block, meta = placement, meta in ItemStack set to 0 + dynamiteStickWithRemote Dynamite Stick with Remote block, meta = placement, meta in ItemStack set to 0 + + Agriculture Stuff + crop Crop Block, empty, not meta sensitive + + + ----- items ----- + + rubber + related + resin Resin item, currently not meta sensitive + rubber Rubber item, currently not meta sensitive, ore dictionary: itemRubber + + ore drops + uraniumDrop Uranium Drop item, currently not meta sensitive, ore dictionary: itemDropUranium + + dusts + bronzeDust Bronze Dust item, currently not meta sensitive + clayDust Clay Dust item, currently not meta sensitive + coalDust Coal Dust item, currently not meta sensitive + copperDust Copper Dust item, currently not meta sensitive + goldDust Gold Dust item, currently not meta sensitive + ironDust Iron Dust item, currently not meta sensitive + silverDust Silver Dust item, currently not meta sensitive + smallIronDust Small Iron Dust item, currently not meta sensitive + tinDust Tin Dust item, currently not meta sensitive + hydratedCoalDust Hydrated Coal Dust item, currently not meta sensitive + + ingots + refinedIronIngot Refined Iron Ingot item, currently not meta sensitive, ore dictionary: ingotRefinedIron + copperIngot Copper Ingot item, currently not meta sensitive, ore dictionary: ingotCopper + tinIngot Tin Ingot item, currently not meta sensitive, ore dictionary: ingotTin + bronzeIngot Bronze Ingot item, currently not meta sensitive, ore dictionary: ingotBronze + mixedMetalIngot Mixed Metal Ingot item, currently not meta sensitive + uraniumIngot Uranium Ingot item, currently not meta sensitive, ore dictionary: ingotUranium + + tools/weapons (without electric tools) + treetap Treetap item, meta = damage value + wrench Wrench item, meta = damage value + cutter Insulation Cutter item, meta = damage value + constructionFoamSprayer Construction Foam Sprayer item, meta = charges (as of v1.45) + + bronzePickaxe Bronze Pickaxe item, meta = damage value + bronzeAxe Bronze Axe item, meta = damage value + bronzeSword Bronze Sword item, meta = damage value + bronzeShovel Bronze Shovel item, meta = damage value + bronzeHoe Bronze Hoe item, meta = damage value + + el. tools/devices/weapons + miningDrill Mining Drill item, meta = visual charge indicator, implements IElectricItem + diamondDrill Diamond Tipped Mining Drill item, meta = visual charge indicator, implements IElectricItem + chainsaw Chainsaw item, meta = visual charge indicator, implements IElectricItem + electricWrench Electric Wrench item, meta = visual charge indicator, implements IElectricItem + electricTreetap Electric Treetap item, meta = visual charge indicator, implements IElectricItem + miningLaser Mining Laser item, meta = visual charge indicator, implements IElectricItem + + ecMeter EC-Mater item, currently not meta sensitive + odScanner Ore Density Scanner item, meta = damage value for charge level, implements IElectricItem + ovScanner Ore Value Scanner item, meta = visual charge indicator, implements IElectricItem + + frequencyTransmitter Frequency Transmitter item, currently not meta sensitive + + nanoSaber Idle Nano Saber item, meta = visual charge indicator, implements IElectricItem + enabledNanoSaber Enabled Nano Saber item, meta = visual charge indicator, implements IElectricItem + + armor/wearable + rubberBoots Rubber Boots item, meta = damage value + + bronzeHelmet Bronze Helmet Armor item, meta = damage value + bronzeChestplate Bronze Chestplate Armor item, meta = damage value + bronzeLeggings Bronze Leggings Armor item, meta = damage value + bronzeBoots Bronze Boots Armor item, meta = damage value + + compositeArmor Composite Armor item, meta = damage value for charge level + + nanoHelmet Nano Helmet Armor item, meta = visual charge indicator, implements IElectricItem + nanoBodyarmor Nano Bodyarmor item, meta = visual charge indicator, implements IElectricItem + nanoLeggings Nano Leggings Armor item, meta = visual charge indicator, implements IElectricItem + nanoBoots Nano Boots Armor item, meta = visual charge indicator, implements IElectricItem + + quantumHelmet Quantum Helmet Armor item, meta = visual charge indicator, implements IElectricItem + quantumBodyarmor Quantum Bodyarmor item, meta = visual charge indicator, implements IElectricItem + quantumLeggings Quantum Leggings Armor item, meta = visual charge indicator, implements IElectricItem + quantumBoots Quantum Boots Armor item, meta = visual charge indicator, implements IElectricItem + + jetpack Jetpack item, meta = damage value for fuel level + electricJetpack Electric Jetpack item, meta = visual charge indicator, implements IElectricItem + + batPack BatPack item, meta = visual charge indicator, implements IElectricItem, can provide energy + lapPack LapPack item, meta = visual charge indicator, implements IElectricItem, can provide energy + + cfPack CF Pack item, meta = charges (as of v1.45) + + solarHelmet Solar Helmet item, currently not meta sensitive + staticBoots Static Boots item, currently not meta sensitive + + batteries + reBattery Empty RE Battery item, currently not meta sensitive, implements IElectricItem + chargedReBattery RE Battery item, meta = visual charge indicator, implements IElectricItem, can provide energy + energyCrystal Energy Crystal item, meta = visual charge indicator, implements IElectricItem, can provide energy + lapotronCrystal Lapotron Crystal item, meta = visual charge indicator, implements IElectricItem, can provide energy + suBattery SU Battery item, currently not meta sensitive + + cables + copperCableItem Copper Cable item, meta sensitive + insulatedCopperCableItem Insulated Copper Cable item, meta sensitive + + goldCableItem Gold Cable item, meta sensitive + insulatedGoldCableItem Insulated Gold Cable item, meta sensitive + doubleInsulatedGoldCableItem Double Insulated Gold Cable item, meta sensitive + + ironCableItem Iron Cable item, meta sensitive + insulatedIronCableItem Insulated Iron Cable item, meta sensitive + doubleInsulatedIronCableItem Double Insulated Iron Cable item, meta sensitive + trippleInsulatedIronCableItem Tripple Insulated Iron Cable item, meta sensitive + + glassFiberCableItem Glass Fiber Cable item, meta sensitive + + tinCableItem Tin Cable item, meta sensitive + + detectorCableItem Detector Cable item, meta sensitive + splitterCableItem Splitter Cable item, meta sensitive + + cells/containers (without reactor components) + cell Empty Cell item, currently not meta sensitive + lavaCell Lava Cell item, currently not meta sensitive + hydratedCoalCell Hydrated Coal Cell item, currently not meta sensitive + bioCell Bio Cell item, currently not meta sensitive + coalfuelCell Coalfuel Cell item, currently not meta sensitive + biofuelCell Biofuel Cell item, currently not meta sensitive + waterCell Water Cell item, currently not meta sensitive + electrolyzedWaterCell Electrolyzed Water Cell item, currently not meta sensitive + + fuelCan Empty Fuel Can item, currently not meta sensitive + filledFuelCan Fuel Can item, meta = fuel value (as of v1.45) + + tinCan Empty Tin Can item, currently not meta sensitive + filledTinCan Filled Tin Can item, currently not meta sensitive + + reactor components + uraniumCell Uranium Cell item, meta = damage value + coolingCell Cooling Cell item, meta = damage value + + depletedIsotopeCell Depleted Isotope Cell item, meta = damage value + reEnrichedUraniumCell Re-Enriched Uranium Cell item, currently not meta sensitive + nearDepletedUraniumCell Near-Depleted Uranium Cell item, currently not meta sensitive + + integratedReactorPlating Integrated Reactor Plating item, meta = damage value + integratedHeatDisperser Integrated Heat Disperser item, meta = damage value + + terraformer blueprints + terraformerBlueprint Empty Terraformer Blueprint item, currently not meta sensitive + cultivationTerraformerBlueprint Cultivation Terraformer Blueprint item, currently not meta sensitive + irrigationTerraformerBlueprint Irrigation Terraformer Blueprint item, currently not meta sensitive + chillingTerraformerBlueprint Chilling Terraformer Blueprint item, currently not meta sensitive + desertificationTerraformerBlueprint Desertification Terraformer Blueprint item, currently not meta sensitive + flatificatorTerraformerBlueprint Flatificator Terraformer Blueprint item, currently not meta sensitive + mushroomTerraformerBlueprint Mushroom Terraformer Blueprint item, currently not meta sensitive + + diamond chain + coalBall Coal Ball item, currently not meta sensitive + compressedCoalBall Compressed Coal Ball item, currently not meta sensitive + coalChunk Coal Chunk item, currently not meta sensitive + industrialDiamond Industrial Diamond item, currently not meta sensitive, DEPRECATED + + recycler chain + scrap Scrap item, currently not meta sensitive + scrapBox Scrap Box item, currently not meta sensitive + + fuel production chain + hydratedCoalClump Hydrated Coal Clump item, currently not meta sensitive + plantBall Plant Ball item, currently not meta sensitive + compressedPlantBall Compressed Plant Ball item, currently not meta sensitive + + painting + painter Painter item, currently not meta sensitive + + blackPainter Black Painter item, meta = damage value + redPainter Red Painter item, meta = damage value + greenPainter Green Painter item, meta = damage value + brownPainter Brown Painter item, meta = damage value + bluePainter Blue Painter item, meta = damage value + purplePainter Purple Painter item, meta = damage value + cyanPainter Cyan Painter item, meta = damage value + lightGreyPainter Light Grey Painter item, meta = damage value + darkGreyPainter Dark Grey Painter item, meta = damage value + pinkPainter Pink Painter item, meta = damage value + limePainter Lime Painter item, meta = damage value + yellowPainter Yellow Painter item, meta = damage value + cloudPainter Cloud Painter item, meta = damage value + magentaPainter Magenta Painter item, meta = damage value + orangePainter Orange Painter item, meta = damage value + whitePainter White Painter item, meta = damage value + + explosives + related + dynamite Throwable Dynamite item, currently not meta sensitive + stickyDynamite Throwable Sticky Dynamite item, currently not meta sensitive + + remote Dynamite Remote item, currently not meta sensitive + + misc intermediate recipe ingredients + electronicCircuit Electronic Circuit item, currently not meta sensitive + advancedCircuit Advanced Circuit item, currently not meta sensitive + + advancedAlloy Advanced Alloy item, currently not meta sensitive + + carbonFiber Raw Carbon Fiber item, currently not meta sensitive + carbonMesh Raw Carbon Mesh item, currently not meta sensitive + carbonPlate Carbon Plate item, currently not meta sensitive + + matter UU-Matter item, currently not meta sensitive + iridiumOre Iridium Ore item, currently not meta sensitive + iridiumPlate Iridium Plate item, currently not meta sensitive + + upgrade modules + overclockerUpgrade overclocker upgrade item, meta sensitive + transformerUpgrade transformer upgrade item, meta sensitive + energyStorageUpgrade energy storage upgrade item, meta sensitive + + misc + coin Coin item, currently not meta sensitive + reinforcedDoor Reinforced Door item, currently not meta sensitive + constructionFoamPellet Construction Foam Pellet item, currently not meta sensitive + cropSeed Crop seeds, stuff stored in NBT, don't use for crafting recipes! + cropnalyzer Cropnalyzer handheld device + fertilizer Basic IC2Item, used to provide nutrients toCropBlocks + hydratingCell Cell used to hydrate Crops, meta = Content, 0 = Full, 9999 = Near empty + electricHoe Electric Hoe, meta = charge level + solarHelmet Solar Helmet item, currently not meta sensitive + terraWart Terra Wart item, cures potion effects + weedEx Weed-EX can, meta = uses left + + */ + + /** + * Get the base IC2 package name, used internally. + * + * @return IC2 package name, if unable to be determined defaults to ic2 + */ + private static String getPackage() { + Package pkg = Items.class.getPackage(); + if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); + else return "ic2"; + } + + private static Class Ic2Items; +} + diff --git a/src/common/ic2/api/NetworkHelper.java b/src/common/ic2/api/NetworkHelper.java new file mode 100644 index 00000000..5287671b --- /dev/null +++ b/src/common/ic2/api/NetworkHelper.java @@ -0,0 +1,236 @@ +package ic2.api; + +import java.lang.reflect.Method; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +/** + * Provides methods to initiate events and synchronize tile entity fields in SMP. + * + * The methods are transparent between singleplayer and multiplayer - if a method is called in + * singleplayer, the associated callback will be locally executed. The implementation is different + * between the client and server versions of IC2. + * + * You'll usually want to use the server->client methods defined here to synchronize information + * which is needed by the clients outside the GUI, such as rendering the block, playing sounds or + * producing effects. Anything which is only visible inside the GUI should be synchronized through + * the Container class associated to the GUI in Container.updateProgressBar(). + */ +public final class NetworkHelper { + // server -> client + + + /** + * Schedule a TileEntity's field to be updated to the clients in range. + * + * The updater will query the field's value during the next update, updates happen usually + * every 2 ticks. If low latency is important use initiateTileEntityEvent instead. + * + * IC2's network updates have to get triggered every time, it doesn't continuously poll/send + * the field value. Just call updateTileEntityField after every change to a field which needs + * network synchronization. + * + * The following field data types are currently supported: + * - int, int[], short, short[], byte, byte[], long, long[] + * - float, float[], double, double[] + * - boolean, boolean[] + * - String, String[] + * - ItemStack + * - NBTBase (includes NBTTagCompound) + * - Block, Item, Achievement, Potion, Enchantment + * - ChunkCoordinates, ChunkCoordIntPair + * - TileEntity (does not sync the actual tile entity, instead looks up the tile entity by its position in the client world) + * - World (does not sync the actual world, instead looks up the world by its dimension ID) + * + * Once the update has been processed by the client, it'll call onNetworkUpdate on the client- + * side TileEntity if it implements INetworkUpdateListener. + * + * If this method is being executed on the client (i.e. Singleplayer), it'll just call + * INetworkUpdateListener.onNetworkUpdate (if implemented by the te). + * + * @param te TileEntity to update + * @param field Name of the field to update + */ + public static void updateTileEntityField(TileEntity te, String field) { + try { + if (NetworkManager_updateTileEntityField == null) NetworkManager_updateTileEntityField = Class.forName(getPackage() + ".common.NetworkManager").getMethod("updateTileEntityField", TileEntity.class, String.class); + if (instance == null) instance = getInstance(); + + NetworkManager_updateTileEntityField.invoke(instance, te, field); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Immediately send an event for the specified TileEntity to the clients in range. + * + * If this method is being executed on the client (i.e. Singleplayer), it'll just call + * INetworkTileEntityEventListener.onNetworkEvent (if implemented by the te). + * + * @param te TileEntity to notify, should implement INetworkTileEntityEventListener + * @param event Arbitrary integer to represent the event, choosing the values is up to you + * @param limitRange Limit the notification range to (currently) 20 blocks instead of the + * tracking distance if true + */ + public static void initiateTileEntityEvent(TileEntity te, int event, boolean limitRange) { + try { + if (NetworkManager_initiateTileEntityEvent == null) NetworkManager_initiateTileEntityEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateTileEntityEvent", TileEntity.class, Integer.TYPE, Boolean.TYPE); + if (instance == null) instance = getInstance(); + + NetworkManager_initiateTileEntityEvent.invoke(null, te, event, limitRange); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Immediately send an event for the specified Item to the clients in range. + * + * The item should implement INetworkItemEventListener to receive the event. + * + * If this method is being executed on the client (i.e. Singleplayer), it'll just call + * INetworkItemEventListener.onNetworkEvent (if implemented by the item). + * + * @param player EntityPlayer holding the item + * @param itemStack ItemStack containing the item + * @param event Arbitrary integer to represent the event, choosing the values is up to you + * @param limitRange Limit the notification range to (currently) 20 blocks instead of the + * tracking distance if true + */ + public static void initiateItemEvent(EntityPlayer player, ItemStack itemStack, int event, boolean limitRange) { + try { + if (NetworkManager_initiateItemEvent == null) NetworkManager_initiateItemEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateItemEvent", EntityPlayer.class, ItemStack.class, Integer.TYPE, Boolean.TYPE); + if (instance == null) instance = getInstance(); + + NetworkManager_initiateItemEvent.invoke(instance, player, itemStack, event, limitRange); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Schedule a block update (re-render) on the clients in range. + * + * If this method is being executed on the client (i.e. Singleplayer), it'll just trigger the + * block update locally. + * + * @param world World containing the block + * @param x The block's x coordinate + * @param y The block's y coordinate + * @param z The block's z coordinate + */ + public static void announceBlockUpdate(World world, int x, int y, int z) { + try { + if (NetworkManager_announceBlockUpdate == null) NetworkManager_announceBlockUpdate = Class.forName(getPackage() + ".common.NetworkManager").getMethod("announceBlockUpdate", World.class, Integer.TYPE, Integer.TYPE, Integer.TYPE); + + NetworkManager_announceBlockUpdate.invoke(null, world, x, y, z); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + + // client -> server + + + /** + * Ask the server to send the values of the fields specified. + * + * See updateTileEntityField for the supported field types. + * + * The implementation is currently limited to TileEntitys as data providers. The tile entity + * has to be fully initialized when executing this method (i.e. valid worldObj+coords). + * + * This method doesn't do anything if executed on the server. + * + * @param dataProvider Object implementing the INetworkDataProvider interface + */ + public static void requestInitialData(INetworkDataProvider dataProvider) { + try { + if (NetworkManager_requestInitialData == null) NetworkManager_requestInitialData = Class.forName(getPackage() + ".common.NetworkManager").getMethod("requestInitialData", INetworkDataProvider.class); + if (instance == null) instance = getInstance(); + + NetworkManager_requestInitialData.invoke(instance, dataProvider); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Immediately send an event for the specified TileEntity to the server. + * + * This method doesn't do anything if executed on the server. + * + * @param te TileEntity to notify, should implement INetworkClientTileEntityEventListener + * @param event Arbitrary integer to represent the event, choosing the values is up to you + */ + public static void initiateClientTileEntityEvent(TileEntity te, int event) { + try { + if (NetworkManager_initiateClientTileEntityEvent == null) NetworkManager_initiateClientTileEntityEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateClientTileEntityEvent", TileEntity.class, Integer.TYPE); + if (instance == null) instance = getInstance(); + + NetworkManager_initiateClientTileEntityEvent.invoke(instance, te, event); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Immediately send an event for the specified Item to the clients in range. + * + * The item should implement INetworkItemEventListener to receive the event. + * + * This method doesn't do anything if executed on the server. + * + * @param itemStack ItemStack containing the item + * @param event Arbitrary integer to represent the event, choosing the values is up to you + */ + public static void initiateClientItemEvent(ItemStack itemStack, int event) { + try { + if (NetworkManager_initiateClientItemEvent == null) NetworkManager_initiateClientItemEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateClientItemEvent", ItemStack.class, Integer.TYPE); + if (instance == null) instance = getInstance(); + + NetworkManager_initiateClientItemEvent.invoke(instance, itemStack, event); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * Get the base IC2 package name, used internally. + * + * @return IC2 package name, if unable to be determined defaults to ic2 + */ + private static String getPackage() { + Package pkg = NetworkHelper.class.getPackage(); + if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); + else return "ic2"; + } + + /** + * Get the NetworkManager instance, used internally. + * + * @return NetworkManager instance + */ + private static Object getInstance() { + try { + return Class.forName(getPackage() + ".common.IC2").getDeclaredField("network").get(null); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + private static Object instance; + private static Method NetworkManager_updateTileEntityField; + private static Method NetworkManager_initiateTileEntityEvent; + private static Method NetworkManager_initiateItemEvent; + private static Method NetworkManager_announceBlockUpdate; + private static Method NetworkManager_requestInitialData; + private static Method NetworkManager_initiateClientTileEntityEvent; + private static Method NetworkManager_initiateClientItemEvent; +} + diff --git a/src/common/ic2/api/TECrop.java b/src/common/ic2/api/TECrop.java new file mode 100644 index 00000000..a261953a --- /dev/null +++ b/src/common/ic2/api/TECrop.java @@ -0,0 +1,161 @@ +package ic2.api; + +import net.minecraft.src.Block; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; + +/** + * Provides access to a crop tile entity. Contains all methods and fields you can access from your CropCard. + */ +public abstract class TECrop extends TileEntity +{ + /** + * ID of the plant currently on the crop. + * -1 if there is no plant currently on the crop. + */ + public short id = -1; + + /** + * Current size of the plant. + * 1 is the starting size and the maximum size varies from plant to plant. + */ + public byte size = 0; + + /** + * Growth ability of a plant. + * Higher values give faster growth. + */ + public byte statGrowth = 0; + /** + * Chances and amount of gain and seeds from harvested crops. + * Higher values give more drops. + */ + public byte statGain = 0; + /** + * Ability for the plant to resist trampling. + * Higher values give more resistance against trampling. + */ + public byte statResistance = 0; + + /** + * Scan level, increases each time a seed goes through analysis. + */ + public byte scanLevel = 0; + + /** + * Custom data stored along a TECrop. + */ + public short[] custumData = new short[16]; + + /** + * Crop nutrients. + * Ranges from 0 (empty) to 100 (full). + */ + public int nutrientStorage = 0; + /** + * Crop hydration. + * Values are: + * - 0 for nothing + * - 1-10 for water hydration + * - 11-100 for distilled water (hydration cell) hydration + */ + public int waterStorage = 0; + /** + * Remaining duration of WeedEX + * PRevents weed from growing and protects against (unimplemented) insects or similar stuff + */ + public int exStorage = 0; + + /** + * Crop humidity. + * Ranges from 0 (dry) to 10 (humid). + * Updates every couple of seconds or when an update is requested. + * + * @see #updateState() + */ + public abstract byte getHumidity(); + + /** + * Get the crop's nutrient level. + * Ranges from 0 (empty) to 10 (full). + * Updates every couple of seconds or when an update is requested. + * + * @see #updateState() + */ + public abstract byte getNutrients(); + + /** + * Get the crop's air quality. + * Ranges from 0 (cluttered) to 10 (fresh). + * Updates every couple of seconds or when an update is requested. + * + * @see #updateState() + * + * @return Crop air quality + */ + public abstract byte getAirQuality(); + + /** + * Get the crop's light level. + * + * @return Crop light level + */ + public int getLightLevel() + { + return worldObj.getBlockLightValue(xCoord, yCoord, zCoord); + } + + + /** + * Pick the crop, removing and giving seeds for the plant. + * + * @param manual whether it was done by hand (not automated) + * @return true if successfully picked + */ + public abstract boolean pick(boolean manual); + + /** + * Harvest the crop, turning it into gain and resetting its size. + * + * @param manual whether it one by hand (not automated) + * @return true if successfully harvested + */ + public abstract boolean harvest(boolean manual); + + /** + * Fully clears the crop without dropping anything. + */ + public abstract void reset(); + + /** + * Request a texture and lighting update. + */ + public abstract void updateState(); + + /** + * Check if a block is under the farmland containing the crop. + * Searches up to 2 blocks below the farmland or an air space, whichever appears first. + * + * @param block block to search + * @return Whether the block was found + */ + public abstract boolean isBlockBelow(Block block); + + /** + * Generate plant seeds with the given parameters. + * + * @param plant plant ID + * @param growth plant growth stat + * @param gain plant gain stat + * @param resis plant resistance stat + * @param scan plant scan level + * @return Plant seed item + */ + public abstract ItemStack generateSeeds(short plant, byte growth, byte gain, byte resis, byte scan); + + /** + * For internal usage only. + */ + public abstract void addLocal(String s1, String s2); + +} diff --git a/src/common/railcraft/common/api/carts/CartBase.java b/src/common/railcraft/common/api/carts/CartBase.java new file mode 100644 index 00000000..d3403ba1 --- /dev/null +++ b/src/common/railcraft/common/api/carts/CartBase.java @@ -0,0 +1,118 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.EntityItem; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.minecart.MinecartInteractEvent; + +/** + * Generally minecarts should extend this class or there will be + * oddities if a user links two carts with different max speeds. + * + * It also contains some generic code that most carts will find useful. + * + * @author CovertJaguar + */ +public abstract class CartBase extends EntityMinecart implements IMinecart +{ + + private float trainSpeed = 1.2f; + + public CartBase(World world) + { + super(world); + CartTools.setCartOwner(this, "[Railcraft]"); + } + + public World getWorld() + { + return worldObj; + } + + @Override + public final float getMaxSpeedRail() + { + return Math.min(getCartMaxSpeed(), trainSpeed); + } + + @Override + public float getCartMaxSpeed() + { + return 1.2f; + } + + @Override + public final void setTrainSpeed(float speed) + { + this.trainSpeed = speed; + } + + @Override + public final boolean interact(EntityPlayer player) + { + if(MinecraftForge.EVENT_BUS.post(new MinecartInteractEvent(this, player))) { + return true; + } + if(CartTools.getCartOwner(this).equals("[Railcraft]")) { + CartTools.setCartOwner(this, player); + } + return doInteract(player); + } + + public boolean doInteract(EntityPlayer player) + { + return super.interact(player); + } + + @Override + public boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart) + { + if(stack == null || cart == null) { + return false; + } + ItemStack cartItem = cart.getCartItem(); + return cartItem != null && stack.isItemEqual(cartItem); + } + + @Override + public void setDead() + { + for(int var1 = 0; var1 < this.getSizeInventory(); ++var1) { + ItemStack var2 = this.getStackInSlot(var1); + this.setInventorySlotContents(var1, null); + + if(!worldObj.isRemote && var2 != null) { + float var3 = this.rand.nextFloat() * 0.8F + 0.1F; + float var4 = this.rand.nextFloat() * 0.8F + 0.1F; + float var5 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var2.stackSize > 0) { + int var6 = this.rand.nextInt(21) + 10; + + if(var6 > var2.stackSize) { + var6 = var2.stackSize; + } + + var2.stackSize -= var6; + EntityItem var7 = new EntityItem(this.worldObj, this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, new ItemStack(var2.itemID, var6, var2.getItemDamage())); + + if(var2.hasTagCompound()) { + var7.item.setTagCompound((NBTTagCompound)var2.getTagCompound().copy()); + } + + float var8 = 0.05F; + var7.motionX = (double)((float)this.rand.nextGaussian() * var8); + var7.motionY = (double)((float)this.rand.nextGaussian() * var8 + 0.2F); + var7.motionZ = (double)((float)this.rand.nextGaussian() * var8); + this.worldObj.spawnEntityInWorld(var7); + } + } + } + + super.setDead(); + } +} diff --git a/src/common/railcraft/common/api/carts/CartTools.java b/src/common/railcraft/common/api/carts/CartTools.java new file mode 100644 index 00000000..c889872d --- /dev/null +++ b/src/common/railcraft/common/api/carts/CartTools.java @@ -0,0 +1,364 @@ +package railcraft.common.api.carts; + +import railcraft.common.api.core.items.IMinecartItem; +import cpw.mods.fml.common.registry.EntityRegistry; +import java.util.ArrayList; +import java.util.List; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.BlockRail; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemMinecart; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; + +public abstract class CartTools +{ + + public static ILinkageManager serverLinkageManager; + + /** + * Registers a subclass of EntityMinecart with the game engine. + * + * This is just a convenience function, it is not required to call this function + * if you call ModLoader.registerEntityID() and MinecraftForge.registerEntity() + * elsewhere. + * + * @param mod The mod doing the registration + * @param type The class of the cart + * @param tag The String identifier + * @param internalId The mods internal entity id + */ + public static void registerMinecart(Object mod, Class type, String tag, int internalId) { + EntityRegistry.registerModEntity(type, tag, internalId, mod, 80, 3, true); + } + + /** + * Returns an instance of ILinkageManager. + * + * Will return null if Railcraft is not installed. + * + * @param world The World, may be required in the future + * @return an instance of ILinkageManager + */ + public static ILinkageManager getLinkageManager(World world) { + return serverLinkageManager; + } + + /** + * Sets a carts owner. + * + * The is really only needed by the bukkit ports. + * + * @param owner + */ + public static void setCartOwner(EntityMinecart cart, EntityPlayer owner) { + cart.getEntityData().setString("owner", owner.username); + } + + /** + * Sets a carts owner. + * + * The is really only needed by the bukkit ports. + * + * @param owner + */ + public static void setCartOwner(EntityMinecart cart, String owner) { + cart.getEntityData().setString("owner", owner); + } + + /** + * Gets a carts owner. (player.username) + * + * The is really only needed by the bukkit ports. + * + * @param owner + */ + public static String getCartOwner(EntityMinecart cart) { + return cart.getEntityData().getString("owner"); + } + + /** + * Will return true if the cart matches the provided filter item. + * + * @param stack the Filter + * @param cart the Cart + * @return true if the item matches the cart + * @see IMinecart + */ + public static boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart) { + if(stack == null) { + return false; + } + if(cart instanceof IMinecart) { + return ((IMinecart)cart).doesCartMatchFilter(stack, cart); + } + ItemStack cartItem = cart.getCartItem(); + return cartItem != null && isItemEqual(stack, cartItem); + } + + private static boolean isItemEqual(ItemStack a, ItemStack b) { + if(a == null || b == null) { + return false; + } + if(a.itemID != b.itemID) { + return false; + } + if(a.stackTagCompound != null && !a.stackTagCompound.equals(b.stackTagCompound)) { + return false; + } + if(a.getHasSubtypes() && (a.getItemDamage() == -1 || b.getItemDamage() == -1)) { + return true; + } + if(a.getHasSubtypes() && a.getItemDamage() != b.getItemDamage()) { + return false; + } + return true; + } + + /** + * Spawns a new cart entity using the provided item. + * + * The backing item must implement IMinecartItem + * and/or extend ItemMinecart. + * + * Generally Forge requires all cart items to extend ItemMinecart. + * + * @param owner The player name that should used as the owner + * @param cart An ItemStack containing a cart item, will not be changed by the function + * @param world The World object + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @return the cart placed or null if failed + * @see IMinecartItem, ItemMinecart + */ + public static EntityMinecart placeCart(String owner, ItemStack cart, World world, int i, int j, int k) { + if(cart == null) { + return null; + } + cart = cart.copy(); + if(cart.getItem() instanceof IMinecartItem) { + IMinecartItem mi = (IMinecartItem)cart.getItem(); + return mi.placeCart(owner, cart, world, i, j, k); + } else if(cart.getItem() instanceof ItemMinecart) { + try { + boolean placed = cart.getItem().onItemUse(cart, null, world, i, j, k, 0, 0, 0, 0); + if(placed) { + List carts = getMinecartsAt(world, i, j, k, 0.3f); + if(carts.size() > 0) { + setCartOwner(carts.get(0), owner); + return carts.get(0); + } + } + } catch (Exception e) { + return null; + } + } + + return null; + } + + /** + * Offers an item stack to linked carts or drops it if no one wants it. + * @param cart + * @param stack + */ + public static void offerOrDropItem(EntityMinecart cart, ItemStack stack) { + EntityMinecart link_A = getLinkageManager(cart.worldObj).getLinkedCartA(cart); + EntityMinecart link_B = getLinkageManager(cart.worldObj).getLinkedCartB(cart); + + if(stack != null && stack.stackSize > 0 && link_A instanceof IItemTransfer) { + stack = ((IItemTransfer)link_A).offerItem(cart, stack); + } + if(stack != null && stack.stackSize > 0 && link_B instanceof IItemTransfer) { + stack = ((IItemTransfer)link_B).offerItem(cart, stack); + } + + if(stack != null && stack.stackSize > 0) { + cart.entityDropItem(stack, 1); + } + } + + public static boolean isMinecartOnRailAt(World world, int i, int j, int k, float sensitivity) { + return isMinecartOnRailAt(world, i, j, k, sensitivity, null, true); + } + + public static boolean isMinecartOnRailAt(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { + if(BlockRail.isRailBlockAt(world, i, j, k)) { + return isMinecartAt(world, i, j, k, sensitivity, type, subclass); + } + return false; + } + + public static boolean isMinecartOnAnySide(World world, int i, int j, int k, float sensitivity) { + return isMinecartOnAnySide(world, i, j, k, sensitivity, null, true); + } + + public static boolean isMinecartOnAnySide(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { + List list = new ArrayList(); + for(int side = 0; side < 6; side++) { + list.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); + } + + if(type == null) { + return !list.isEmpty(); + } else { + for(EntityMinecart cart : list) { + if((subclass && type.isInstance(cart)) || cart.getClass() == type) { + return true; + } + } + } + return false; + } + + public static boolean isMinecartAt(World world, int i, int j, int k, float sensitivity) { + return isMinecartAt(world, i, j, k, sensitivity, null, true); + } + + public static boolean isMinecartAt(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { + List list = getMinecartsAt(world, i, j, k, sensitivity); + + if(type == null) { + return !list.isEmpty(); + } else { + for(EntityMinecart cart : list) { + if((subclass && type.isInstance(cart)) || cart.getClass() == type) { + return true; + } + } + } + return false; + } + + public static List getMinecartsOnAllSides(World world, int i, int j, int k, float sensitivity) { + List carts = new ArrayList(); + for(int side = 0; side < 6; side++) { + carts.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); + } + + return carts; + } + + public static List getMinecartsOnAllSides(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { + List list = new ArrayList(); + List carts = new ArrayList(); + for(int side = 0; side < 6; side++) { + list.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); + } + + for(EntityMinecart cart : list) { + if((subclass && type.isInstance(cart)) || cart.getClass() == type) { + carts.add(cart); + } + } + return carts; + } + + private static int getYOnSide(int y, ForgeDirection side) { + switch (side) { + case UP: + return y + 1; + case DOWN: + return y - 1; + default: + return y; + } + } + + private static int getXOnSide(int x, ForgeDirection side) { + switch (side) { + case EAST: + return x + 1; + case WEST: + return x - 1; + default: + return x; + } + } + + private static int getZOnSide(int z, ForgeDirection side) { + switch (side) { + case NORTH: + return z - 1; + case SOUTH: + return z + 1; + default: + return z; + } + } + + public static List getMinecartsOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { + return getMinecartsAt(world, getXOnSide(i, side), getYOnSide(j, side), getZOnSide(k, side), sensitivity); + } + + public static boolean isMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { + return getMinecartOnSide(world, i, j, k, sensitivity, side) != null; + } + + public static EntityMinecart getMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { + for(EntityMinecart cart : getMinecartsOnSide(world, i, j, k, sensitivity, side)) { + return cart; + } + return null; + } + + public static boolean isMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side, Class type, boolean subclass) { + return getMinecartOnSide(world, i, j, k, sensitivity, side, type, subclass) != null; + } + + public static EntityMinecart getMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side, Class type, boolean subclass) { + for(EntityMinecart cart : getMinecartsOnSide(world, i, j, k, sensitivity, side)) { + if(type == null || (subclass && type.isInstance(cart)) || cart.getClass() == type) { + return cart; + } + } + return null; + } + + /** + * + * @param world + * @param i + * @param j + * @param k + * @param sensitivity Controls the size of the search box, ranges from (-inf, 0.49]. + * @return + */ + public static List getMinecartsAt(World world, int i, int j, int k, float sensitivity) { + sensitivity = Math.min(sensitivity, 0.49f); + List entities = world.getEntitiesWithinAABB(net.minecraft.src.EntityMinecart.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(i + sensitivity, j + sensitivity, k + sensitivity, i + 1 - sensitivity, j + 1 - sensitivity, k + 1 - sensitivity)); + List carts = new ArrayList(); + for(Object o : entities) { + carts.add((EntityMinecart)o); + } + return carts; + } + + public static List getMinecartsIn(World world, int i1, int j1, int k1, int i2, int j2, int k2) { + List entities = world.getEntitiesWithinAABB(net.minecraft.src.EntityMinecart.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(i1, j1, k1, i2, j2, k2)); + List carts = new ArrayList(); + for(Object o : entities) { + carts.add((EntityMinecart)o); + } + return carts; + } + + /** + * Returns the cart's "speed". It is not capped by the carts max speed, + * it instead returns the cart's "potential" speed. + * Used by collision and linkage logic. + * Do not use this to determine how fast a cart is currently moving. + * @param cart + * @return speed + */ + public static double getCartSpeedUncapped(EntityMinecart cart) { + return Math.sqrt(cart.motionX * cart.motionX + cart.motionZ * cart.motionZ); + } + + public static boolean cartVelocityIsLessThan(EntityMinecart cart, float vel) { + return Math.abs(cart.motionX) < vel && Math.abs(cart.motionZ) < vel; + } +} diff --git a/src/common/railcraft/common/api/carts/ICartRenderInterface.java b/src/common/railcraft/common/api/carts/ICartRenderInterface.java new file mode 100644 index 00000000..4fcb413f --- /dev/null +++ b/src/common/railcraft/common/api/carts/ICartRenderInterface.java @@ -0,0 +1,24 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.Block; + +/** + * Used by the renderer to renders blocks in carts. + * @author CovertJaguar + */ +public interface ICartRenderInterface +{ + + /** + * Return the block that should be rendered in the cart. + * @return The Block to render + */ + public Block getBlock(); + + /** + * Return the metadata for the block + * that should be rendered in the cart. + * @return metadata + */ + public int getBlockMetadata(); +} diff --git a/src/common/railcraft/common/api/carts/IEnergyTransfer.java b/src/common/railcraft/common/api/carts/IEnergyTransfer.java new file mode 100644 index 00000000..49fee703 --- /dev/null +++ b/src/common/railcraft/common/api/carts/IEnergyTransfer.java @@ -0,0 +1,82 @@ +package railcraft.common.api.carts; + +/** + * This interface is implemented by the Energy Cart + * and is used by the Energy Loaders to charge/discharge carts. + * It is roughly equivalent to the IItemTransfer interface + * and based on ElectricItem and IElectricItem. + * + * @author CovertJaguar + * @see IItemTransfer + */ +public interface IEnergyTransfer +{ + + /** + * Injects the specified amount of EU into the device. + * + * The function returns the remainder of the EU after + * any EU used is subtracted. + * + * @param source Object initiating the transfer, should be an Entity or Tile Entity + * @param amount amount of energy to transfer in EU + * @param tier tier of the source device, has to be at least as high as the target device + * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() + * @param simulate don't actually change the item, just determine the return value + * @return The amount of EU not used + */ + public int injectEnergy(Object source, int amount, int tier, boolean ignoreTransferLimit, boolean simulate, boolean passAlong); + + /** + * Requests a certain amount of EU from the device. + * + * The is function will subtract EU from the device's store of power + * and return a portion up to, but not exceeding, the amount of EU requested. + * + * @param source Object initiating the transfer, should be an Entity or Tile Entity + * @param amount amount of energy to transfer in EU + * @param tier tier of the source device, has to be at least as high as the target device + * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() + * @param simulate don't actually change the item, just determine the return value + * @param passAlong whether neighboring carts should be asked to provide any missing power. + * @return The amount of EU transferred + */ + public int extractEnergy(Object source, int amount, int tier, boolean ignoreTransferLimit, boolean simulate, boolean passAlong); + + /** + * Return true if energy can be injected into this device. + * + * @return true if can inject energy + */ + public boolean canInjectEnergy(); + + /** + * Return true if energy can be extracted from this device. + * + * @return true if can extract energy + */ + public boolean canExtractEnergy(); + + /** + * The max capacity of the device. + * + * @return max capacity + */ + public int getCapacity(); + + /** + * Returns the current energy contained in the device. + * + * @return current energy + */ + public int getEnergy(); + + public int getTier(); + + /** + * The device's transfer rate in EU/t. + * + * @return the transfer rate + */ + public int getTransferLimit(); +} diff --git a/src/common/railcraft/common/api/carts/IItemTransfer.java b/src/common/railcraft/common/api/carts/IItemTransfer.java new file mode 100644 index 00000000..a5af647d --- /dev/null +++ b/src/common/railcraft/common/api/carts/IItemTransfer.java @@ -0,0 +1,65 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.ItemStack; +import railcraft.common.api.core.items.EnumItemType; + +/** + * This interface allows items to be passed around with out needing + * to know anything about the underlying implementation of the inventories. + * + * @author CovertJaguar + */ +public interface IItemTransfer +{ + + /** + * Offers an ItemStack to the object implementing this interface. + * This function will return null if the item is accepted in full, + * otherwise it will return whatever is rejected. + * + * @param source The Object offering the item + * @param offer The ItemStack being offered + * @return Unused or unwanted portions of offer + */ + public ItemStack offerItem(Object source, ItemStack offer); + + /** + * Requests an ItemStack from the object implementing this interface. + * It is up to the object implementing this interface to determine which + * ItemStack to return, or none at all. + * + * @param source The Object submitting the request + * @return An ItemStack to fulfill the request or null if refused. + */ + public ItemStack requestItem(Object source); + + /** + * Requests an ItemStack from the object implementing this interface + * that matches the request parameter. + * It is up to the object implementing this interface to + * determine which ItemStack to return, or none at all. + * However, if the return value is not null + * it should fulfill the following condition:
+ * InventoryTools.isItemEqual(it.requestItem(this,request), request) == true + * + * @param source The Object submitting the request + * @param request The type of item requested + * @return An ItemStack to fulfill the request or null if refused. + */ + public ItemStack requestItem(Object source, ItemStack request); + + /** + * Requests an ItemStack from the object implementing this interface + * that matches the request parameter. + * It is up to the object implementing this interface to + * determine which ItemStack to return, or none at all. + * However, if the return value is not null + * it should fulfill the following condition:
+ * EnumItemType.isItemType(it.requestItem(this,request), request) == true + * + * @param source The Object submitting the request + * @param request The type of item requested + * @return An ItemStack to fulfill the request or null if refused. + */ + public ItemStack requestItem(Object source, EnumItemType request); +} diff --git a/src/common/railcraft/common/api/carts/ILinkableCart.java b/src/common/railcraft/common/api/carts/ILinkableCart.java new file mode 100644 index 00000000..d87386d9 --- /dev/null +++ b/src/common/railcraft/common/api/carts/ILinkableCart.java @@ -0,0 +1,77 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.EntityMinecart; + +/** + * This interface should be implemented by any minecart that wishes + * to change the default linkage behavior. + * It is NOT required to be able to link a cart, + * it merely gives you more control over the process. + * @author CovertJaguar + */ +public interface ILinkableCart +{ + + /** + * To disable linking altogether, return false here. + * @return True if this cart is linkable. + */ + public boolean isLinkable(); + + /** + * Check called when attempting to link carts. + * @param cart The cart that we are attempting to link with. + * @return True if we can link with this cart. + */ + public boolean canLinkWithCart(EntityMinecart cart); + + /** + * Returns true if this cart has two links + * or false if it can only link with one cart. + * @return True if two links + */ + public boolean hasTwoLinks(); + + /** + * Gets the distance at which this cart can be linked. + * This is called on both carts and added together to determine + * how close two carts need to be for a successful link. + * Default = LinkageManager.LINKAGE_DISTANCE + * @param cart The cart that you are attempting to link with. + * @return The linkage distance + */ + public float getLinkageDistance(EntityMinecart cart); + + /** + * Gets the optimal distance between linked carts. + * This is called on both carts and added together to determine + * the optimal rest distance between linked carts. + * The LinkageManager will attempt to maintain this distance + * between linked carts at all times. + * Default = LinkageManager.OPTIMAL_DISTANCE + * @param cart The cart that you are linked with. + * @return The optimal rest distance + */ + public float getOptimalDistance(EntityMinecart cart); + + /** + * Return false if linked carts have no effect on the velocity of this cart. + * Use carefully, if you link two carts that can't be adjusted, + * it will behave as if they are not linked. + * @param cart The cart doing the adjusting. + * @return Whether the cart can have its velocity adjusted. + */ + public boolean canBeAdjusted(EntityMinecart cart); + + /** + * Called upon successful link creation. + * @param cart The cart we linked with. + */ + public void onLinkCreated(EntityMinecart cart); + + /** + * Called when a link is broken (usually). + * @param cart The cart we were linked with. + */ + public void onLinkBroken(EntityMinecart cart); +} diff --git a/src/common/railcraft/common/api/carts/ILinkageManager.java b/src/common/railcraft/common/api/carts/ILinkageManager.java new file mode 100644 index 00000000..e3080968 --- /dev/null +++ b/src/common/railcraft/common/api/carts/ILinkageManager.java @@ -0,0 +1,102 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.EntityMinecart; + +/** + * The LinkageManager contains all the functions needed to link and interact + * with linked carts. + * + * To obtain an instance of this interface, call CartTools.getLinkageManager(). + * + * Each cart can up to two links. They are called Link A and Link B. + * Some carts will have only Link A, for example the Tunnel Bore. + * + * @author CovertJaguar + * @see CartTools, ILinkableCart + */ +public interface ILinkageManager +{ + + /** + * The default max distance at which carts can be linked, divided by 2. + */ + public static final float LINKAGE_DISTANCE = 1.25f; + /** + * The default distance at which linked carts are maintained, divided by 2. + */ + public static final float OPTIMAL_DISTANCE = 0.78f; + + /** + * Creates a link between two carts, + * but only if there is nothing preventing such a link. + * + * @param cart1 + * @param cart2 + * @return True if the link succeeded. + */ + public boolean createLink(EntityMinecart cart1, EntityMinecart cart2); + + /** + * Returns the cart linked to Link A or null if nothing is currently + * occupying Link A. + * + * @param cart The cart for which to get the link + * @return The linked cart or null + */ + public EntityMinecart getLinkedCartA(EntityMinecart cart); + + /** + * Returns the cart linked to Link B or null if nothing is currently + * occupying Link B. + * + * @param cart The cart for which to get the link + * @return The linked cart or null + */ + public EntityMinecart getLinkedCartB(EntityMinecart cart); + + /** + * Returns true if the two carts are linked to each other. + * + * @param cart1 + * @param cart2 + * @return True if linked + */ + public boolean areLinked(EntityMinecart cart1, EntityMinecart cart2); + + /** + * Breaks a link between two carts, if any link exists. + * + * @param cart1 + * @param cart2 + */ + public void breakLink(EntityMinecart cart1, EntityMinecart cart2); + + /** + * Breaks all links the cart has. + * + * @param cart + */ + public void breakLinks(EntityMinecart cart); + + /** + * Break only link A. + * + * @param cart + */ + public void breakLinkA(EntityMinecart cart); + + /** + * Break only link B. + * + * @param cart + */ + public void breakLinkB(EntityMinecart cart); + + /** + * Counts how many carts are in the train. + * + * @param cart Any cart in the train + * @return The number of carts in the train + */ + public int countCartsInTrain(EntityMinecart cart); +} diff --git a/src/common/railcraft/common/api/carts/ILiquidTransfer.java b/src/common/railcraft/common/api/carts/ILiquidTransfer.java new file mode 100644 index 00000000..8d72e734 --- /dev/null +++ b/src/common/railcraft/common/api/carts/ILiquidTransfer.java @@ -0,0 +1,53 @@ +package railcraft.common.api.carts; + +import buildcraft.api.liquids.LiquidStack; + +/** + * This interface allows carts to transfer liquid between each other + * as well as adding a couple other functions related to liquids. + * + * @author CovertJaguar + */ +public interface ILiquidTransfer +{ + + /** + * Offers liquid to this object. + * + * Is not used by the Liquid Loader to load carts, + * the traditional ILiquidContainer is used for that. + * + * @param source The Object offering the liquid, used to prevent request loops in trains + * @param quantity The quantity offered + * @param id The liquid id offered + * @return the liquid used + */ + public int offerLiquid(Object source, LiquidStack offer); + + /** + * Requests liquid from this object. + * + * Is not used by the Liquid Unloader to drain carts, + * the traditional ILiquidContainer is used for that. + * + * @param source The Object requesting the liquid, used to prevent request loops in trains + * @param quantity The quantity requested + * @param id The liquid type requested + * @return the liquid provided + */ + public int requestLiquid(Object source, LiquidStack request); + + /** + * Set by the Liquid Loader while filling, + * primarily used for rendering a visible + * change while being filled. + * @param filling + */ + public void setFilling(boolean filling); + + /** + * + * @return true if being filled + */ + public boolean isFilling(); +} diff --git a/src/common/railcraft/common/api/carts/IMinecart.java b/src/common/railcraft/common/api/carts/IMinecart.java new file mode 100644 index 00000000..7707a20e --- /dev/null +++ b/src/common/railcraft/common/api/carts/IMinecart.java @@ -0,0 +1,52 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.ItemStack; + +/** + * Some helper functions to make interacting with carts simpler. + * + * This interface is implemented by CartBase. + * + * @author CovertJaguar + * @see CartBase + */ +public interface IMinecart +{ + + /** + * Returns true if the Minecart matches the item provided. + * Generally just stack.isItemEqual(cart.getCartItem()), + * but some carts may need more control (the Tank Cart for example). + * + * @param stack the Filter + * @param cart the Cart + * @return true if the item matches the cart + */ + public boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart); + + /** + * Unlike EntityMinecart.getMaxSpeedRail(), + * this function is independent of the actual max speed of the cart. + * + * It should represent the max possible speed at this point in time + * before any modifiers due to linked carts, etc are applied. + * + * This is really only used for Train speed calculations. + * Which ever cart in the train returns the lowest value here will be the max speed of the entire train. + * + * @return + */ + public float getCartMaxSpeed(); + + /** + * Sets the max speed of a train. + * + * This should be used to limit the return value for EntityMinecart.getMaxSpeedRail(). + * + * @param speed + * @see CartBase + */ + public void setTrainSpeed(float speed); + +} diff --git a/src/common/railcraft/common/api/carts/TransferCartBase.java b/src/common/railcraft/common/api/carts/TransferCartBase.java new file mode 100644 index 00000000..d623308e --- /dev/null +++ b/src/common/railcraft/common/api/carts/TransferCartBase.java @@ -0,0 +1,252 @@ +package railcraft.common.api.carts; + +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; +import railcraft.common.api.core.items.EnumItemType; + +/** + * Abstract minecart class that implements the IItemTransfer + * interface for convenience and as example for others who wish + * to create carts that implements IItemTransfer. + * This particular implementation assumes a simple inventory + * and will attempt to pass along offers and requests to linked carts + * if it cannot fulfill them itself. + *
+ *
+ * Classes that extend this class:
+ * EntityCartChest
+ * EntityCartAnchor
+ * + * @author CovertJaguar + */ +public abstract class TransferCartBase extends CartBase implements IItemTransfer +{ + + /** + * If passThrough == true, this cart will only pass requests along, it wont attempt to fulfill them. + */ + protected boolean passThrough = false; + + public TransferCartBase(World world) + { + super(world); + } + + @Override + public ItemStack offerItem(Object source, ItemStack offer) + { + if(!passThrough && getSizeInventory() > 0) { + offer = moveItemStack(offer, this); + if(offer == null) { + return null; + } + } + + ILinkageManager lm = CartTools.getLinkageManager(worldObj); + + EntityMinecart linkedCart = lm.getLinkedCartA(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + offer = ((IItemTransfer)linkedCart).offerItem(this, offer); + } + + if(offer == null) { + return null; + } + + linkedCart = lm.getLinkedCartB(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + offer = ((IItemTransfer)linkedCart).offerItem(this, offer); + } + + return offer; + } + + @Override + public ItemStack requestItem(Object source) + { + ItemStack result = null; + if(!passThrough && getSizeInventory() > 0) { + result = removeOneItem(this); + if(result != null) { + return result; + } + } + + ILinkageManager lm = CartTools.getLinkageManager(worldObj); + + EntityMinecart linkedCart = lm.getLinkedCartA(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this); + } + + if(result != null) { + return result; + } + + linkedCart = lm.getLinkedCartB(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this); + } + + return result; + } + + @Override + public ItemStack requestItem(Object source, ItemStack request) + { + ItemStack result = null; + if(!passThrough && getSizeInventory() > 0) { + result = removeOneItem(this, request); + if(result != null) { + return result; + } + } + + ILinkageManager lm = CartTools.getLinkageManager(worldObj); + + EntityMinecart linkedCart = lm.getLinkedCartA(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this, request); + } + + if(result != null) { + return result; + } + + linkedCart = lm.getLinkedCartB(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this, request); + } + + return result; + } + + @Override + public ItemStack requestItem(Object source, EnumItemType request) + { + ItemStack result = null; + if(!passThrough && getSizeInventory() > 0) { + result = removeOneItem(this, request); + if(result != null) { + return result; + } + } + + ILinkageManager lm = CartTools.getLinkageManager(worldObj); + + EntityMinecart linkedCart = lm.getLinkedCartA(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this, request); + } + + if(result != null) { + return result; + } + + linkedCart = lm.getLinkedCartB(this); + if(linkedCart != source && linkedCart instanceof IItemTransfer) { + result = ((IItemTransfer)linkedCart).requestItem(this, request); + } + + return result; + } + + /** + * Removes and returns a single item from the inventory. + * @param inv The inventory + * @return An ItemStack + */ + protected final ItemStack removeOneItem(IInventory inv) + { + for(int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack slot = inv.getStackInSlot(i); + if(slot != null) { + return inv.decrStackSize(i, 1); + } + } + return null; + } + + /** + * Removes and returns a single item from the inventory that matches the filter. + * @param inv The inventory + * @param filter ItemStack to match against + * @return An ItemStack + */ + protected final ItemStack removeOneItem(IInventory inv, ItemStack filter) + { + for(int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack slot = inv.getStackInSlot(i); + if(slot != null && filter != null && slot.isItemEqual(filter)) { + return inv.decrStackSize(i, 1); + } + } + return null; + } + + /** + * Removes and returns a single item from the inventory that matches the filter. + * @param inv The inventory + * @param filter EnumItemType to match against + * @return An ItemStack + */ + protected final ItemStack removeOneItem(IInventory inv, EnumItemType filter) + { + for(int i = 0; i < inv.getSizeInventory(); i++) { + ItemStack slot = inv.getStackInSlot(i); + if(slot != null && filter.isItemType(slot)) { + return inv.decrStackSize(i, 1); + } + } + return null; + } + + protected final ItemStack moveItemStack(ItemStack stack, IInventory dest) + { + if(stack == null) { + return null; + } + stack = stack.copy(); + if(dest == null) { + return stack; + } + boolean movedItem = false; + do { + movedItem = false; + ItemStack destStack = null; + for(int ii = 0; ii < dest.getSizeInventory(); ii++) { + destStack = dest.getStackInSlot(ii); + if(destStack != null && destStack.isItemEqual(stack)) { + int maxStack = Math.min(destStack.getMaxStackSize(), dest.getInventoryStackLimit()); + int room = maxStack - destStack.stackSize; + if(room > 0) { + int move = Math.min(room, stack.stackSize); + destStack.stackSize += move; + stack.stackSize -= move; + if(stack.stackSize <= 0) { + return null; + } + movedItem = true; + } + } + } + if(!movedItem) { + for(int ii = 0; ii < dest.getSizeInventory(); ii++) { + destStack = dest.getStackInSlot(ii); + if(destStack == null) { + if(stack.stackSize > dest.getInventoryStackLimit()) { + dest.setInventorySlotContents(ii, stack.splitStack(dest.getInventoryStackLimit())); + } else { + dest.setInventorySlotContents(ii, stack); + return null; + } + movedItem = true; + } + } + } + } while(movedItem); + return stack; + } +} diff --git a/src/common/railcraft/common/api/carts/bore/IBoreHead.java b/src/common/railcraft/common/api/carts/bore/IBoreHead.java new file mode 100644 index 00000000..3d541039 --- /dev/null +++ b/src/common/railcraft/common/api/carts/bore/IBoreHead.java @@ -0,0 +1,37 @@ +package railcraft.common.api.carts.bore; + +/** + * This interface it used to define an item that can + * be used as a bore head for the Tunnel Bore. + * @author CovertJaguar + */ +public interface IBoreHead +{ + + /** + * Return the texture file used for this bore head. + * @return The texture file path + */ + public String getBoreTexture(); + + /** + * Return the harvest level of this bore head. + * + * This value is compared against the tool classes + * "pickaxe", "axe", and "shovel" to determine if the + * block is harvestable by the bore head. + * + * @return The harvest level + */ + public int getHarvestLevel(); + + /** + * Return the dig speed modifier of this bore head. + * + * This value controls how much faster or slow this bore head + * mines each layer compared to the default time. + * + * @return The dig speed modifier + */ + public float getDigModifier(); +} diff --git a/src/common/railcraft/common/api/carts/bore/IMineable.java b/src/common/railcraft/common/api/carts/bore/IMineable.java new file mode 100644 index 00000000..185d0b65 --- /dev/null +++ b/src/common/railcraft/common/api/carts/bore/IMineable.java @@ -0,0 +1,36 @@ +package railcraft.common.api.carts.bore; + +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; + +/** + * This interface can be implemented by a block class to control whether a block can be + * mined by the bore without having to force the user to edit the configuration file. + * + * If the block is found to implement this class, any setting in the configuration + * is ignored for that block. + * + * Generally, the reason blocks are not minable by default is to prevent you + * from intentionally or accidentally boring through your base. + * + * @author CovertJaguar + */ +public interface IMineable +{ + + /** + * Called when the Bore attempts to mine the block. If it returns false, + * the Bore will halt operation. + * + * @param world The World + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @param bore The Bore entity + * @param head The BoreHead, item implements IBoreHead. + * @return true if mineable + * @see IBoreHead + */ + public boolean canMineBlock(World world, int i, int j, int k, EntityMinecart bore, ItemStack head); +} diff --git a/src/common/railcraft/common/api/core/INetworkedObject.java b/src/common/railcraft/common/api/core/INetworkedObject.java new file mode 100644 index 00000000..c0943860 --- /dev/null +++ b/src/common/railcraft/common/api/core/INetworkedObject.java @@ -0,0 +1,16 @@ +package railcraft.common.api.core; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import net.minecraft.src.World; + +public interface INetworkedObject +{ + + public World getWorld(); + + public void writePacketData(DataOutputStream data) throws IOException; + + public void readPacketData(DataInputStream data) throws IOException; +} diff --git a/src/common/railcraft/common/api/core/IPostConnection.java b/src/common/railcraft/common/api/core/IPostConnection.java new file mode 100644 index 00000000..12a13c4e --- /dev/null +++ b/src/common/railcraft/common/api/core/IPostConnection.java @@ -0,0 +1,27 @@ +package railcraft.common.api.core; + +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; + +/** + * If you want your block to connect (or not connect) to posts, + * implement this interface. + * + * The result takes priority over any other rules. + * + * @author CovertJaguar + */ +public interface IPostConnection +{ + + /** + * Return true if the block at this location should connect to a post. + * @param world The World + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @param side Side to connect to + * @return true if connect + */ + public boolean connectsAt(World world, int i, int j, int k, ForgeDirection side); +} diff --git a/src/common/railcraft/common/api/core/WorldCoordinate.java b/src/common/railcraft/common/api/core/WorldCoordinate.java new file mode 100644 index 00000000..3037e800 --- /dev/null +++ b/src/common/railcraft/common/api/core/WorldCoordinate.java @@ -0,0 +1,78 @@ +package railcraft.common.api.core; + +/** + * This immutable class represents a point in the Minecraft world, + * while taking into account the possibility of coordinates in different dimensions. + * @author CovertJaguar + */ +public class WorldCoordinate +{ + + /** + * The dimension + */ + public final int dimension; + /** + * x-Coord + */ + public final int x; + /** + * y-Coord + */ + public final int y; + /** + * z-Coord + */ + public final int z; + + /** + * Creates a new WorldCoordinate + * @param dimension + * @param i + * @param j + * @param k + */ + public WorldCoordinate(int dimension, int i, int j, int k) + { + this.dimension = dimension; + x = i; + y = j; + z = k; + } + + @Override + public boolean equals(Object obj) + { + if(obj == null) { + return false; + } + if(getClass() != obj.getClass()) { + return false; + } + final WorldCoordinate other = (WorldCoordinate)obj; + if(this.dimension != other.dimension) { + return false; + } + if(this.x != other.x) { + return false; + } + if(this.y != other.y) { + return false; + } + if(this.z != other.z) { + return false; + } + return true; + } + + @Override + public int hashCode() + { + int hash = 3; + hash = 13 * hash + this.dimension; + hash = 13 * hash + this.x; + hash = 13 * hash + this.y; + hash = 13 * hash + this.z; + return hash; + } +} diff --git a/src/common/railcraft/common/api/core/items/BallastRegistry.java b/src/common/railcraft/common/api/core/items/BallastRegistry.java new file mode 100644 index 00000000..dcc724f1 --- /dev/null +++ b/src/common/railcraft/common/api/core/items/BallastRegistry.java @@ -0,0 +1,93 @@ +package railcraft.common.api.core.items; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import net.minecraft.src.Block; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; + +/** + * Register an item here to designate it as a possible + * ballast that can be used in the Bore. + * + * It is expected that ballast is affected by gravity. + * + * @author CovertJaguar + */ +public abstract class BallastRegistry +{ + + private static Set ballastRegistry = new HashSet(); + + private static class ItemWrapper + { + + public int itemID; + public int itemDamage; + public ItemStack stack; + + public ItemWrapper(ItemStack stack) + { + itemID = stack.itemID; + itemDamage = stack.getItemDamage(); + this.stack = stack; + } + + @Override + public boolean equals(Object obj) + { + if(obj == null) { + return false; + } + if(getClass() != obj.getClass()) { + return false; + } + final ItemWrapper other = (ItemWrapper)obj; + if(this.itemID != other.itemID) { + return false; + } + if(this.itemDamage != other.itemDamage) { + return false; + } + return true; + } + + @Override + public int hashCode() + { + int hash = 3; + hash = 47 * hash + this.itemID; + hash = 47 * hash + this.itemDamage; + return hash; + } + } + + static { + registerBallast(new ItemStack(Block.gravel)); + } + + public static void registerBallast(ItemStack ballast) + { + if(ballast.getItem() instanceof ItemBlock) { + ballastRegistry.add(new ItemWrapper(ballast)); + } else { + throw new RuntimeException("Attempted to register an invalid ballast, must be an ItemBlock item."); + } + } + + public static boolean isItemBallast(ItemStack ballast) + { + return ballastRegistry.contains(new ItemWrapper(ballast)); + } + + public static List getRegisteredBallasts() + { + List list = new ArrayList(); + for(ItemWrapper item : ballastRegistry) { + list.add(item.stack); + } + return list; + } +} diff --git a/src/common/railcraft/common/api/core/items/EnumItemType.java b/src/common/railcraft/common/api/core/items/EnumItemType.java new file mode 100644 index 00000000..850ff823 --- /dev/null +++ b/src/common/railcraft/common/api/core/items/EnumItemType.java @@ -0,0 +1,47 @@ +package railcraft.common.api.core.items; + +import net.minecraft.src.BlockRail; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemFood; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntityFurnace; +import net.minecraftforge.common.MinecartRegistry; + +/** + * This interface is used with several of the functions in IItemTransfer + * to provide a convenient means of dealing with entire classes of items without + * having to specify each item individually. + * @author CovertJaguar + */ +public enum EnumItemType +{ + + FUEL, RAIL, MINECART, BALLAST, FOOD; + + public static boolean isItemType(ItemStack stack, EnumItemType filter) + { + return filter.isItemType(stack); + } + + public boolean isItemType(ItemStack stack) + { + if(stack == null) { + return false; + } + switch (this) { + case FUEL: + return TileEntityFurnace.getItemBurnTime(stack) > 0; + case RAIL: + return stack.getItem() instanceof ITrackItem || (stack.getItem() instanceof ItemBlock && BlockRail.isRailBlock(stack.itemID)); + case MINECART: + return MinecartRegistry.getCartClassForItem(stack) != null || stack.getItem() instanceof IMinecartItem; + case BALLAST: + return BallastRegistry.isItemBallast(stack); + case FOOD: + return stack.getItem() instanceof ItemFood || stack.itemID == Item.wheat.shiftedIndex; + default: + return false; + } + } +} diff --git a/src/common/railcraft/common/api/core/items/ICrowbar.java b/src/common/railcraft/common/api/core/items/ICrowbar.java new file mode 100644 index 00000000..3a058b28 --- /dev/null +++ b/src/common/railcraft/common/api/core/items/ICrowbar.java @@ -0,0 +1,14 @@ +package railcraft.common.api.core.items; + +/** + * Any item that performs the same function as a crowbar should implement this interface. + * Making a new crowbar item is as simple as implementing this empty interface. + * Doing so will make all the blocks, tracks, and entities aware of that the item + * should be treated identically to a crowbar. + * + * @author CovertJaguar + */ +public interface ICrowbar +{ + +} diff --git a/src/common/railcraft/common/api/core/items/IMinecartItem.java b/src/common/railcraft/common/api/core/items/IMinecartItem.java new file mode 100644 index 00000000..22d513b8 --- /dev/null +++ b/src/common/railcraft/common/api/core/items/IMinecartItem.java @@ -0,0 +1,39 @@ +package railcraft.common.api.core.items; + +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; + +/** + * This interface should be implemented by any cart item, + * but it is generally optional. + * + * @author CovertJaguar + */ +public interface IMinecartItem +{ + + /** + * Controls whether this cart item can be placed by the Cart and Train Dispensers. + * + * Generally, you can ignore the placeCart() function if this returns false. + * + * @return true if it can be placed, false otherwise + */ + public boolean canBePlacedByNonPlayer(ItemStack cart); + + /** + * Places a cart at the specified location. + * + * Implementing this function is optional. + * + * @param owner the name of the player placing the cart or "[MyMod]" with the brackets + * @param cart An ItemStack that contains the cart + * @param world The World + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @return the cart placed or null if failed + */ + public EntityMinecart placeCart(String owner, ItemStack cart, World world, int i, int j, int k); +} diff --git a/src/common/railcraft/common/api/core/items/ITrackItem.java b/src/common/railcraft/common/api/core/items/ITrackItem.java new file mode 100644 index 00000000..1c4cd72f --- /dev/null +++ b/src/common/railcraft/common/api/core/items/ITrackItem.java @@ -0,0 +1,46 @@ +package railcraft.common.api.core.items; + +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +/** + * Should be implemented by any rail item class that wishes to have + * it's rails placed by for example the Tunnel Bore or Track Relayer. + * + * If you defined your rails with a TrackSpec, you don't need to worry about this. + * + * @author CovertJaguar + */ +public interface ITrackItem +{ + + /** + * Attempts to place a track. + * + * @param world The World object + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @return true if successful + */ + public boolean placeTrack(ItemStack stack, World world, int i, int j, int k); + + /** + * Return the block id of a placed track. + * + * @return the blockId + */ + public int getPlacedBlockId(); + + /** + * Return true if the given tile entity corresponds to this Track item. + * + * If the track has no tile entity, return true on null. + * + * @param stack + * @param tile + * @return + */ + public boolean isPlacedTileEntity(ItemStack stack, TileEntity tile); +} diff --git a/src/common/railcraft/common/api/core/items/ItemRegistry.java b/src/common/railcraft/common/api/core/items/ItemRegistry.java new file mode 100644 index 00000000..3760fad3 --- /dev/null +++ b/src/common/railcraft/common/api/core/items/ItemRegistry.java @@ -0,0 +1,93 @@ +package railcraft.common.api.core.items; + +import java.util.Map; +import java.util.TreeMap; +import net.minecraft.src.ItemStack; + +/** + * This class contains a registry of all currently active Railcraft items. + * Which items are registered depends on the user's settings in "railcraft.cfg", + * so the available items may vary from one installation to the next. + * + * Initialization of the registry will occur during the BaseMod.load() + * function. It is strongly recommended you wait until the BaseMod.modsLoaded() + * function to reference the registry. + * + * @author CovertJaguar + */ +public final class ItemRegistry +{ + + private static final Map registry = new TreeMap(); + + private ItemRegistry() + { + } + + /** + * This function will return an ItemStack containing the item that + * corresponds to the provided tag. + * + * Generally item tags will correspond to the tags used in "railcraft.cfg", + * but there will be some exceptions. + * + * This function can and will return null for just about every item + * if the item is disabled via the configuration files. + * You must test the return value for safety. + * + * For list of available tags see the printItemTags() function. + * + * @param tag The item tag + * @param qty The stackSize of the returned item + * @return The ItemStack or null if no item exists for that tag + */ + public static ItemStack getItem(String tag, int qty) + { + ItemStack stack = registry.get(tag); + if(stack != null) { + stack = stack.copy(); + stack.stackSize = qty; + } + return stack; + } + + /** + * Registers a new item with the Registry. + * + * This should generally only be called by Railcraft itself + * while the mod is initializing during the mod_Railcraft.load() call. + * + * @param tag The tag name + * @param item The item + */ + public static void registerItem(String tag, ItemStack item) + { + registry.put(tag, item); + } + + /** + * This function will print a list of all currently registered items + * to the console. + * + * Use this for development purposes. + */ + public static void printItemTags() + { + System.out.println(); + System.out.println("Printing all registered Railcraft items:"); + for(String tag : registry.keySet()) { + System.out.println(tag); + } + System.out.println(); + } + + /** + * Returns the entire mapping of items. + * + * @return + */ + public static Map getItems() + { + return registry; + } +} diff --git a/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java b/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java new file mode 100644 index 00000000..e92381c3 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java @@ -0,0 +1,25 @@ +package railcraft.common.api.crafting; + +import java.util.List; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IBlastFurnaceCraftingManager +{ + + void addRecipe(int inputId, int inputDamage, int cookTime, ItemStack output); + + void addRecipe(int inputId, int cookTime, ItemStack output); + + List getFuels(); + + IBlastFurnaceRecipe getRecipe(int inputId, int inputDamage); + + IBlastFurnaceRecipe getRecipe(ItemStack stack); + + List getRecipes(); + +} diff --git a/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java b/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java new file mode 100644 index 00000000..6c6a7181 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java @@ -0,0 +1,21 @@ +package railcraft.common.api.crafting; + +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IBlastFurnaceRecipe +{ + + public int getCookTime(); + + public ItemStack getInput(); + + public ItemStack getOutput(); + + int getOutputStackSize(); + + boolean isRoomForOutput(ItemStack out); +} diff --git a/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java b/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java new file mode 100644 index 00000000..a6e5b73f --- /dev/null +++ b/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java @@ -0,0 +1,26 @@ +package railcraft.common.api.crafting; + +import buildcraft.api.liquids.LiquidStack; +import java.util.List; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface ICokeOvenCraftingManager +{ + + void addRecipe(ItemStack input, ItemStack output, LiquidStack liquidOutput, int cookTime); + + void addRecipe(int inputId, int inputDamage, ItemStack output, LiquidStack liquidOutput, int cookTime); + + void addRecipe(int inputId, ItemStack output, LiquidStack liquidOutput, int cookTime); + + ICokeOvenRecipe getRecipe(ItemStack stack); + + ICokeOvenRecipe getRecipe(int inputId, int inputDamage); + + List getRecipes(); + +} diff --git a/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java b/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java new file mode 100644 index 00000000..f2e9e29f --- /dev/null +++ b/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java @@ -0,0 +1,20 @@ +package railcraft.common.api.crafting; + +import buildcraft.api.liquids.LiquidStack; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface ICokeOvenRecipe +{ + + public int getCookTime(); + + public ItemStack getInput(); + + public LiquidStack getLiquidOutput(); + + public ItemStack getOutput(); +} diff --git a/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java b/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java new file mode 100644 index 00000000..52dd8839 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java @@ -0,0 +1,35 @@ +package railcraft.common.api.crafting; + +import java.util.HashMap; +import java.util.List; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IRockCrusherCraftingManager +{ + + /** + * + * @param inputId + * @param inputDamage metadata or -1 for wildcard + * @param output A map of outputs and chances. If more than 9 types of items, there will be unexpected behavior. + */ + void addRecipe(int inputId, int inputDamage, HashMap output); + + /** + * + * @param input + * @param output A map of outputs and chances. If more than 9 types of items, there will be unexpected behavior. + */ + void addRecipe(ItemStack input, HashMap output); + + IRockCrusherRecipe getRecipe(ItemStack input); + + IRockCrusherRecipe getRecipe(int inputId, int inputDamage); + + List getRecipes(); + +} diff --git a/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java b/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java new file mode 100644 index 00000000..75b2d811 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java @@ -0,0 +1,37 @@ +package railcraft.common.api.crafting; + +import java.util.List; +import java.util.Map; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IRockCrusherRecipe +{ + + public ItemStack getInput(); + + /** + * Returns a map containing each output entry and its chance of being included. + * + * @return + */ + public Map getOutputs(); + + /** + * Returns a list of all possible outputs. + * This is basically a condensed version of getOutputs().keySet(). + * + * @return + */ + public List getPossibleOuput(); + + /** + * Returns a list of outputs after it has passed through the randomizer. + * + * @return + */ + public List getRandomizedOuput(); +} diff --git a/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java b/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java new file mode 100644 index 00000000..6b9ee7f6 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java @@ -0,0 +1,23 @@ +package railcraft.common.api.crafting; + +import java.util.List; +import net.minecraft.src.IRecipe; +import net.minecraft.src.InventoryCrafting; +import net.minecraft.src.ItemStack; + +/** + * + * @author CovertJaguar + */ +public interface IRollingMachineCraftingManager +{ + + void addRecipe(ItemStack output, Object[] components); + + void addShapelessRecipe(ItemStack output, Object[] compenents); + + ItemStack findMatchingRecipe(InventoryCrafting inventorycrafting); + + List getRecipeList(); + +} diff --git a/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java b/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java new file mode 100644 index 00000000..27608b22 --- /dev/null +++ b/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java @@ -0,0 +1,16 @@ +package railcraft.common.api.crafting; + +/** + * These variables are defined during the pre-init phase. + * Do not attempt to access them during pre-init. + * + * @author CovertJaguar + */ +public abstract class RailcraftCraftingManager +{ + + public static ICokeOvenCraftingManager cokeOven; + public static IBlastFurnaceCraftingManager blastFurnace; + public static IRockCrusherCraftingManager rockCrusher; + public static IRollingMachineCraftingManager rollingMachine; +} diff --git a/src/common/railcraft/common/api/signals/EnumSignalAspect.java b/src/common/railcraft/common/api/signals/EnumSignalAspect.java new file mode 100644 index 00000000..8a71e40d --- /dev/null +++ b/src/common/railcraft/common/api/signals/EnumSignalAspect.java @@ -0,0 +1,155 @@ +package railcraft.common.api.signals; + +/** + * Represents a Signal state. + * @author CovertJaguar + */ +public enum EnumSignalAspect +{ + + /** + * The All Clear. + */ + GREEN(0), + /** + * Typically means pairing in progress. + */ + BLINK_YELLOW(1), + /** + * Caution, cart heading away. + */ + YELLOW(1), + /** + * Maintenance warning, the signal is malfunctioning. + */ + BLINK_RED(2), + /** + * Stop! + */ + RED(2), + /** + * Can't happen, really it can't (or shouldn't). + * Only used when rendering blink states (for the texture offset). + */ + OFF(3); + private final byte id; + private final int textureOffset; + private static byte nextId = 0; + private static boolean blinkState; + + private EnumSignalAspect(int textureOffset) + { + this.textureOffset = textureOffset; + id = getNextId(); + } + + /** + * Returns the aspect id, used mainly for saving and network communication. + * @return id + */ + public byte getId() + { + return id; + } + + /** + * Returns the texture offset for this specific aspect. + * @return offset + */ + public int getTextureOffset() + { + return textureOffset; + } + + /** + * Returns true if the aspect is one of the blink states. + * @return true if blinks + */ + public boolean isBlinkAspect() + { + if(this == BLINK_YELLOW || this == BLINK_RED) { + return true; + } + return false; + } + + /** + * Return true if the light is currently off. + * @return true if the light is currently off. + */ + public static boolean isBlinkOn() + { + return blinkState; + } + + /** + * Don't call this, its used to change blink states by Railcraft. + */ + public static void invertBlinkState() + { + blinkState = !blinkState; + } + + /** + * Takes an id and returns an Aspect. + * @param id + * @return + */ + public static EnumSignalAspect fromId(int id) + { + for(EnumSignalAspect a : EnumSignalAspect.values()) { + if(a.getId() == id) { + return a; + } + } + return RED; + } + + /** + * Tests two Aspects and determines which is more restrictive. + * The concept of "most restrictive" refers to which aspect enforces the + * most limitations of movement to a train. + * + * In Railcraft the primary use is in Signal Box logic. + * + * @param first + * @param second + * @return The most restrictive Aspect + */ + public static EnumSignalAspect mostRestrictive(EnumSignalAspect first, EnumSignalAspect second) + { + if(first == null && second != null) { + return second; + } else if(first != null && second == null) { + return first; + } else if(first == null && second == null) { + return RED; + } + if(first == OFF || second == OFF) { + return RED; + } + if(first.getId() > second.getId()) { + return first; + } + return second; + } + + private static byte getNextId() + { + byte i = nextId; + nextId++; + return i; + } + + @Override + public String toString() + { + String[] sa = name().split("_"); + String out = ""; + for(String s : sa) { + out = out + s.substring(0, 1) + s.substring(1).toLowerCase() + " "; + } + out = out.trim(); + return out; + } +} diff --git a/src/common/railcraft/common/api/signals/IBlockSignal.java b/src/common/railcraft/common/api/signals/IBlockSignal.java new file mode 100644 index 00000000..a115423c --- /dev/null +++ b/src/common/railcraft/common/api/signals/IBlockSignal.java @@ -0,0 +1,47 @@ +package railcraft.common.api.signals; + +/** + * This is not documented and needs some reworking to simplify usage. + * @author CovertJaguar + */ +public interface IBlockSignal +{ + + public void startSignalBlockPairing(); + + public void endSignalBlockPairing(); + + public boolean locateRail(); + + public boolean attemptToPair(IBlockSignal other); + + public void clearSignalBlockPairing(String reason, Object... args); + + public boolean isSignalBlockBeingPaired(); + + public boolean isSignalBlockPaired(); + + public IBlockSignal getSignalBlockPair(); + + public int getSignalBlockPairX(); + + public int getSignalBlockPairY(); + + public int getSignalBlockPairZ(); + + public int getRailX(); + + public int getRailY(); + + public int getRailZ(); + + public int getX(); + + public int getY(); + + public int getZ(); + + public int getDimension(); + + public String getDescription(); +} diff --git a/src/common/railcraft/common/api/signals/ISignalController.java b/src/common/railcraft/common/api/signals/ISignalController.java new file mode 100644 index 00000000..a3160d7a --- /dev/null +++ b/src/common/railcraft/common/api/signals/ISignalController.java @@ -0,0 +1,45 @@ +package railcraft.common.api.signals; + +import net.minecraft.src.World; + +/** + * This is not documented and needs some reworking to simplify usage. + * @author CovertJaguar + */ +public interface ISignalController +{ + + public EnumSignalAspect getSignalAspect(); + + public boolean attemptToPairWithReceiver(ISignalReceiver receiver); + + public void startReceiverPairing(); + + public void endReceiverPairing(); + + public void clearPairedReceiver(); + + public boolean isPairedWithReceiver(); + + public ISignalReceiver getReceiver(); + + public int getReceiverX(); + + public int getReceiverY(); + + public int getReceiverZ(); + + public int getX(); + + public int getY(); + + public int getZ(); + + public int getDimension(); + + public World getWorld(); + + public String getDescription(); + + public boolean isInvalid(); +} diff --git a/src/common/railcraft/common/api/signals/ISignalReceiver.java b/src/common/railcraft/common/api/signals/ISignalReceiver.java new file mode 100644 index 00000000..00de2b0c --- /dev/null +++ b/src/common/railcraft/common/api/signals/ISignalReceiver.java @@ -0,0 +1,43 @@ +package railcraft.common.api.signals; + +import net.minecraft.src.World; + +/** + * This is not documented and needs some reworking to simplify usage. + * @author CovertJaguar + */ +public interface ISignalReceiver +{ + + public boolean doesActionOnAspect(EnumSignalAspect aspect); + + public void doActionOnAspect(EnumSignalAspect aspect, boolean trigger); + + public boolean attemptToPairWithController(ISignalController controller); + + public void clearPairedController(); + + public boolean isPairedWithController(); + + public ISignalController getController(); + + public int getControllerX(); + + public int getControllerY(); + + public int getControllerZ(); + + public int getX(); + + public int getY(); + + public int getZ(); + + public int getDimension(); + + public World getWorld(); + + public boolean isInvalid(); + + public String getDescription(); +} diff --git a/src/common/railcraft/common/api/signals/SignalTools.java b/src/common/railcraft/common/api/signals/SignalTools.java new file mode 100644 index 00000000..2c2b272c --- /dev/null +++ b/src/common/railcraft/common/api/signals/SignalTools.java @@ -0,0 +1,159 @@ +package railcraft.common.api.signals; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import railcraft.common.api.tracks.RailTools; +import railcraft.common.api.core.WorldCoordinate; + +/** + * This is not documented and needs some reworking to simplify usage. + * @author CovertJaguar + */ +public abstract class SignalTools +{ + + private static Map signalBlockPairingMap = new HashMap(); + private static Map controllerReceiverPairingMap = new HashMap(); + + public static boolean isSignalBlockSectionValid(World world, IBlockSignal first, IBlockSignal second) { + return RailTools.areDistantRailsConnectedAlongAxis(world, first.getRailX(), first.getRailY(), first.getRailZ(), second.getRailX(), second.getRailY(), second.getRailZ()); + } + + public static boolean isControllerInRangeOfReceiver(ISignalController c, ISignalReceiver r, int range) { + int distX = c.getX() - r.getX(); + int distY = c.getY() - r.getY(); + int distZ = c.getZ() - r.getZ(); + int distance = (int)Math.sqrt(distX * distX + distY * distY + distZ * distZ); + return distance <= range; + } + + public static void startSignalBlockPairing(EntityPlayer player, ItemStack device, IBlockSignal first) { + endSignalBlockPairing(player, device); + int id = new Random().nextInt(Short.MAX_VALUE); + device.setItemDamage(id); + first.startSignalBlockPairing(); + signalBlockPairingMap.put(new PairingKey(player.username, device.getItemDamage()), new WorldCoordinate(first.getDimension(), first.getX(), first.getY(), first.getZ())); + } + + public static WorldCoordinate getSignalBlockPair(EntityPlayer player, ItemStack device) { + return signalBlockPairingMap.get(new PairingKey(player.username, device.getItemDamage())); + } + + public static void endSignalBlockPairing(EntityPlayer player, ItemStack device) { + WorldCoordinate pos = signalBlockPairingMap.remove(new PairingKey(player.username, device.getItemDamage())); + if(pos != null) { + TileEntity t = player.worldObj.getBlockTileEntity(pos.x, pos.y, pos.z); + if(t instanceof IBlockSignal) { + ((IBlockSignal)t).endSignalBlockPairing(); + } + } + } + + public static void startControllerReceiverPairing(EntityPlayer player, ItemStack device, ISignalController controller) { + endControllerReceiverPairing(player, device); + int id = new Random().nextInt(Short.MAX_VALUE); + device.setItemDamage(id); + controller.startReceiverPairing(); + controllerReceiverPairingMap.put(new PairingKey(player.username, device.getItemDamage()), new WorldCoordinate(controller.getDimension(), controller.getX(), controller.getY(), controller.getZ())); + } + + public static WorldCoordinate getSavedController(EntityPlayer player, ItemStack device) { + return controllerReceiverPairingMap.get(new PairingKey(player.username, device.getItemDamage())); + } + + public static void endControllerReceiverPairing(EntityPlayer player, ItemStack device) { + WorldCoordinate pos = controllerReceiverPairingMap.remove(new PairingKey(player.username, device.getItemDamage())); + if(pos != null) { + TileEntity t = player.worldObj.getBlockTileEntity(pos.x, pos.y, pos.z); + if(t instanceof ISignalController) { + ((ISignalController)t).endReceiverPairing(); + } + } + } + + public static ISignalReceiver getReceiverFor(ISignalController con) { + World world = con.getWorld(); + if(world == null || con.getReceiverY() < 0) { + return null; + } + int i = con.getReceiverX(); + int j = con.getReceiverY(); + int k = con.getReceiverZ(); + if(!world.blockExists(i, j, k)) { + return null; + } + TileEntity pair = world.getBlockTileEntity(i, j, k); + if(pair instanceof ISignalReceiver) { + return (ISignalReceiver)pair; + } else { + con.clearPairedReceiver(); + } + return null; + } + + public static ISignalController getControllerFor(ISignalReceiver rec) { + if(rec.getControllerY() < 0) { + return null; + } + World world = rec.getWorld(); + if(world == null) { + return null; + } + int i = rec.getControllerX(); + int j = rec.getControllerY(); + int k = rec.getControllerZ(); + if(!world.blockExists(i, j, k)) { + return null; + } + TileEntity pair = world.getBlockTileEntity(i, j, k); + if(pair instanceof ISignalController) { + return (ISignalController)pair; + } else { + rec.clearPairedController(); + } + return null; + } + + private static class PairingKey + { + + protected String username; + protected int id; + + public PairingKey(String username, int id) { + this.username = username; + this.id = id; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 59 * hash + (this.username != null ? this.username.hashCode() : 0); + hash = 59 * hash + this.id; + return hash; + } + + @Override + public boolean equals(Object obj) { + if(obj == null) { + return false; + } + if(getClass() != obj.getClass()) { + return false; + } + final PairingKey other = (PairingKey)obj; + if((this.username == null) ? (other.username != null) : !this.username.equals(other.username)) { + return false; + } + if(this.id != other.id) { + return false; + } + return true; + } + } +} diff --git a/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java b/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java new file mode 100644 index 00000000..0354d1a6 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java @@ -0,0 +1,29 @@ +package railcraft.common.api.tracks; + +import net.minecraft.src.World; + +/** + * Have your ITrackInstance implement this to override normal track placement. + * + * Used by tracks such as the Suspended Track. + * + * @author CovertJaguar + */ +public interface ITrackCustomPlaced extends ITrackInstance +{ + + /** + * Used to override normal track placement. + * + * Used by tracks such as the Suspended Track. + * + * Warning: This is called before the TileEntity is set. + * + * @param world The World + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @return true if the rail can placed at the specified location, false to prevent placement + */ + public boolean canPlaceRailAt(World world, int i, int j, int k); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackCustomShape.java b/src/common/railcraft/common/api/tracks/ITrackCustomShape.java new file mode 100644 index 00000000..35fd7e43 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackCustomShape.java @@ -0,0 +1,24 @@ +package railcraft.common.api.tracks; + +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.MovingObjectPosition; +import net.minecraft.src.Vec3; + +/** + * Used by rails that modify the bounding boxes. + * + * For example, the Gated Rails. + * + * Not very useful since there is no system in place to insert custom render code. + * + * @author CovertJaguar + */ +public interface ITrackCustomShape extends ITrackInstance +{ + + public AxisAlignedBB getCollisionBoundingBoxFromPool(); + + public AxisAlignedBB getSelectedBoundingBoxFromPool(); + + public MovingObjectPosition collisionRayTrace(Vec3 vec3d, Vec3 vec3d1); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackEmitter.java b/src/common/railcraft/common/api/tracks/ITrackEmitter.java new file mode 100644 index 00000000..bec74732 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackEmitter.java @@ -0,0 +1,22 @@ +package railcraft.common.api.tracks; + +/** + * Tracks that can emit a redstone signal should implement + * this interface. + * + * For example a detector track. + * + * A track cannot implement both ITrackPowered and ITrackEmitter. + * + * @author CovertJaguar + */ +public interface ITrackEmitter extends ITrackInstance +{ + + /** + * Return true if the track is producing a redstone signal. + * + * @return true if powered + */ + public boolean isTrackPowering(); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackInstance.java b/src/common/railcraft/common/api/tracks/ITrackInstance.java new file mode 100644 index 00000000..460959fa --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackInstance.java @@ -0,0 +1,123 @@ +package railcraft.common.api.tracks; + +import net.minecraft.src.Entity; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import railcraft.common.api.core.INetworkedObject; + +/** + * This interface defines a track. + * + * Basically all block and tile entity functions for Tracks are delegated to an + * ITrackInstance. + * + * Instead of implementing this interface directly, you should probably + * extend TrackInstanceBase. It will simplify your life. + * + * All packet manipulation is handled by Railcraft's code, + * you just need to implement the functions in INetworkedObject + * to pass data from the server to the client. + * + * @author CovertJaguar + * @see TrackInstanceBase + */ +public interface ITrackInstance extends INetworkedObject +{ + + public TrackSpec getTrackSpec(); + + /** + * Return the rail's metadata (without the power bit if the rail uses one). + * Can be used to make the cart think the rail something other than it is, + * for example when making diamond junctions or switches. + * + * Valid rail metadata is defined as follows: + * 0x0: flat track going North-South + * 0x1: flat track going West-East + * 0x2: track ascending to the East + * 0x3: track ascending to the West + * 0x4: track ascending to the North + * 0x5: track ascending to the South + * 0x6: WestNorth corner (connecting East and South) + * 0x7: EastNorth corner (connecting West and South) + * 0x8: EastSouth corner (connecting West and North) + * 0x9: WestSouth corner (connecting East and North) + * + * @param cart The cart asking for the metadata, null if it is not called by EntityMinecart. + * @return The metadata. + */ + public int getBasicRailMetadata(EntityMinecart cart); + + /** + * This function is called by any minecart that passes over this rail. + * It is called once per update tick that the minecart is on the rail. + * @param cart The cart on the rail. + */ + public void onMinecartPass(EntityMinecart cart); + + /** + * Return the block texture to be used. + * + * @return + */ + public int getTextureIndex(); + + public void writeToNBT(NBTTagCompound data); + + public void readFromNBT(NBTTagCompound data); + + /** + * Return true if this track requires update ticks. + * @return + */ + public boolean canUpdate(); + + public void updateEntity(); + + public boolean blockActivated(EntityPlayer player); + + public void onBlockPlaced(int side); + + public void onBlockPlacedBy(EntityLiving entity); + + public void onNeighborBlockChange(int id); + + /** + * Internal function that sets the Track's TileEntity so it can + * be referenced for position information, etc... + * @param tile + */ + public void setTile(TileEntity tile); + + public int getX(); + + public int getY(); + + public int getZ(); + + public float getExplosionResistance(double srcX, double srcY, double srcZ, Entity exploder); + + /** + * Return true if the rail can make corners. + * Used by placement logic. + * @return true if the rail can make corners. + */ + public boolean isFlexibleRail(); + + /** + * Returns true if the rail can make up and down slopes. + * Used by placement logic. + * @return true if the rail can make slopes. + */ + public boolean canMakeSlopes(); + + /** + * Returns the max speed of the rail. + * @param cart The cart on the rail, may be null. + * @return The max speed of the current rail. + */ + public float getRailMaxSpeed(EntityMinecart cart); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackLockdown.java b/src/common/railcraft/common/api/tracks/ITrackLockdown.java new file mode 100644 index 00000000..c9c287b4 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackLockdown.java @@ -0,0 +1,18 @@ +package railcraft.common.api.tracks; + +import net.minecraft.src.EntityMinecart; + +/** + * Any rail tile entity that can completely halt + * all cart movement should implement this interface. + * (Used in collision handling) + * + * @author CovertJaguar + */ +public interface ITrackLockdown extends ITrackInstance +{ + + public boolean isCartLockedDown(EntityMinecart cart); + + public void releaseCart(); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackPowered.java b/src/common/railcraft/common/api/tracks/ITrackPowered.java new file mode 100644 index 00000000..66a9c434 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackPowered.java @@ -0,0 +1,24 @@ +package railcraft.common.api.tracks; + +/** + * Implementing this interface will allow your track to be + * powered via Redstone. + * + * And so long as you inherit from TrackInstanceBase, all the code for updating + * the power state is already in place (including propagation). + * + * @author CovertJaguar + */ +public interface ITrackPowered extends ITrackInstance +{ + + public boolean isPowered(); + + public void setPowered(boolean powered); + + /** + * The distance that a redstone signal will be passed along from track to track. + * @return int + */ + public int getPowerPropagation(); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackReversable.java b/src/common/railcraft/common/api/tracks/ITrackReversable.java new file mode 100644 index 00000000..c44bff8d --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackReversable.java @@ -0,0 +1,17 @@ +package railcraft.common.api.tracks; + +/** + * Implementing this interface will allow your track to be direction specific. + * + * And so long as you inherit from TrackInstanceBase it will automatically be + * reversable via the Crowbar. + * + * @author CovertJaguar + */ +public interface ITrackReversable extends ITrackInstance +{ + + public boolean isReversed(); + + public void setReversed(boolean reversed); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackSwitch.java b/src/common/railcraft/common/api/tracks/ITrackSwitch.java new file mode 100644 index 00000000..0d30ed84 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackSwitch.java @@ -0,0 +1,21 @@ +package railcraft.common.api.tracks; + +public interface ITrackSwitch extends ITrackInstance +{ + + enum ArrowDirection + { + + NORTH, SOUTH, EAST, WEST, NORTH_SOUTH, EAST_WEST + }; + + public boolean isSwitched(); + + public void setSwitched(boolean switched); + + public boolean isMirrored(); + + public ArrowDirection getRedSignDirection(); + + public ArrowDirection getWhiteSignDirection(); +} diff --git a/src/common/railcraft/common/api/tracks/ITrackTile.java b/src/common/railcraft/common/api/tracks/ITrackTile.java new file mode 100644 index 00000000..54140bc9 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/ITrackTile.java @@ -0,0 +1,13 @@ +package railcraft.common.api.tracks; + +/** + * Don't use this, its an interface that allows other API code + * access to internal functions of the code. + * + * @author CovertJaguar + */ +public interface ITrackTile +{ + + public ITrackInstance getTrackInstance(); +} diff --git a/src/common/railcraft/common/api/tracks/RailTools.java b/src/common/railcraft/common/api/tracks/RailTools.java new file mode 100644 index 00000000..39353020 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/RailTools.java @@ -0,0 +1,175 @@ +package railcraft.common.api.tracks; + +import railcraft.common.api.core.items.ITrackItem; +import net.minecraft.src.Block; +import net.minecraft.src.BlockRail; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +/** + * A number of utility functions related to rails. + * @author CovertJaguar + */ +public abstract class RailTools +{ + + /** + * Attempts to place a rail of the type provided. + * There is no need to verify that the ItemStack contains a valid rail + * prior to calling this function. + * + * The function takes care of that and will return false if the ItemStack + * is not a valid ITrackItem or an ItemBlock who's id + * will return true when passed to BlockRail.isRailBlock(itemID). + * + * That means this function can place any Railcraft or vanilla rail + * and has at least a decent chance of being able to place + * most third party rails. + * + * @param stack The ItemStack containing the rail + * @param world The World object + * @param i x-Coord + * @param j y-Coord + * @param k z-Coord + * @return true if successful + * @see ITrackItem + */ + public static boolean placeRailAt(ItemStack stack, World world, int i, int j, int k) + { + if(stack == null) { + return false; + } + if(stack.getItem() instanceof ITrackItem) { + return ((ITrackItem)stack.getItem()).placeTrack(stack.copy(), world, i, j, k); + } + if(stack.getItem() instanceof ItemBlock && stack.itemID < Block.blocksList.length && BlockRail.isRailBlock(stack.itemID)) { + boolean success = world.setBlockWithNotify(i, j, k, stack.itemID); + if(success) { + world.playSoundEffect((float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F, Block.rail.stepSound.getStepSound(), (Block.rail.stepSound.getVolume() + 1.0F) / 2.0F, Block.rail.stepSound.getPitch() * 0.8F); + } + return success; + } + return false; + } + + /** + * Returns true if the ItemStack contains a valid Railcraft Track item. + * + * Will return false is passed a vanilla rail. + * + * @param stack The ItemStack to test + * @return true if rail + * @see ITrackItem + */ + public static boolean isTrackItem(ItemStack stack) + { + return stack != null && stack.getItem() instanceof ITrackItem; + } + + /** + * Checks to see if a cart is being held by a ITrackLockdown. + * @param cart The cart to check + * @return True if being held + */ + public static boolean isCartLockedDown(EntityMinecart cart) + { + int x = MathHelper.floor_double(cart.posX); + int y = MathHelper.floor_double(cart.posY); + int z = MathHelper.floor_double(cart.posZ); + + if(BlockRail.isRailBlockAt(cart.worldObj, x, y - 1, z)) { + y--; + } + + TileEntity tile = cart.worldObj.getBlockTileEntity(x, y, z); + if(tile instanceof ITrackTile) { + ITrackInstance track = ((ITrackTile)tile).getTrackInstance(); + return track instanceof ITrackLockdown && ((ITrackLockdown)track).isCartLockedDown(cart); + } + return false; + } + + /** + * Verifies that two rails are connected to each other + * along a straight line with no gaps or wanderings. + * @param world The World object + * @param i1 x-Coord of Rail #1 + * @param j1 y-Coord of Rail #1 + * @param k1 z-Coord of Rail #1 + * @param i2 x-Coord of Rail #2 + * @param j2 y-Coord of Rail #2 + * @param k2 z-Coord of Rail #2 + * @return true if they are connected + */ + public static boolean areDistantRailsConnectedAlongAxis(World world, int i1, int j1, int k1, int i2, int j2, int k2) + { + if(j1 < 0 || j2 < 0) { + return false; + } + if(i1 != i2 && k1 != k2) { + return false; + } + if(i1 != i2) { + int min = 0; + int max = 0; + int jj = 0; + if(i1 < i2) { + min = i1; + max = i2; + jj = j1; + } else { + min = i2; + max = i1; + jj = j2; + } + for(int ii = min; ii <= max; ii++) { + if(world.blockExists(ii, jj, k1)) { + if(BlockRail.isRailBlockAt(world, ii, jj, k1)) { + continue; + } else if(BlockRail.isRailBlockAt(world, ii, jj - 1, k1)) { + jj--; + continue; + } else if(BlockRail.isRailBlockAt(world, ii, jj + 1, k1)) { + jj++; + continue; + } else { + return false; + } + } + } + } else if(k1 != k2) { + int min = 0; + int max = 0; + int jj = 0; + if(k1 < k2) { + min = k1; + max = k2; + jj = j1; + } else { + min = k2; + max = k1; + jj = j2; + } + for(int kk = min; kk <= max; kk++) { + if(world.blockExists(i1, jj, kk)) { + if(BlockRail.isRailBlockAt(world, i1, jj, kk)) { + continue; + } else if(BlockRail.isRailBlockAt(world, i1, jj - 1, kk)) { + jj--; + continue; + } else if(BlockRail.isRailBlockAt(world, i1, jj + 1, kk)) { + jj++; + continue; + } else { + return false; + } + } + } + } + return true; + } +} diff --git a/src/common/railcraft/common/api/tracks/TrackInstanceBase.java b/src/common/railcraft/common/api/tracks/TrackInstanceBase.java new file mode 100644 index 00000000..35d04573 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/TrackInstanceBase.java @@ -0,0 +1,385 @@ +package railcraft.common.api.tracks; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import net.minecraft.src.Block; +import net.minecraft.src.BlockRail; +import net.minecraft.src.Entity; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.RailLogic; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; +import railcraft.common.api.core.items.ICrowbar; + +/** + * All ITrackInstances should extend this class. It contains a number of + * default functions and standard behavior for Tracks that should + * greatly simplify implementing new Tracks when using this API. + * + * @author CovertJaguar + * @see ITrackInstance + * @see TrackRegistry + * @see TrackSpec + */ +public abstract class TrackInstanceBase implements ITrackInstance +{ + + private Block block; + public TileEntity tileEntity; + + private Block getBlock() + { + if(block == null) { + int id = getWorld().getBlockId(getX(), getY(), getZ()); + block = Block.blocksList[id]; + } + return block; + } + + @Override + public void setTile(TileEntity tile) + { + tileEntity = tile; + } + + @Override + public int getBasicRailMetadata(EntityMinecart cart) + { + return tileEntity.getBlockMetadata(); + } + + @Override + public void onMinecartPass(EntityMinecart cart) + { + } + + @Override + public boolean blockActivated(EntityPlayer player) + { + if(this instanceof ITrackReversable) { + ItemStack current = player.getCurrentEquippedItem(); + if(current != null && current.getItem() instanceof ICrowbar) { + ITrackReversable track = (ITrackReversable)this; + track.setReversed(!track.isReversed()); + markBlockNeedsUpdate(); + if(current.isItemStackDamageable()) { + current.damageItem(1, player); + } + return true; + } + } + return false; + } + + @Override + public void onBlockPlaced(int side) + { + switchTrack(true); + testPower(); + markBlockNeedsUpdate(); + } + + @Override + public void onBlockPlacedBy(EntityLiving entityliving) + { + if(entityliving == null) { + return; + } + if(this instanceof ITrackReversable) { + int dir = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; + ((ITrackReversable)this).setReversed(dir == 0 || dir == 1); + } + markBlockNeedsUpdate(); + } + + public void markBlockNeedsUpdate() + { + getWorld().markBlockNeedsUpdate(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + } + + protected boolean isRailValid(World world, int i, int j, int k, int meta) + { + boolean valid = true; + if(!world.isBlockSolidOnSide(i, j - 1, k, ForgeDirection.UP)) { + valid = false; + } + if(meta == 2 && !world.isBlockSolidOnSide(i + 1, j, k, ForgeDirection.UP)) { + valid = false; + } else if(meta == 3 && !world.isBlockSolidOnSide(i - 1, j, k, ForgeDirection.UP)) { + valid = false; + } else if(meta == 4 && !world.isBlockSolidOnSide(i, j, k - 1, ForgeDirection.UP)) { + valid = false; + } else if(meta == 5 && !world.isBlockSolidOnSide(i, j, k + 1, ForgeDirection.UP)) { + valid = false; + } + return valid; + } + + @Override + public void onNeighborBlockChange(int id) + { + int meta = tileEntity.getBlockMetadata(); + boolean valid = isRailValid(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, meta); + if(!valid) { + Block blockTrack = getBlock(); + blockTrack.dropBlockAsItem(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0, 0); + getWorld().setBlockWithNotify(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0); + return; + } + + BlockRail blockTrack = (BlockRail)getBlock(); + if(id > 0 && Block.blocksList[id].canProvidePower() && isFlexibleRail() && RailLogic.getAdjacentTracks(new RailLogic(blockTrack, getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)) == 3) { + switchTrack(false); + } + testPower(); + } + + protected void switchTrack(boolean flag) + { + int i = tileEntity.xCoord; + int j = tileEntity.yCoord; + int k = tileEntity.zCoord; + BlockRail blockTrack = (BlockRail)getBlock(); + (new RailLogic(blockTrack, getWorld(), i, j, k)).refreshTrackShape(getWorld().isBlockIndirectlyGettingPowered(i, j, k), flag); + } + + protected void testPower() + { + if(!(this instanceof ITrackPowered)) { + return; + } + int i = tileEntity.xCoord; + int j = tileEntity.yCoord; + int k = tileEntity.zCoord; + ITrackPowered r = (ITrackPowered)this; + int meta = tileEntity.getBlockMetadata(); + boolean powered = getWorld().isBlockIndirectlyGettingPowered(i, j, k) || getWorld().isBlockIndirectlyGettingPowered(i, j + 1, k) || testPowerPropagation(getWorld(), i, j, k, getTrackSpec(), meta, r.getPowerPropagation()); + if(powered != r.isPowered()) { + r.setPowered(powered); + Block blockTrack = getBlock(); + getWorld().notifyBlocksOfNeighborChange(i, j, k, blockTrack.blockID); + getWorld().notifyBlocksOfNeighborChange(i, j - 1, k, blockTrack.blockID); + if(meta == 2 || meta == 3 || meta == 4 || meta == 5) { + getWorld().notifyBlocksOfNeighborChange(i, j + 1, k, blockTrack.blockID); + } + markBlockNeedsUpdate(); + // System.out.println("Setting power [" + i + ", " + j + ", " + k + "]"); + } + } + + protected boolean testPowerPropagation(World world, int i, int j, int k, TrackSpec spec, int meta, int maxDist) + { + return isConnectedRailPowered(world, i, j, k, spec, meta, true, 0, maxDist) || isConnectedRailPowered(world, i, j, k, spec, meta, false, 0, maxDist); + } + + protected boolean isConnectedRailPowered(World world, int i, int j, int k, TrackSpec spec, int meta, boolean dir, int dist, int maxDist) + { + if(dist >= maxDist) { + return false; + } + boolean powered = true; + switch (meta) { + case 0: // '\0' + if(dir) { + k++; + } else { + k--; + } + break; + + case 1: // '\001' + if(dir) { + i--; + } else { + i++; + } + break; + + case 2: // '\002' + if(dir) { + i--; + } else { + i++; + j++; + powered = false; + } + meta = 1; + break; + + case 3: // '\003' + if(dir) { + i--; + j++; + powered = false; + } else { + i++; + } + meta = 1; + break; + + case 4: // '\004' + if(dir) { + k++; + } else { + k--; + j++; + powered = false; + } + meta = 0; + break; + + case 5: // '\005' + if(dir) { + k++; + j++; + powered = false; + } else { + k--; + } + meta = 0; + break; + } + if(testPowered(world, i, j, k, spec, dir, dist, maxDist, meta)) { + return true; + } + return powered && testPowered(world, i, j - 1, k, spec, dir, dist, maxDist, meta); + } + + protected boolean testPowered(World world, int i, int j, int k, TrackSpec spec, boolean dir, int dist, int maxDist, int orientation) + { + // System.out.println("Testing Power at <" + i + ", " + j + ", " + k + ">"); + int id = world.getBlockId(i, j, k); + Block blockTrack = getBlock(); + if(id == blockTrack.blockID) { + int meta = world.getBlockMetadata(i, j, k); + TileEntity tile = world.getBlockTileEntity(i, j, k); + if(tile instanceof ITrackTile) { + ITrackInstance track = ((ITrackTile)tile).getTrackInstance(); + if(!(track instanceof ITrackPowered) || track.getTrackSpec() != spec) { + return false; + } + if(orientation == 1 && (meta == 0 || meta == 4 || meta == 5)) { + return false; + } + if(orientation == 0 && (meta == 1 || meta == 2 || meta == 3)) { + return false; + } + if(((ITrackPowered)track).isPowered()) { + if(world.isBlockIndirectlyGettingPowered(i, j, k) || world.isBlockIndirectlyGettingPowered(i, j + 1, k)) { + return true; + } else { + return isConnectedRailPowered(world, i, j, k, spec, meta, dir, dist + 1, maxDist); + } + } + } + } + return false; + } + + @Override + public int getTextureIndex() + { + return getTrackSpec().getTextureIndex(); + } + + @Override + public void writeToNBT(NBTTagCompound data) + { + } + + @Override + public void readFromNBT(NBTTagCompound data) + { + } + + @Override + public boolean canUpdate() + { + return false; + } + + @Override + public void updateEntity() + { + } + + @Override + public float getExplosionResistance(double srcX, double srcY, double srcZ, Entity exploder) + { + return 3.5f; + } + + @Override + public void writePacketData(DataOutputStream data) throws IOException + { + } + + @Override + public void readPacketData(DataInputStream data) throws IOException + { + } + + @Override + public World getWorld() + { + return tileEntity.worldObj; + } + + @Override + public int getX() + { + return tileEntity.xCoord; + } + + @Override + public int getY() + { + return tileEntity.yCoord; + } + + @Override + public int getZ() + { + return tileEntity.zCoord; + } + + /** + * Return true if the rail can make corners. + * Used by placement logic. + * @return true if the rail can make corners. + */ + @Override + public boolean isFlexibleRail() + { + return false; + } + + /** + * Returns true if the rail can make up and down slopes. + * Used by placement logic. + * @return true if the rail can make slopes. + */ + @Override + public boolean canMakeSlopes() + { + return true; + } + + /** + * Returns the max speed of the rail. + * @param cart The cart on the rail, may be null. + * @return The max speed of the current rail. + */ + @Override + public float getRailMaxSpeed(EntityMinecart cart) + { + return 0.4f; + } +} diff --git a/src/common/railcraft/common/api/tracks/TrackRegistry.java b/src/common/railcraft/common/api/tracks/TrackRegistry.java new file mode 100644 index 00000000..017dd31f --- /dev/null +++ b/src/common/railcraft/common/api/tracks/TrackRegistry.java @@ -0,0 +1,62 @@ +package railcraft.common.api.tracks; + +import cpw.mods.fml.common.FMLCommonHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; + +/** + * The TrackRegistry is part of a system that allows 3rd party addons to simply, + * quickly, and easily define new Tracks with unique behaviors without requiring + * that any additional block ids be used. + * + * All the tracks in RailcraftProxy are implemented using this system 100% + * (except for Gated Tracks and Switch Tracks which have some custom render code). + * + * To define a new track, you need to define a TrackSpec and create a ITrackInstance. + * + * The TrackSpec contains basic constant information about the Track, while the TrackInstace + * controls how an individual Track block interact with the world. + * + * @author CovertJaguar + * @see TrackSpec + * @see ITrackInstance + * @see TrackInstanceBase + */ +public class TrackRegistry +{ + + private static Map trackSpecs = new HashMap(); + + public static void registerTrackSpec(TrackSpec trackSpec) + { + if(trackSpecs.put(trackSpec.getTrackId(), trackSpec) != null) { + throw new RuntimeException("TrackId conflict detected, please adjust your config or contact the author of the " + trackSpec.getTrackTag()); + } + } + + /** + * Returns a cached copy of a TrackSpec object. + * + * @param trackId + * @return + */ + public static TrackSpec getTrackSpec(int trackId) + { + TrackSpec spec = trackSpecs.get((short)trackId); + if(spec == null) { + FMLCommonHandler.instance().getFMLLogger().log(Level.WARNING, "[Railcraft] Unknown Track Spec ID({0}), reverting to normal track", trackId); + spec = trackSpecs.get(-1); + } + return spec; + } + + /** + * Returns all Registered TrackSpecs. + * @return list of TrackSpecs + */ + public static Map getTrackSpecs() + { + return trackSpecs; + } +} diff --git a/src/common/railcraft/common/api/tracks/TrackSpec.java b/src/common/railcraft/common/api/tracks/TrackSpec.java new file mode 100644 index 00000000..68608a63 --- /dev/null +++ b/src/common/railcraft/common/api/tracks/TrackSpec.java @@ -0,0 +1,86 @@ +package railcraft.common.api.tracks; + +import net.minecraft.src.ItemStack; +import railcraft.common.api.core.items.ItemRegistry; + +/** + * Each type of Track has a single instance of TrackSpec + * that corresponds with it. + * + * Each Track block in the world has a ITrackInstance that + * corresponds with it. + * + * Take note of the difference (similar to block classes and tile entities classes). + * + * TrackSpecs must be registered with the TrackRegistry. + * + * Track Items can be acquired with the ItemRegistry. + * + * @see TrackRegistry + * @see ITrackInstance + * + * @author CovertJaguar + */ +public final class TrackSpec +{ + + public static int blockID = 0; + private final String tag; + private final String textureFile; + private final short trackId; + private final int textureId; + private final Class instanceClass; + + /** + * Defines a new track spec. + * + * @param trackId A unique identifier for the track type. 0-512 are reserved for Railcraft. Capped at Short.MAX_VALUE + * @param tag A unique internal string identifier (ex. "track.speed.transition") + * @param textureFile See ITextureProvider + * @param textureId The texture index used by the track's item + * @param instanceClass The ITrackInstance class that corresponds to this TrackSpec + * @see ITextureProvider + */ + public TrackSpec(short trackId, String tag, String textureFile, int textureId, Class instanceClass) { + this.trackId = trackId; + this.tag = tag; + this.textureFile = textureFile; + this.textureId = textureId; + this.instanceClass = instanceClass; + } + + public String getTrackTag() { + return tag; + } + + public short getTrackId() { + return trackId; + } + + public ItemStack getItem() { + return getItem(1); + } + + public ItemStack getItem(int qty) { + if(blockID <= 0) { + return null; + } + return new ItemStack(blockID, qty, getTrackId()); + } + + public ITrackInstance createInstanceFromSpec() { + try { + return (ITrackInstance)instanceClass.newInstance(); + } catch (Exception ex) { + throw new RuntimeException("Improper Track Instance Constructor"); + } + } + + public String getTextureFile() { + return textureFile; + } + + public int getTextureIndex() { + return textureId; + } +} diff --git a/src/common/steampower/BlockMachine.java b/src/common/steampower/BlockMachine.java index 06752f12..ca822ff1 100644 --- a/src/common/steampower/BlockMachine.java +++ b/src/common/steampower/BlockMachine.java @@ -232,7 +232,7 @@ public class BlockMachine extends universalelectricity.prefab.BlockMachine @Override public int getRenderType() { - return -1; + return ItemRenderHelperS.renderID; } } diff --git a/src/common/steampower/ItemMachine.java b/src/common/steampower/ItemMachine.java index 9371c923..c80b7cca 100644 --- a/src/common/steampower/ItemMachine.java +++ b/src/common/steampower/ItemMachine.java @@ -19,7 +19,7 @@ public class ItemMachine extends ItemBlock { par3List.add(new ItemStack(this, 1, 1)); par3List.add(new ItemStack(this, 1, 2)); - par3List.add(new ItemStack(this, 1, 15)); + } @Override public String getTextureFile() { diff --git a/src/common/steampower/turbine/BlockGenerator.java b/src/common/steampower/turbine/BlockGenerator.java index 4bcb0997..4d512832 100644 --- a/src/common/steampower/turbine/BlockGenerator.java +++ b/src/common/steampower/turbine/BlockGenerator.java @@ -2,6 +2,7 @@ package steampower.turbine; import java.util.ArrayList; +import steampower.ItemRenderHelperS; import steampower.TileEntityMachine; import net.minecraft.src.CreativeTabs; @@ -58,7 +59,7 @@ public class BlockGenerator extends universalelectricity.prefab.BlockMachine { @Override public int getRenderType() { - return -1; + return ItemRenderHelperS.renderID; } @Override public TileEntity createNewTileEntity(World world) diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index eafffc81..a0d3a24c 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -17,7 +17,7 @@ import com.google.common.io.ByteArrayDataInput; public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, IMechanical,IElectricityProducer { - ForgeDirection facing; + ForgeDirection facing = ForgeDirection.DOWN; public int force = 0; public int aForce = 0; @@ -33,19 +33,17 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, public void updateEntity() { - if(tCount++ >= 10) - {tCount = 0; - super.updateEntity(); - this.genAmmount = (force * 1.2)/this.getVoltage(); + + this.genAmmount = force/this.getVoltage(); int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); int nMeta = 0; - + int wireCount = 0; switch(meta) { case 0: nMeta = 2;break; - case 1: nMeta = 4;break; + case 1: nMeta = 5;break; case 2: nMeta = 3;break; - case 3: nMeta = 5;break; + case 3: nMeta = 4;break; } facing = ForgeDirection.getOrientation(nMeta).getOpposite(); if(genAmmount > 0) @@ -73,7 +71,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, if (ElectricityManager.instance.getElectricityRequired( ((IConductor)tileEntity).getConnectionID()) > 0) { this.wires[i] = (IConductor)tileEntity; - ElectricityManager.instance.produceElectricity(this, this.wires[i],genAmmount, this.getVoltage()); + wireCount++; } else { @@ -84,9 +82,18 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, { this.wires[i] = null; } - } + } + } + for(int side =0; side < 6; side++) + { + if(wires[side] instanceof IConductor) + { + double max = wires[side].getMaxAmps(); + ElectricityManager.instance.produceElectricity(this, wires[side],Math.min(genAmmount/wireCount,max), this.getVoltage()); + } } + super.updateEntity(); } @Override public void handlePacketData(NetworkManager network, diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 98d7d28b..1caf8116 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -26,6 +26,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR { public int force = 0; public int aForce = 0; + public int bForce = 0; private int frictionLoad = 10; public int steam = 0; public int water = 0; @@ -38,9 +39,8 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR private int posCount = 0; public int tCount = 0; private ForgeDirection frontDir; - private ForgeDirection backDir; - public TileEntity bb; public TileEntity ff; + public TileEntity bb; public boolean running= false; @@ -59,14 +59,13 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR switch(meta) { case 0: nMeta = 2;break; - case 1: nMeta = 4;break; + case 1: nMeta = 5;break; case 2: nMeta = 3;break; - case 3: nMeta = 5;break; + case 3: nMeta = 4;break; } 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); + bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().offsetZ); if(this.runTime > 0) { this.running = true; @@ -83,11 +82,6 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR pos += 1;if(pos > 7){pos =0;} } } - if(bb instanceof TileEntitySteamPiston) - { - this.pos = ((TileEntitySteamPiston) bb).getAnimationPos() + 1; - if(this.pos > 7){pos = 0;} - } if(!worldObj.isRemote) { if(this.runTime < 1 && this.steam > 0) @@ -95,12 +89,30 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR this.steam--; this.runTime=60; } + if(bb instanceof IMechanical) + { + if(((IMechanical) bb).canOutputSide(frontDir)) + { + this.bForce = ((IMechanical) bb).getForce(); + }else + if( bb instanceof TileEntitySteamPiston) + { + if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) + { + this.bForce = ((TileEntitySteamPiston) bb).getForce(); + } + } + else + { + this.bForce = 0; + } + } if(this.runTime > 0) { genRate=Math.min(genRate + 1, 100); this.runTime-=1; this.force = Math.min(genRate * 10,1000); - this.aForce = Math.max(force - this.frictionLoad,0); + this.aForce = Math.max(force - this.frictionLoad+bForce,0); } if(runTime == 0 && this.steam == 0) { @@ -110,9 +122,12 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR if(ff instanceof IMechanical) { - if(((IMechanical) ff).canInputSide(backDir)) + if(((IMechanical) ff).canInputSide(frontDir.getOpposite())) { ((IMechanical) ff).applyForce(this.aForce); + }else + { + } } @@ -133,7 +148,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public boolean canOutputSide(ForgeDirection side) { - if(frontDir == side) + if(frontDir.getOpposite() == side) { return true; } @@ -142,7 +157,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public boolean canInputSide(ForgeDirection side) { - if(backDir == side) + if(frontDir == side) { return true; } @@ -151,7 +166,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR @Override public int applyForce(int force) { - this.aForce = this.force + force- frictionLoad; + this.bForce = force; return aForce; } @@ -245,7 +260,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR //---------------- public Object[] getSendData() { - return new Object[]{steam,water,force,aForce,genRate,runTime}; + return new Object[]{steam,water,force,aForce,bForce,genRate,runTime}; } @Override public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { @@ -255,6 +270,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR this.water = dataStream.readInt(); this.force = dataStream.readInt(); this.aForce = dataStream.readInt(); + this.bForce = dataStream.readInt(); this.genRate= dataStream.readInt(); this.runTime = dataStream.readInt(); //System.out.print("Packet \n"); @@ -301,5 +317,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR // TODO Auto-generated method stub return this.force; } - + public int getMeta() { + return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + } } diff --git a/src/minecraft/basicpipes/ItemRenderHelper.java b/src/minecraft/basicpipes/ItemRenderHelper.java new file mode 100644 index 00000000..036bb39a --- /dev/null +++ b/src/minecraft/basicpipes/ItemRenderHelper.java @@ -0,0 +1,56 @@ +package basicpipes; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.RenderBlocks; + +import org.lwjgl.opengl.GL11; + +import basicpipes.conductors.TileEntityPipe; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; + +public class ItemRenderHelper implements ISimpleBlockRenderingHandler { + public static ItemRenderHelper instance = new ItemRenderHelper(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelPump modelPump = new ModelPump(); + private ModelGearRod modelRod = new ModelGearRod(); + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + if(block.blockID == BasicPipesMain.machineID && metadata < 4) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/pumps/Pump.png")); + modelPump.renderMain(0.0725F); + modelPump.renderC1(0.0725F); + modelPump.renderC2(0.0725F); + modelPump.renderC3(0.0725F); + GL11.glPopMatrix(); + } + if(block.blockID == BasicPipesMain.rodID) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.5F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/GearRod.png")); + modelRod.render(0.0825F,0); + GL11.glPopMatrix(); + } + } + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + public boolean shouldRender3DInInventory() { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index d25e7b7e..74984883 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -7,6 +7,7 @@ import basicpipes.conductors.TileEntityRod; import basicpipes.machines.TileEntityPump; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.registry.GameRegistry; public class PipeClientProxy extends PipeProxy @@ -17,6 +18,7 @@ public class PipeClientProxy extends PipeProxy //Preload textures MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/Items.png"); MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/blocks.png"); + RenderingRegistry.registerBlockHandler(new ItemRenderHelper()); } @Override diff --git a/src/minecraft/steampower/GUISteamPiston.java b/src/minecraft/steampower/GUISteamPiston.java index f3e314df..339e94cd 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -61,7 +61,8 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; displayText2 = "water" + "-" + tileEntity.water; displayText3 = "steam" + "-" + tileEntity.steam; - displayText4 = "Debug:Time" + "=" + tileEntity.tCount; + displayText4 = "Debug:Time" + "=" + tileEntity.tCount; + displayText5 = "Debug:bforce" + "=" + tileEntity.bForce; this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1), 45, 4210752); this.fontRenderer.drawString(displayText2, (int)(105-displayText.length()*1), 55, 4210752); diff --git a/src/minecraft/steampower/ItemRenderHelperS.java b/src/minecraft/steampower/ItemRenderHelperS.java new file mode 100644 index 00000000..11041fbf --- /dev/null +++ b/src/minecraft/steampower/ItemRenderHelperS.java @@ -0,0 +1,62 @@ +package steampower; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.RenderBlocks; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +//ItemRenderHelperS.renderID +public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { + public static ItemRenderHelperS instance = new ItemRenderHelperS(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelGenerator modelGen = new ModelGenerator(); + private ModelTank modelTank = new ModelTank(0f); + private ModelFurnace modelFurnace = new ModelFurnace(); + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + if(block.blockID == SteamPowerMain.genID) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.3F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Generator.png")); + modelGen.RenderMain(0.0725F); + GL11.glPopMatrix(); + } + if(block.blockID == SteamPowerMain.machine.blockID && metadata == 1) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); + modelTank.generalRender(0.0625F); + GL11.glPopMatrix(); + } + if(block.blockID == SteamPowerMain.machine.blockID && metadata > 1 && metadata < 6) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); + modelFurnace.genRender(0.0625F); + GL11.glPopMatrix(); + } + } + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + public boolean shouldRender3DInInventory() { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/minecraft/steampower/SteamClientProxy.java b/src/minecraft/steampower/SteamClientProxy.java index e5201e88..86acc571 100644 --- a/src/minecraft/steampower/SteamClientProxy.java +++ b/src/minecraft/steampower/SteamClientProxy.java @@ -8,6 +8,7 @@ import steampower.geared.RenderGearPiston; import steampower.turbine.TileEntityGen; import steampower.turbine.TileEntitySteamPiston; import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; public class SteamClientProxy extends SteamProxy{ @@ -15,6 +16,7 @@ public class SteamClientProxy extends SteamProxy{ { MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); + RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); } @Override public void init() From 8390bb786cf850a0769165e043fe2ce7b370f8be Mon Sep 17 00:00:00 2001 From: Rseifert Date: Thu, 4 Oct 2012 02:11:39 -0400 Subject: [PATCH 093/115] added crafting recipes --- src/common/basicpipes/BasicPipesMain.java | 3 ++- src/common/steampower/SteamPowerMain.java | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index cd6711a4..22a796c9 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -96,6 +96,7 @@ public class BasicPipesMain{ } //Pump LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); + LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); //Tools LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); //Parts @@ -120,7 +121,7 @@ public class BasicPipesMain{ //crafting pipes //{"black", "red", "green", "brown", "blue", "purple", "cyan", //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; - + GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", 'I',Item.ingotIron,'@',new ItemStack(parts, 1,1)}); //water GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); //lava TODO change to use obby pipe and nether items diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 2bac9ca9..45d4f10b 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -97,7 +97,11 @@ public class SteamPowerMain{ TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata 2-5 */ - + GameRegistry.addRecipe(new ItemStack(gen, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(BasicPipesMain.rod, 1), + '@',new ItemStack(BasicComponents.itemSteelPlate), + 'O',new ItemStack(BasicComponents.itemCircuit,1,0), + 'V',new ItemStack(BasicComponents.itemMotor)}); GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", 'T',new ItemStack(BasicPipesMain.parts, 1,6), '@',new ItemStack(BasicComponents.itemSteelPlate), From 5d2450a061783d7d3fd155205a7b465ace01829d Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 7 Oct 2012 01:48:28 -0400 Subject: [PATCH 094/115] Clean up and bug fixes Fixed a packet being sent per tick bug tried to fix pipes not trading liquid 50% of the time fixed hardness & resistance off all blocks --- .../basicpipes/conductors/BlockPipe.java | 92 ++++++++----------- .../basicpipes/conductors/TileEntityPipe.java | 77 ++++++++-------- .../basicpipes/conductors/TileEntityRod.java | 19 +++- .../basicpipes/machines/BlockMachine.java | 11 +-- src/common/steampower/BlockMachine.java | 19 ++-- src/common/steampower/TileEntityMachine.java | 2 +- .../steampower/boiler/ContainerBoiler.java | 1 - .../steampower/boiler/TileEntityBoiler.java | 9 +- .../steampower/burner/TileEntityFireBox.java | 6 +- 9 files changed, 110 insertions(+), 126 deletions(-) diff --git a/src/common/basicpipes/conductors/BlockPipe.java b/src/common/basicpipes/conductors/BlockPipe.java index e6b4f5f2..ff57359a 100644 --- a/src/common/basicpipes/conductors/BlockPipe.java +++ b/src/common/basicpipes/conductors/BlockPipe.java @@ -2,12 +2,16 @@ package basicpipes.conductors; import java.util.Random; +import basicpipes.BasicPipesMain; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; import net.minecraft.src.BlockContainer; +import net.minecraft.src.EntityItem; +import net.minecraft.src.ItemStack; import net.minecraft.src.Material; +import net.minecraft.src.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; import net.minecraftforge.common.ForgeDirection; @@ -20,71 +24,25 @@ public class BlockPipe extends BlockContainer super(id, Material.iron); this.setBlockName("Pipe"); this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + this.setHardness(1f); + this.setResistance(3f); } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return 0; - } - //Per tick - public int conductorCapacity() - { - return 5; - } - - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ + public boolean isOpaqueCube(){return false;} + public boolean renderAsNormalBlock(){return false;} + public int getRenderType(){return -1;} + public int idDropped(int par1, Random par2Random, int par3){return 0;} @Override public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); - this.updateConductorTileEntity(world, x, y, z); } - public static TileEntity getUEUnit(World world, int x, int y, int z, int side,Liquid type) + public static TileEntity getLiquidUnit(World world, int x, int y, int z, int side,Liquid type) { - switch(side) - { - case 0: y -= 1; break; - case 1: y += 1; break; - case 2: z += 1; break; - case 3: z -= 1; break; - case 4: x += 1; break; - case 5: x -= 1; break; - } + ForgeDirection dir = ForgeDirection.getOrientation(side); //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); + TileEntity tileEntity = world.getBlockTileEntity(x+dir.offsetX, y+dir.offsetY, z+dir.offsetZ); TileEntity returnValue = null; if(tileEntity instanceof ILiquidConsumer) @@ -137,7 +95,7 @@ public class BlockPipe extends BlockContainer { TileEntityPipe conductorTileEntity = (TileEntityPipe) tileEntity; Liquid type = conductorTileEntity.getType(); - conductorTileEntity.addConnection(getUEUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i)); + conductorTileEntity.addConnection(getLiquidUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i)); } } } @@ -147,6 +105,28 @@ public class BlockPipe extends BlockContainer // TODO Auto-generated method stub return new TileEntityPipe(); } + @Override + public void breakBlock(World world, int x, int y, int z,int par5, int par6) + { + TileEntity ent = world.getBlockTileEntity(x, y, z); + Random furnaceRand = new Random(); + if(ent instanceof TileEntityPipe) + { + TileEntityPipe pipe = (TileEntityPipe) ent; + int meta = pipe.type.ordinal(); + float var8 = furnaceRand.nextFloat() * 0.8F + 0.1F; + float var9 = furnaceRand.nextFloat() * 0.8F + 0.1F; + float var10 = furnaceRand.nextFloat() * 0.8F + 0.1F; + EntityItem var12 = new EntityItem(world, (double)((float)x + var8), (double)((float)y + var9), + (double)((float)z + var10), new ItemStack(BasicPipesMain.itemPipes, 1, meta)); + float var13 = 0.05F; + var12.motionX = (double)((float)furnaceRand.nextGaussian() * var13); + var12.motionY = (double)((float)furnaceRand.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)furnaceRand.nextGaussian() * var13); + world.spawnEntityInWorld(var12); + } + } + } diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 9967f292..82053f18 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -2,11 +2,13 @@ package basicpipes.conductors; import net.minecraft.src.EntityPlayer; import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; +import universalelectricity.prefab.Vector3; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; @@ -70,59 +72,58 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } @Override public void updateEntity() - { - //cause the block to update itself every tick needs to be change to .5 seconds to reduce load - BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - count++; - if(count >= 10 && !this.worldObj.isRemote) - { - PacketManager.sendTileEntityPacket(this, "Pipes", new Object[]{this.type.ordinal()}); - count = 0; + { + if(++count >= 5 && !this.worldObj.isRemote) + {count = 0; + //update connections + BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + //send packet with liquid type data + Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + int connectedUnits = 0; int pipes = 1; int producers = 0; int averageVolume = this.liquidStored; - int averagePresure2 = 0; + int aProducerPressure = 0; for(int i = 0; i < 6; i++) { - if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + { + connectedUnits ++; + if(connectedBlocks[i] instanceof ILiquidProducer) { - connectedUnits ++; - if(connectedBlocks[i] instanceof ILiquidProducer) + if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) { - if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) - { - averagePresure2 += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); + aProducerPressure += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); producers++; - } - } - - if(connectedBlocks[i] instanceof TileEntityPipe) - { - pipes ++; - //add pipes volume to average collection value - averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - //get the current pipes pressure - int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; - if(pPressure > hPressure) - { - this.hPressure = pPressure; - } } } - } + + if(connectedBlocks[i] instanceof TileEntityPipe) + { + pipes ++; + //add pipes volume to average collection value + averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + //get the current pipes pressure + int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; + if(pPressure > hPressure) + { + this.hPressure = pPressure; + } + } + } + } //turn average collection into actual average pipe volume averageVolume = Math.max(averageVolume/pipes,0); - - //sets the pressure of the pipe to the producer pressure or to the highest pipe pressure -1 if(producers > 0) { - averagePresure2 = Math.max(averagePresure2/producers,0); - this.presure = averagePresure2; + aProducerPressure = Math.max(aProducerPressure/producers,0); + this.presure = aProducerPressure; } else if(connectedUnits > 0) @@ -146,16 +147,12 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { int transferVolumeAmount = 0; //amount to be moved ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - if(connectedBlocks[i] instanceof TileEntityPipe) + if(connectedConsumer instanceof TileEntityPipe) { if(((TileEntityPipe)connectedBlocks[i]).presure < this.presure) { transferVolumeAmount = this.liquidStored; } - else - { - transferVolumeAmount = 0; - } } else { @@ -165,7 +162,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, this.capacity), 0); } - }else + } if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) { if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index 96c90821..35f253a1 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -52,8 +52,7 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan this.pos = ((IMechanical)bb).getAnimationPos(); } if(!worldObj.isRemote) - { - aForce = Math.max(force - 10,0); + { if(ff instanceof IMechanical) { if(((IMechanical) ff).canInputSide(backDir)) @@ -61,7 +60,21 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan ((IMechanical) ff).applyForce(aForce); } } - + if(bb instanceof IMechanical) + { + if(((IMechanical) bb).getForce() <= 0) + { + this.force = 0; + } + if(((IMechanical) bb).canOutputSide(frontDir)) + { + this.force = ((IMechanical) bb).getForce(); + } + }else + { + this.force = 0; + } + aForce = Math.max(force - 10,0); Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force,aForce}); PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); } diff --git a/src/common/basicpipes/machines/BlockMachine.java b/src/common/basicpipes/machines/BlockMachine.java index 99bef5ea..035b1d0a 100644 --- a/src/common/basicpipes/machines/BlockMachine.java +++ b/src/common/basicpipes/machines/BlockMachine.java @@ -20,8 +20,9 @@ public class BlockMachine extends BlockContainer this.setCreativeTab(CreativeTabs.tabBlock); this.setRequiresSelfNotify(); this.blockIndexInTexture = 26; + this.setHardness(1f); + this.setResistance(3f); } - public boolean isOpaqueCube() { return false; @@ -39,14 +40,6 @@ public class BlockMachine extends BlockContainer { return ItemRenderHelper.renderID; } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return this.blockID; - } protected int damageDropped(int meta) { if(meta < 4) diff --git a/src/common/steampower/BlockMachine.java b/src/common/steampower/BlockMachine.java index ca822ff1..612810a4 100644 --- a/src/common/steampower/BlockMachine.java +++ b/src/common/steampower/BlockMachine.java @@ -18,7 +18,7 @@ import steampower.burner.TileEntityFireBox; public class BlockMachine extends universalelectricity.prefab.BlockMachine { - private Random furnaceRand = new Random(); + private Random mRandom = new Random(); private static boolean keepFurnaceInventory = true; public BlockMachine(int par1) @@ -26,7 +26,8 @@ public class BlockMachine extends universalelectricity.prefab.BlockMachine super("machine", par1, Material.iron); this.setRequiresSelfNotify(); this.setCreativeTab(CreativeTabs.tabBlock); - + this.setHardness(1f); + this.setResistance(3f); } @Override protected int damageDropped(int metadata) @@ -179,13 +180,13 @@ public class BlockMachine extends universalelectricity.prefab.BlockMachine if (var7 != null) { - float var8 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var9 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; - float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var8 = this.mRandom.nextFloat() * 0.8F + 0.1F; + float var9 = this.mRandom.nextFloat() * 0.8F + 0.1F; + float var10 = this.mRandom.nextFloat() * 0.8F + 0.1F; while (var7.stackSize > 0) { - int var11 = this.furnaceRand.nextInt(21) + 10; + int var11 = this.mRandom.nextInt(21) + 10; if (var11 > var7.stackSize) { @@ -201,9 +202,9 @@ public class BlockMachine extends universalelectricity.prefab.BlockMachine } float var13 = 0.05F; - var12.motionX = (double)((float)this.furnaceRand.nextGaussian() * var13); - var12.motionY = (double)((float)this.furnaceRand.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var13); + var12.motionX = (double)((float)this.mRandom.nextGaussian() * var13); + var12.motionY = (double)((float)this.mRandom.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.mRandom.nextGaussian() * var13); par1World.spawnEntityInWorld(var12); } } diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index 972ef58d..24b9bc2c 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -87,7 +87,7 @@ public class TileEntityMachine extends TileEntity implements IInventory, ISided super.updateEntity(); if(count ++ >= 10 && !worldObj.isRemote) - { + {count = 0; Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); } diff --git a/src/common/steampower/boiler/ContainerBoiler.java b/src/common/steampower/boiler/ContainerBoiler.java index 86b512f4..cab29942 100644 --- a/src/common/steampower/boiler/ContainerBoiler.java +++ b/src/common/steampower/boiler/ContainerBoiler.java @@ -13,7 +13,6 @@ public class ContainerBoiler extends Container this.boiler = par2TileEntityboiler; this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); int line; - for (line = 0; line < 3; ++line) { for (int slot = 0; slot < 9; ++slot) diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 6908a5ee..125a22e9 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -119,7 +119,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv @Override public void updateEntity() { - if(count++ >=20){ + if(count++ >=20) + { count = 0; //update/resets connection list TileEntity[] entityList = TradeHelper.getSourounding(this); @@ -168,7 +169,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { heatStored = Math.max(heatStored - heatNeeded, 0); --waterStored; - steamStored = Math.min(steamStored + SteamPowerMain.steamOutBoiler,this.steamMax); + steamStored = Math.min(steamStored + 20,this.steamMax); } TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); @@ -176,11 +177,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, 1)), heatMax); + heatStored = (int) Math.min((heatStored + ((IHeatProducer)blockE).onProduceHeat(250, 1)), heatMax); } else if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) { - heatStored += (int) Math.min((int)(random.nextDouble()*10), heatMax); + heatStored += (int) Math.min((int)(random.nextDouble()*100), heatMax); } } super.updateEntity(); diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 00db57e3..1a5da835 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -49,7 +49,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei addConnection(); if(!worldObj.isRemote) { - sharCoal(); + sharCoal(); } TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); if(blockEntity instanceof TileEntityBoiler) @@ -63,7 +63,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei if (!this.worldObj.isRemote){ - maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*5); + maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*10); //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. if (this.storedItems[0] != null && isConnected) @@ -127,7 +127,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } else { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem()); + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(),1,this.storedItems[0].getItemDamage()); this.storedItems[0].stackSize -= 1; } } From 89e5ca315b29ff4835ca7c23f661b190bec762ac Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 7 Oct 2012 23:58:49 -0400 Subject: [PATCH 095/115] Cleanup and more bug fixes Trying to reduce pack load Fixed mech rod not slowing down when force = 0 Fixed Pipes render bug --- .../basicpipes/conductors/BlockPipe.java | 13 +- .../basicpipes/conductors/TileEntityPipe.java | 185 +++++++++--------- .../basicpipes/conductors/TileEntityRod.java | 9 +- .../basicpipes/machines/TileEntityPump.java | 36 ++-- src/common/steampower/TileEntityMachine.java | 2 +- src/minecraft/basicpipes/RenderPipe.java | 24 +-- 6 files changed, 127 insertions(+), 142 deletions(-) diff --git a/src/common/basicpipes/conductors/BlockPipe.java b/src/common/basicpipes/conductors/BlockPipe.java index ff57359a..499a01da 100644 --- a/src/common/basicpipes/conductors/BlockPipe.java +++ b/src/common/basicpipes/conductors/BlockPipe.java @@ -37,17 +37,15 @@ public class BlockPipe extends BlockContainer super.onBlockAdded(world, x, y, z); this.updateConductorTileEntity(world, x, y, z); } - public static TileEntity getLiquidUnit(World world, int x, int y, int z, int side,Liquid type) + public static TileEntity getLiquidUnit(World world, int x, int y, int z, ForgeDirection side,Liquid type) { - ForgeDirection dir = ForgeDirection.getOrientation(side); - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x+dir.offsetX, y+dir.offsetY, z+dir.offsetZ); + TileEntity tileEntity = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); TileEntity returnValue = null; if(tileEntity instanceof ILiquidConsumer) { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,ForgeDirection.getOrientation(side))) + if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,side)) { returnValue = tileEntity; } @@ -55,7 +53,7 @@ public class BlockPipe extends BlockContainer if (tileEntity instanceof ILiquidProducer) { - if(((ILiquidProducer)tileEntity).canProduceLiquid(type,ForgeDirection.getOrientation(side))) + if(((ILiquidProducer)tileEntity).canProduceLiquid(type,side)) { returnValue = tileEntity; } @@ -95,7 +93,8 @@ public class BlockPipe extends BlockContainer { TileEntityPipe conductorTileEntity = (TileEntityPipe) tileEntity; Liquid type = conductorTileEntity.getType(); - conductorTileEntity.addConnection(getLiquidUnit(world, x, y, z, i, type), ForgeDirection.getOrientation(i)); + ForgeDirection side = ForgeDirection.getOrientation(i); + conductorTileEntity.addConnection(getLiquidUnit(world, x, y, z, side, type), side); } } } diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 82053f18..bcad3012 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -44,7 +44,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { this.connectedBlocks[side.ordinal()] = tileEntity; } - } + }else if(tileEntity instanceof ILiquidProducer) { if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) @@ -72,110 +72,113 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } @Override public void updateEntity() - { - if(++count >= 5 && !this.worldObj.isRemote) - {count = 0; - //update connections + { + if(++count >= 10 || firstUpdate) + {count = 0;firstUpdate = false; BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - //send packet with liquid type data - Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + if(!this.worldObj.isRemote){ + //update connections + + //send packet with liquid type data + Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); + - - - int connectedUnits = 0; - int pipes = 1; - int producers = 0; - int averageVolume = this.liquidStored; - int aProducerPressure = 0; - - for(int i = 0; i < 6; i++) - { - if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) - { - connectedUnits ++; - if(connectedBlocks[i] instanceof ILiquidProducer) + + int connectedUnits = 0; + int pipes = 1; + int producers = 0; + int averageVolume = this.liquidStored; + int aProducerPressure = 0; + + for(int i = 0; i < 6; i++) + { + if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) { - if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) + connectedUnits ++; + if(connectedBlocks[i] instanceof ILiquidProducer) { - aProducerPressure += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); - producers++; + if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) + { + aProducerPressure += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); + producers++; + } + } + + if(connectedBlocks[i] instanceof TileEntityPipe) + { + pipes ++; + //add pipes volume to average collection value + averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; + //get the current pipes pressure + int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; + if(pPressure > hPressure) + { + this.hPressure = pPressure; + } } } - - if(connectedBlocks[i] instanceof TileEntityPipe) - { - pipes ++; - //add pipes volume to average collection value - averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - //get the current pipes pressure - int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; - if(pPressure > hPressure) - { - this.hPressure = pPressure; - } - } + } + //turn average collection into actual average pipe volume + averageVolume = Math.max(averageVolume/pipes,0); + //sets the pressure of the pipe to the producer pressure or to the highest pipe pressure -1 + if(producers > 0) + { + aProducerPressure = Math.max(aProducerPressure/producers,0); + this.presure = aProducerPressure; } - } - //turn average collection into actual average pipe volume - averageVolume = Math.max(averageVolume/pipes,0); - //sets the pressure of the pipe to the producer pressure or to the highest pipe pressure -1 - if(producers > 0) - { - aProducerPressure = Math.max(aProducerPressure/producers,0); - this.presure = aProducerPressure; - } - else - if(connectedUnits > 0) - { - this.presure = hPressure - 1; - }else - { - this.presure = 1; - } - //only trade liquid if there is more than one thing connect and its pressure is higher than 1 - if(connectedUnits > 0 && this.presure > 0) - { - for(byte i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the liquid among the different blocks - if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) - { - if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) - { - int transferVolumeAmount = 0; //amount to be moved - ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - if(connectedConsumer instanceof TileEntityPipe) + else + if(connectedUnits > 0) + { + this.presure = hPressure - 1; + }else + { + this.presure = 1; + } + //only trade liquid if there is more than one thing connect and its pressure is higher than 1 + if(connectedUnits > 0 && this.presure > 0) + { + for(byte i = 0; i < 6; i++) + { + if(connectedBlocks[i] != null) + { + //Spread the liquid among the different blocks + if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) + { + if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) { - if(((TileEntityPipe)connectedBlocks[i]).presure < this.presure) + int transferVolumeAmount = 0; //amount to be moved + ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); + if(connectedConsumer instanceof TileEntityPipe) + { + if(((TileEntityPipe)connectedBlocks[i]).presure < this.presure) + { + transferVolumeAmount = this.liquidStored; + } + } + else { transferVolumeAmount = this.liquidStored; - } + } + + int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); + this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, this.capacity), 0); } - else - { - transferVolumeAmount = this.liquidStored; - } - - int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, this.capacity), 0); - } - } - if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) - { - if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) + } + if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) { - int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,this.capacity-this.liquidStored, ForgeDirection.getOrientation(i)); - this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); + if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) + { + int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,this.capacity-this.liquidStored, ForgeDirection.getOrientation(i)); + this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); + } } } - } - } - } - - } + } + } + + } + } } /** diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index 35f253a1..e660de2a 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -52,7 +52,8 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan this.pos = ((IMechanical)bb).getAnimationPos(); } if(!worldObj.isRemote) - { + { + if(ff instanceof IMechanical) { if(((IMechanical) ff).canInputSide(backDir)) @@ -62,17 +63,13 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan } if(bb instanceof IMechanical) { - if(((IMechanical) bb).getForce() <= 0) - { - this.force = 0; - } if(((IMechanical) bb).canOutputSide(frontDir)) { this.force = ((IMechanical) bb).getForce(); } }else { - this.force = 0; + this.force -=Math.max(force/10, 0); } aForce = Math.max(force - 10,0); Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force,aForce}); diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java index 9e91834b..05b39a34 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -34,27 +34,29 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi @Override public void updateEntity() { super.updateEntity(); - sList = TradeHelper.getSourounding(this); - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - Liquid bellow = Liquid.getLiquidByBlock(bBlock); - if(bellow != null && this.lStored <= 0) + if(count++ >= 20) { - this.type = bellow; - } - if(!worldObj.isRemote) - { - count++; + count = 0; + sList = TradeHelper.getSourounding(this); + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + Liquid bellow = Liquid.getLiquidByBlock(bBlock); - - if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax && count>=20) + if(bellow != null && this.lStored <= 0) { - eStored -= 200; - lStored += 1; - worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); - count = 0; + this.type = bellow; } - } - + + if(!worldObj.isRemote) + { + if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax) + { + eStored -= 200; + lStored += 1; + worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + + } + } + } } @Override diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index 24b9bc2c..651d1409 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -86,7 +86,7 @@ public class TileEntityMachine extends TileEntity implements IInventory, ISided { super.updateEntity(); - if(count ++ >= 10 && !worldObj.isRemote) + if(count ++ >= 20 && !worldObj.isRemote) {count = 0; Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index 5af0ef6c..966ce875 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -36,22 +36,6 @@ public class RenderPipe extends TileEntitySpecialRenderer GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - if(size == 4) - { - switch(type.ordinal()) - { - case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SteamPipe.png");break; - case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/WaterPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; - } - if(tileEntity.connectedBlocks[0] != null) fourPipe.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) fourPipe.renderTop(); - if(tileEntity.connectedBlocks[2] != null) fourPipe.renderFront(); - if(tileEntity.connectedBlocks[3] != null) fourPipe.renderBack(); - if(tileEntity.connectedBlocks[4] != null) fourPipe.renderRight(); - if(tileEntity.connectedBlocks[5] != null) fourPipe.renderLeft(); - fourPipe.renderMiddle(); - } if(size == 6) { switch(type.ordinal()) @@ -64,10 +48,10 @@ public class RenderPipe extends TileEntitySpecialRenderer } if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); if(tileEntity.connectedBlocks[1] != null) SixPipe.renderTop(); - if(tileEntity.connectedBlocks[2] != null) SixPipe.renderFront(); - if(tileEntity.connectedBlocks[3] != null) SixPipe.renderBack(); - if(tileEntity.connectedBlocks[4] != null) SixPipe.renderRight(); - if(tileEntity.connectedBlocks[5] != null) SixPipe.renderLeft(); + if(tileEntity.connectedBlocks[3] != null) SixPipe.renderFront(); + if(tileEntity.connectedBlocks[2] != null) SixPipe.renderBack(); + if(tileEntity.connectedBlocks[5] != null) SixPipe.renderRight(); + if(tileEntity.connectedBlocks[4] != null) SixPipe.renderLeft(); SixPipe.renderMiddle(); } GL11.glPopMatrix(); From 3bd9b857d418130ee3e7bde8335c57af6bfe4fc7 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 8 Oct 2012 14:24:34 -0400 Subject: [PATCH 096/115] bug fixes and packet reductions fixed another bug with the pipe, pipe would not lose pressure after being disconncted from source. Also cleaned up a bit on some of the code and added code to only send packets if the machine updated. This will reduce a lot of paceket load being sent to the client. --- .../basicpipes/conductors/BlockPipe.java | 9 +- .../basicpipes/conductors/ItemGuage.java | 6 +- .../basicpipes/conductors/TileEntityPipe.java | 126 +++++++++--------- .../basicpipes/conductors/TileEntityRod.java | 10 +- src/common/steampower/TileEntityMachine.java | 6 +- .../steampower/boiler/TileEntityBoiler.java | 37 ++--- .../steampower/burner/TileEntityFireBox.java | 4 + .../steampower/turbine/TileEntityGen.java | 5 +- .../turbine/TileEntitySteamPiston.java | 24 +++- src/minecraft/steampower/GUISteamPiston.java | 6 +- 10 files changed, 129 insertions(+), 104 deletions(-) diff --git a/src/common/basicpipes/conductors/BlockPipe.java b/src/common/basicpipes/conductors/BlockPipe.java index 499a01da..92131416 100644 --- a/src/common/basicpipes/conductors/BlockPipe.java +++ b/src/common/basicpipes/conductors/BlockPipe.java @@ -84,17 +84,13 @@ public class BlockPipe extends BlockContainer } public static void updateConductorTileEntity(World world, int x, int y, int z) { - for(int i = 0; i < 6; i++) { - //Update the tile entity on neighboring blocks TileEntity tileEntity = world.getBlockTileEntity(x, y, z); if(tileEntity instanceof TileEntityPipe) { - TileEntityPipe conductorTileEntity = (TileEntityPipe) tileEntity; - Liquid type = conductorTileEntity.getType(); - ForgeDirection side = ForgeDirection.getOrientation(i); - conductorTileEntity.addConnection(getLiquidUnit(world, x, y, z, side, type), side); + ((TileEntityPipe) tileEntity).addConnection(getLiquidUnit(world, x, y, z, + ForgeDirection.getOrientation(i), ((TileEntityPipe) tileEntity).getType()), ForgeDirection.getOrientation(i)); } } } @@ -107,6 +103,7 @@ public class BlockPipe extends BlockContainer @Override public void breakBlock(World world, int x, int y, int z,int par5, int par6) { + super.breakBlock(world, x, y, z, par5, par6); TileEntity ent = world.getBlockTileEntity(x, y, z); Random furnaceRand = new Random(); if(ent instanceof TileEntityPipe) diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index a1f56831..35902ad0 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -66,7 +66,9 @@ public class ItemGuage extends Item print = typeName +" " + steam +" @ "+pressure+"PSI"; - player.addChatMessage(print); + player.sendChatToPlayer(print); + player.sendChatToPlayer("hPre: "+pipeEntity.hPressure+" hPPre:"+pipeEntity.hPProducer); + player.sendChatToPlayer("cUnits: "+pipeEntity.connectedUnits); return true; } if(blockEntity instanceof IMechanical) @@ -78,7 +80,7 @@ public class ItemGuage extends Item print = " " + steam +"N "+pressure*45+"degrees"; - player.addChatMessage(print); + player.sendChatToPlayer(print); return true; } } diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index bcad3012..7703c118 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -16,20 +16,20 @@ import basicpipes.pipes.api.Liquid; import com.google.common.io.ByteArrayDataInput; public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver { - //The amount stored in the conductor - protected int liquidStored = 0; - //the current set type of the pipe 0-5 protected Liquid type = Liquid.DEFUALT; - //The maximum amount of electricity this conductor can take + public int capacity = 2; - public int hPressure = this.presure; private int count = 0; - private boolean intiUpdate = true; - //Stores information on all connected blocks around this tile entity - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - //Checks if this is the first the tile entity updates - protected boolean firstUpdate = true; public int presure = 0; + public int connectedUnits = 0; + public int hPressure = 0; + public int hPProducer = 0; + protected int liquidStored = 0; + + private boolean intiUpdate = true; + protected boolean firstUpdate = true; + + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; /** * This function adds a connection between this pipe and other blocks * @param tileEntity - Must be either a producer, consumer or a conductor @@ -44,15 +44,19 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke { this.connectedBlocks[side.ordinal()] = tileEntity; } - }else + } if(tileEntity instanceof ILiquidProducer) { if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) { - this.connectedBlocks[side.ordinal()] = tileEntity; + this.connectedBlocks[side.ordinal()] = tileEntity; } } } + public int getPressure() + { + return this.presure; + } /** * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). * @param vols - The amount of vol source is trying to give to this pipe @@ -73,72 +77,64 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke @Override public void updateEntity() { - if(++count >= 10 || firstUpdate) - {count = 0;firstUpdate = false; + if(++count >= 5) + { + this.connectedUnits = 0; + this.hPressure = 0; + this.hPProducer = 0; + + count = 0; BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - if(!this.worldObj.isRemote){ - //update connections - - //send packet with liquid type data - Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); - - - - int connectedUnits = 0; - int pipes = 1; - int producers = 0; - int averageVolume = this.liquidStored; - int aProducerPressure = 0; - + if(!this.worldObj.isRemote) + { + if(firstUpdate) + { firstUpdate = false; + Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); + } for(int i = 0; i < 6; i++) { - if(connectedBlocks[i] instanceof ILiquidConsumer || connectedBlocks[i] instanceof ILiquidProducer) + if(connectedBlocks[i] instanceof ILiquidProducer) { - connectedUnits ++; - if(connectedBlocks[i] instanceof ILiquidProducer) - { - if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) + + if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) + {++this.connectedUnits; + if(((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)) > hPProducer) { - aProducerPressure += ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); - producers++; - } - } - - if(connectedBlocks[i] instanceof TileEntityPipe) - { - pipes ++; - //add pipes volume to average collection value - averageVolume += ((TileEntityPipe)connectedBlocks[i]).liquidStored; - //get the current pipes pressure - int pPressure = ((TileEntityPipe)connectedBlocks[i]).presure ; - if(pPressure > hPressure) - { - this.hPressure = pPressure; + hPProducer = ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); } } + } + if(connectedBlocks[i] instanceof TileEntityPipe) + { + ++this.connectedUnits; + if(((TileEntityPipe)connectedBlocks[i]).presure > hPressure) + { + hPressure = ((TileEntityPipe)connectedBlocks[i]).getPressure(); + } } - } - //turn average collection into actual average pipe volume - averageVolume = Math.max(averageVolume/pipes,0); - //sets the pressure of the pipe to the producer pressure or to the highest pipe pressure -1 - if(producers > 0) - { - aProducerPressure = Math.max(aProducerPressure/producers,0); - this.presure = aProducerPressure; - } - else + + }//end of pressure update + + this.presure = 0; if(connectedUnits > 0) { - this.presure = hPressure - 1; + if(hPProducer > 0) + { + this.presure = hPProducer; + }else + { + this.presure = Math.max(hPressure - 1,0); + } }else { - this.presure = 1; + this.presure = 0; } + //only trade liquid if there is more than one thing connect and its pressure is higher than 1 - if(connectedUnits > 0 && this.presure > 0) + if(this.connectedUnits > 0 && this.presure > 0 && this.liquidStored > 0) { - for(byte i = 0; i < 6; i++) + for(int i = 0; i < 6; i++) { if(connectedBlocks[i] != null) { @@ -175,9 +171,9 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } } } - } + }//end of liquid trader - } + }//end of !worldObj.isRemote } } diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index e660de2a..451903d4 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -18,6 +18,7 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan public int pos = 0; private int force = 0; + private int pForce = 0; public int aForce = 0; public int forceMax = 1000; private int tickCount = 0; @@ -72,8 +73,12 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan this.force -=Math.max(force/10, 0); } aForce = Math.max(force - 10,0); - Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force,aForce}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + if(this.force != this.pForce) + { + Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + } + this.pForce = this.force; } } } @@ -113,7 +118,6 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan try { this.force = dataStream.readInt(); - this.aForce = dataStream.readInt(); }catch(Exception e) { e.printStackTrace(); diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index 651d1409..bb825a75 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -82,11 +82,15 @@ public class TileEntityMachine extends TileEntity implements IInventory, ISided { return new Object[]{}; } + public boolean needUpdate() + { + return false; + } public void updateEntity() { super.updateEntity(); - if(count ++ >= 20 && !worldObj.isRemote) + if(count ++ >= 10 && !worldObj.isRemote && needUpdate()) {count = 0; Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 125a22e9..bb22ac7a 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -32,8 +32,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv /** The number of ticks that the boiler will keep burning */ public int RunTime = 0; - /** The ammount of energy stored before being add to run Timer */ - public int energyStore = 0; /** The ammount of water stored */ public int waterStored = 0; /** The ammount of steam stored */ @@ -53,13 +51,16 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv int steamMax = 140; public boolean isBeingHeated = false; private Random random = new Random(); + private int pWater = 0; + private int pSteam = 0; + private int pHullH = 0; public String getInvName() { return "container.boiler"; } public Object[] getSendData() { - return new Object[]{(int)RunTime,(int)energyStore,(int)waterStored, + return new Object[]{(int)RunTime,(int)waterStored, (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; } @@ -71,7 +72,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { RunTime = dataStream.readInt(); - energyStore = dataStream.readInt(); waterStored = dataStream.readInt(); steamStored = dataStream.readInt(); heatStored = dataStream.readInt(); @@ -91,7 +91,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { super.readFromNBT(par1NBTTagCompound); this.RunTime = par1NBTTagCompound.getShort("BurnTime"); - this.energyStore = par1NBTTagCompound.getInteger("energyStore"); this.steamStored = par1NBTTagCompound.getInteger("steamStore"); this.heatStored = par1NBTTagCompound.getInteger("heatStore"); this.waterStored = par1NBTTagCompound.getInteger("waterStore"); @@ -105,7 +104,6 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { super.writeToNBT(par1NBTTagCompound); par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); - par1NBTTagCompound.setInteger("energyStore", (int)this.energyStore); par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); @@ -115,10 +113,19 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv /** * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count * ticks and creates a new spawn inside its implementation. - */ + */ + public boolean needUpdate() + { + if(this.pWater != this.waterStored || this.pSteam != this.steamStored || this.pHullH != this.hullHeat) + { + return true; + } + return false; + } @Override public void updateEntity() { + super.updateEntity(); if(count++ >=20) { count = 0; @@ -183,8 +190,12 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { heatStored += (int) Math.min((int)(random.nextDouble()*100), heatMax); } + //keeps track of what the previous measure were so packets stop sending after the machine doesn't change any + this.pWater = this.waterStored; + this.pSteam = this.steamStored; + this.pHullH = this.hullHeat; } - super.updateEntity(); + } } private void emptyBuckets() @@ -309,15 +320,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv public int presureOutput(Liquid type, ForgeDirection side) { if(type == Liquid.STEAM) { - if(side == ForgeDirection.UP) - { - return 100; - } - else - { - return 80; - } - + return (this.steamStored/this.steamMax)*40 +60; } return 0; } diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 1a5da835..ee556fdb 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -40,6 +40,10 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei return 5; } + public boolean needUpdate() + { + return true; + } public void updateEntity() { super.updateEntity(); diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index a0d3a24c..7e04f857 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -28,7 +28,10 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, public boolean empProf = false; IConductor[] wires = {null,null,null,null,null,null}; - + public boolean needUpdate() + { + return false; + } @Override public void updateEntity() { diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 1caf8116..74f6d286 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -41,7 +41,10 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR private ForgeDirection frontDir; public TileEntity ff; public TileEntity bb; - + private int pWater = 0; + private int pSteam = 0; + private int pForce = 0; + public int pCount = 0; public boolean running= false; @Override @@ -51,7 +54,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR if(tickCount++ >=10) {tickCount = 0; - ++tCount;if(tCount > 120){tCount = 0;} + //++tCount;if(tCount > 120){tCount = 0;} int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); int nMeta = 0; @@ -130,7 +133,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR } } - + pWater = this.water; + pSteam = this.steam; + pForce = this.force; } @@ -260,7 +265,15 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR //---------------- public Object[] getSendData() { - return new Object[]{steam,water,force,aForce,bForce,genRate,runTime}; + return new Object[]{steam,water,force,aForce,genRate,runTime}; + } + public boolean needUpdate() + { + if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) + { + return true; + } + return false; } @Override public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { @@ -270,10 +283,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR this.water = dataStream.readInt(); this.force = dataStream.readInt(); this.aForce = dataStream.readInt(); - this.bForce = dataStream.readInt(); this.genRate= dataStream.readInt(); this.runTime = dataStream.readInt(); - //System.out.print("Packet \n"); + ++pCount; } catch(Exception e) { diff --git a/src/minecraft/steampower/GUISteamPiston.java b/src/minecraft/steampower/GUISteamPiston.java index 339e94cd..3d220089 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -61,14 +61,14 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; displayText2 = "water" + "-" + tileEntity.water; displayText3 = "steam" + "-" + tileEntity.steam; - displayText4 = "Debug:Time" + "=" + tileEntity.tCount; - displayText5 = "Debug:bforce" + "=" + tileEntity.bForce; + displayText4 = "Db:PacketsReceived " + "=" + tileEntity.pCount; + //displayText5 = "Debug:bforce" + "=" + tileEntity.bForce; 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(displayText5, (int)(105-displayText.length()*1), 85, 4210752); this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } From 7734f98cc1b7b9c7355c3f4ee69b6ea6fd15ae8c Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 8 Oct 2012 21:52:03 -0400 Subject: [PATCH 097/115] working on liquid storage tank its a WIP but in the process of setting it all up i worked on the normal boiler and improved the MHelper file which contains the liqiud trade method, corner finder method and surrounding TileEntity finder. --- .../basicpipes/LTanks/TileEntityLTank.java | 197 ++++++++ .../basicpipes/conductors/ItemGuage.java | 2 - .../basicpipes/conductors/TileEntityPipe.java | 8 +- .../basicpipes/machines/TileEntityPump.java | 4 +- .../basicpipes/machines/TileEntityValve.java | 4 +- src/common/basicpipes/mcmod.info | 2 +- src/common/basicpipes/pipes/api/Liquid.java | 30 +- src/common/basicpipes/pipes/api/MHelper.java | 96 ++++ .../basicpipes/pipes/api/TradeHelper.java | 173 ------- src/common/steampower/TradeHelper.java | 175 ------- .../steampower/boiler/TileEntityBoiler.java | 9 +- .../steampower/burner/TileEntityFireBox.java | 6 +- src/common/steampower/mcmod.info | 2 +- .../renderTank/ModelLiquidTank.java | 427 ++++++++++++++++++ .../basicpipes/renderTank/RenderLTank.java | 51 +++ src/minecraft/steampower/GUISteamPiston.java | 9 +- src/minecraft/steampower/RenderBoiler.java | 5 +- src/minecraft/textures/tanks/GUITurret.png | Bin 0 -> 1208 bytes src/minecraft/textures/tanks/LiquidTank.png | Bin 0 -> 614 bytes src/minecraft/textures/tanks/LiquidTank0.png | Bin 0 -> 594 bytes src/minecraft/textures/tanks/LiquidTank1.png | Bin 0 -> 626 bytes src/minecraft/textures/tanks/LiquidTank2.png | Bin 0 -> 626 bytes src/minecraft/textures/tanks/LiquidTank3.png | Bin 0 -> 623 bytes src/minecraft/textures/tanks/LiquidTank4.png | Bin 0 -> 614 bytes 24 files changed, 808 insertions(+), 392 deletions(-) create mode 100644 src/common/basicpipes/LTanks/TileEntityLTank.java create mode 100644 src/common/basicpipes/pipes/api/MHelper.java delete mode 100644 src/common/basicpipes/pipes/api/TradeHelper.java delete mode 100644 src/common/steampower/TradeHelper.java create mode 100644 src/minecraft/basicpipes/renderTank/ModelLiquidTank.java create mode 100644 src/minecraft/basicpipes/renderTank/RenderLTank.java create mode 100644 src/minecraft/textures/tanks/GUITurret.png create mode 100644 src/minecraft/textures/tanks/LiquidTank.png create mode 100644 src/minecraft/textures/tanks/LiquidTank0.png create mode 100644 src/minecraft/textures/tanks/LiquidTank1.png create mode 100644 src/minecraft/textures/tanks/LiquidTank2.png create mode 100644 src/minecraft/textures/tanks/LiquidTank3.png create mode 100644 src/minecraft/textures/tanks/LiquidTank4.png diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java new file mode 100644 index 00000000..a5547fb3 --- /dev/null +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -0,0 +1,197 @@ +package basicpipes.LTanks; + +import com.google.common.io.ByteArrayDataInput; + +import universalelectricity.network.IPacketReceiver; +import universalelectricity.network.PacketManager; +import universalelectricity.prefab.Vector3; +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class TileEntityLTank extends TileEntity implements ILiquidConsumer,ILiquidProducer,IPacketReceiver{ +public TileEntity[] cc = {null,null,null,null,null,null}; +public Liquid type = Liquid.DEFUALT; +public int LStored = 0; +public int pLStored = 0; +public int LMax = 4; +private int count = 0; +private int count2 = 0; +private boolean firstUpdate = true; +public void updateEntity() +{ + if(++count >= 10) + { + count = 0; + this.cc = MHelper.getSourounding(this); + if(!worldObj.isRemote) + { + MHelper.shareLiquid(this, type, LStored); + if(firstUpdate ||(this.LStored != pLStored)|| count2 >= 100) + { + count2 = 0; + firstUpdate = false; + Packet packet = PacketManager.getPacket(BasicPipesMain.channel, this, new Object[]{type.ordinal(),LStored}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 20); + } + this.pLStored = this.LStored; + } + } +} +public void writeToNBT(NBTTagCompound nbt) +{ + super.writeToNBT(nbt); + nbt.setInteger("Vol", this.LStored); + nbt.setInteger("type", this.type.ordinal()); +} + +@Override +public void readFromNBT(NBTTagCompound nbt) +{ + super.readFromNBT(nbt); + this.LStored = nbt.getInteger("Vol"); + this.type = Liquid.getLiquid(nbt.getInteger("type")); +} + +//-------------------- +//Liquid stuff +//------------------------------------ +@Override +public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) +{ + if(type == this.type) + { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); + this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); + return rejectedVolume; + } + return vol; +} + +@Override +public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return false; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return false; + } + return true; + } + return false; +} + +@Override +public int getStoredLiquid(Liquid type) { + if(type == this.type) + { + return LStored; + } + return 0; +} + +@Override +public int getLiquidCapacity(Liquid type) { + if(type == this.type) + { + return LMax; + } + return 0; +} + +public Liquid getType() { + // TODO Auto-generated method stub + return type; +} + +@Override +public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == this.type) + { + int aVol = Math.max(((this.getStoredLiquid(type) - vol) + this.LMax)-vol, 0); + this.LStored = Math.min(Math.max((LStored - aVol),0),this.LMax); + return aVol; + } + return 0; +} + +@Override +public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return true; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return true; + } + } + return false; +} + +@Override +public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return true; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return true; + } + } + return false; +} + +@Override +public int presureOutput(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return this.type.defaultPresure; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return this.type.defaultPresure; + } + } + return 0; +} + + +@Override +public void handlePacketData(NetworkManager network, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + this.type = Liquid.getLiquid(dataStream.readInt()); + this.LStored = dataStream.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + System.out.print("Fail reading data for Storage tank \n"); + } + +} +} diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index 35902ad0..991183b1 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -67,8 +67,6 @@ public class ItemGuage extends Item print = typeName +" " + steam +" @ "+pressure+"PSI"; player.sendChatToPlayer(print); - player.sendChatToPlayer("hPre: "+pipeEntity.hPressure+" hPPre:"+pipeEntity.hPProducer); - player.sendChatToPlayer("cUnits: "+pipeEntity.connectedUnits); return true; } if(blockEntity instanceof IMechanical) diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 7703c118..10ca4e98 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -20,6 +20,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke public int capacity = 2; private int count = 0; + private int count2 = 0; public int presure = 0; public int connectedUnits = 0; public int hPressure = 0; @@ -87,8 +88,9 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); if(!this.worldObj.isRemote) { - if(firstUpdate) - { firstUpdate = false; + if(firstUpdate || count2++ >= 10) + { count2= 0; + firstUpdate = false; Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); } @@ -132,7 +134,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } //only trade liquid if there is more than one thing connect and its pressure is higher than 1 - if(this.connectedUnits > 0 && this.presure > 0 && this.liquidStored > 0) + if(this.connectedUnits > 0 && this.presure > 0) { for(int i = 0; i < 6; i++) { diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java index 05b39a34..5485974a 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -6,7 +6,7 @@ import universalelectricity.implement.IElectricityReceiver; import universalelectricity.prefab.TileEntityElectricityReceiver; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.TradeHelper; +import basicpipes.pipes.api.MHelper; public class TileEntityPump extends TileEntityElectricityReceiver implements ILiquidProducer,IElectricityReceiver { int dCount = 0; @@ -37,7 +37,7 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi if(count++ >= 20) { count = 0; - sList = TradeHelper.getSourounding(this); + sList = MHelper.getSourounding(this); int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); Liquid bellow = Liquid.getLiquidByBlock(bBlock); diff --git a/src/common/basicpipes/machines/TileEntityValve.java b/src/common/basicpipes/machines/TileEntityValve.java index 7542310f..3e322b2e 100644 --- a/src/common/basicpipes/machines/TileEntityValve.java +++ b/src/common/basicpipes/machines/TileEntityValve.java @@ -5,7 +5,7 @@ import net.minecraftforge.common.ForgeDirection; import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.TradeHelper; +import basicpipes.pipes.api.MHelper; public class TileEntityValve extends TileEntity implements ILiquidConsumer { Liquid type = Liquid.DEFUALT; @@ -55,7 +55,7 @@ boolean on = false; case 4: deltaX++;break; } - connected = TradeHelper.getSourounding(this); + connected = MHelper.getSourounding(this); for(int i = 0;i<6;i++) { if(!(connected[i] instanceof TileEntityPipe)) diff --git a/src/common/basicpipes/mcmod.info b/src/common/basicpipes/mcmod.info index 72a86a53..f71701bd 100644 --- a/src/common/basicpipes/mcmod.info +++ b/src/common/basicpipes/mcmod.info @@ -3,7 +3,7 @@ "modid": "basicPipes", "name": "Basic Pipes", "description": "Simple liquid transport system for UE based mods", - "version": "r9", + "version": "1.8", "mcversion": "1.3.2", "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", "updateUrl": "", diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/src/common/basicpipes/pipes/api/Liquid.java index 807ca262..8312de39 100644 --- a/src/common/basicpipes/pipes/api/Liquid.java +++ b/src/common/basicpipes/pipes/api/Liquid.java @@ -9,30 +9,32 @@ import net.minecraft.src.Block; */ public enum Liquid { // -1 == null || unused - STEAM("Steam",false,true,-1,-1), - WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID), - LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID), - OIL("Oil",true,false,-1,-1),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), - Fuel("Fuel",true,false,-1,-1), - Air("Air",false,true,0,-1), - Methain("Methain",true,true,-1,-1), - BioFuel("BioFuel",true,false,-1,-1), - Coolent("Coolent",false,false,-1,-1), - NukeWaste("NukeWaste",false,false,-1,-1), - Ether("Ether",false,false,-1,-1), - DEFUALT("Empty",false,false,-1,-1); + STEAM("Steam",false,true,-1,-1,100), + WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID,32), + LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID,20), + OIL("Oil",true,false,-1,-1,32),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), + Fuel("Fuel",true,false,-1,-1,40), + Air("Air",false,true,0,-1,100), + Methain("Methain",true,true,-1,-1,100), + BioFuel("BioFuel",true,false,-1,-1,40), + Coolent("Coolent",false,false,-1,-1,40), + NukeWaste("NukeWaste",false,false,-1,-1,20), + Ether("Ether",false,false,-1,-1,100), + DEFUALT("Empty",false,false,-1,-1,0); public final boolean flamable;//can it catch on fire, not used but might be public final boolean isGas;//is it a gas, used to find if it floats public final int Still;//if there is a block of still liquid linked to this public final int Moving;//if there is a block of moving liquid linked to this - public final String lName; -private Liquid(String name,boolean flame,boolean gas,int block, int Moving) + public final String lName;//Default name for the liquid + public final int defaultPresure;//default pressure output of the liquid +private Liquid(String name,boolean flame,boolean gas,int block, int Moving,int dPressure) { this.flamable = flame; this.isGas = gas; this.Still = block; this.Moving = Moving; this.lName = name; + this.defaultPresure = dPressure; } /** * Only use this if you are converting from the old system diff --git a/src/common/basicpipes/pipes/api/MHelper.java b/src/common/basicpipes/pipes/api/MHelper.java new file mode 100644 index 00000000..3bc87ba7 --- /dev/null +++ b/src/common/basicpipes/pipes/api/MHelper.java @@ -0,0 +1,96 @@ +package basicpipes.pipes.api; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class MHelper { +/** + * + * @param entity - entity at center of search + * @return an Array containing TileEntities around the TileEntity + */ + public static TileEntity[] getSourounding(TileEntity te) + { + TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; + for(int i =0; i< 6;i++) + { + ForgeDirection d = ForgeDirection.getOrientation(i); + TileEntity aEntity = te.worldObj.getBlockTileEntity(te.xCoord+d.offsetX, te.yCoord+d.offsetY, te.zCoord+d.offsetZ); + if(aEntity instanceof TileEntity) + { + list[i] = aEntity; + } + } + return list; + } + /** + * Used to help trade liquid without having to do too much work + * @param blockEntity - tile entity trading the liquid + * @param type - liquid type being traded + * @param vol - the volume to be traded + * @return the remaining untraded liquid + */ + public static int shareLiquid(TileEntity te, Liquid type,int vol) + { + int currentVol = vol; + boolean rise = type.isGas; + ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); + TileEntity first = te.worldObj.getBlockTileEntity(te.xCoord+st.offsetX, te.yCoord+st.offsetX, te.zCoord+st.offsetX); + //trades to the first, bottom for liquid, top for gas + if(first instanceof ILiquidConsumer && ((ILiquidConsumer) first).getStoredLiquid(type) < ((ILiquidConsumer) first).getLiquidCapacity(type)) + { + currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, vol, st); + } + //trades to side if anything is left + for(int i = 2; i < 6;i++) + { + ForgeDirection side = ForgeDirection.getOrientation(i); + TileEntity sSide = te.worldObj.getBlockTileEntity(te.xCoord+side.offsetX, te.yCoord+side.offsetX, te.zCoord+side.offsetX); + if(sSide instanceof ILiquidConsumer && ((ILiquidConsumer) sSide).getStoredLiquid(type) < ((ILiquidConsumer) sSide).getLiquidCapacity(type) + && currentVol > 0) + { + currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, vol, st); + } + } + //trades to the opposite of the first if anything is left + if(currentVol > 0) + { + TileEntity last = te.worldObj.getBlockTileEntity(te.xCoord+st.getOpposite().offsetX, te.yCoord+st.getOpposite().offsetX, te.zCoord+st.getOpposite().offsetX); + if(last instanceof ILiquidConsumer && ((ILiquidConsumer) last).getStoredLiquid(type) < ((ILiquidConsumer) last).getLiquidCapacity(type)) + { + currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, vol, st); + } + } + return Math.max(currentVol,0); + } + /** + * + * @param entity - entity in question + * @return 1-4 if corner 0 if not a corner + * you have to figure out which is which depending on what your using this for + * 1 should be north east 2 south east + */ + public static int corner(TileEntity entity) + { + TileEntity[] en = getSourounding(entity); + if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) + { + return 3; + } + if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) + { + return 4; + } + if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) + { + return 1; + } + if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) + { + return 2; + } + + return 0; + + } +} diff --git a/src/common/basicpipes/pipes/api/TradeHelper.java b/src/common/basicpipes/pipes/api/TradeHelper.java deleted file mode 100644 index ace51578..00000000 --- a/src/common/basicpipes/pipes/api/TradeHelper.java +++ /dev/null @@ -1,173 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; - -public class TradeHelper { -/** - * - * @param entity - entity at center of search - * @return an Array containing found entities and nulls of nonEntities - */ - public static TileEntity[] getSourounding(TileEntity entity) - { - TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; - for(int i =0; i< 6;i++) - { - int x = entity.xCoord; - int y = entity.yCoord; - int z = entity.zCoord; - - switch(i) - { - case 0: y = y - 1;break;//down - case 1: y = y + 1;break;//up - case 2: z = z + 1;break;//north - case 3: z = z - 1;break;//south - case 4: x = x + 1;break;//east - case 5: x = x - 1;break;//west - } - TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntity) - { - list[i] = aEntity; - } - } - return list; - } - /** - * Only works for steam Power's boiler. Still needs recode to work for all things - * @param blockEntity - tile entity trading the liquid - * @param type - liquid type see chart for info - * @param rise - does the liquid rise up like a gas - * @return the remaining untraded liquid - */ - public static int shareLiquid(TileEntity blockEntity,Liquid type,boolean rise) - { - TileEntity[] connectedBlocks = getSourounding(blockEntity); - ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; - int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); - int ammountStored = blockMachine.getStoredLiquid(type); - int tankCount = 1; - boolean bottom = false; - TileEntity firstEntity = null; - TileEntity secondEntity = null; - if(rise) - { - firstEntity = connectedBlocks[1]; - secondEntity = connectedBlocks[0]; - } - else - { - firstEntity = connectedBlocks[0]; - secondEntity = connectedBlocks[1]; - } - //checks wether or not the block bellow it is a tank to move liquid too - if(firstEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); - //checks if that tank has room to get liquid. - - if(bWater < bMax) - { - int tradeVol = 0; - int emptyVol = Math.max( bMax - bWater,0); - tradeVol = Math.min(emptyVol, ammountStored); - int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); - ammountStored = ammountStored + rejected - tradeVol; - wSum -= tradeVol; - } - else - { - bottom = true; - } - } - else - { - //there was no tank bellow this tank - bottom = true; - } - //if this is the bottom tank or bottom tank is full. Update average water ammount. - if(bottom) - { - //get average water around center tank - for(int i = 2; i<6;i++) - { - TileEntity entityA = connectedBlocks[i]; - if(entityA instanceof ILiquidConsumer) - { - //if is a tank add to the sum - wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); - tankCount += 1; - } - } - - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - for(int i = 2; i<6;i++) - { - int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average - int tradeSum = 0; - TileEntity entity = connectedBlocks[i]; - if(entity instanceof ILiquidConsumer) - { - int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); - if(targetW < average) - { - tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank - int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back - ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade - } - } - } - - if(secondEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); - if(bottom && ammountStored > 0) - { - if(bWater < bMax) - { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, ammountStored); - int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; - ammountStored =rejectedS + ammountStored - tradeVolS; - wSum -= tradeVolS; - } - } - } - } - return ammountStored; - } - /** - * - * @param entity - entity in question - * @return 1-4 if corner 0 if not a corner - * you have to figure out which is which depending on what your using this for - * 1 should be north east 2 south east - */ - public static int corner(TileEntity entity) - { - TileEntity[] en = getSourounding(entity); - if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) - { - return 1; - } - if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) - { - return 2; - } - if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) - { - return 3; - } - if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) - { - return 4; - } - - return 0; - - } -} diff --git a/src/common/steampower/TradeHelper.java b/src/common/steampower/TradeHelper.java deleted file mode 100644 index f7ca41d8..00000000 --- a/src/common/steampower/TradeHelper.java +++ /dev/null @@ -1,175 +0,0 @@ -package steampower; - -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.Liquid; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; - -public class TradeHelper { -/** - * - * @param entity - entity at center of search - * @return an Array containing found entities and nulls of nonEntities - */ - public static TileEntity[] getSourounding(TileEntity entity) - { - TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; - for(int i =0; i< 6;i++) - { - int x = entity.xCoord; - int y = entity.yCoord; - int z = entity.zCoord; - - switch(i) - { - case 0: y = y - 1;break;//down - case 1: y = y + 1;break;//up - case 2: z = z + 1;break;//north - case 3: z = z - 1;break;//south - case 4: x = x + 1;break;//east - case 5: x = x - 1;break;//west - } - TileEntity aEntity = entity.worldObj.getBlockTileEntity(x, y, z); - if(aEntity instanceof TileEntity) - { - list[i] = aEntity; - } - } - return list; - } - /** - * Only works for steam Power's boiler. Still needs recode to work for all things - * @param blockEntity - tile entity trading the liquid - * @param type - liquid type see chart for info - * @param rise - does the liquid rise up like a gas - * @return the remaining untraded liquid - */ - public static int shareLiquid(TileEntity blockEntity,Liquid type,boolean rise) - { - TileEntity[] connectedBlocks = getSourounding(blockEntity); - ILiquidConsumer blockMachine = (ILiquidConsumer) blockEntity; - int wSum = ((ILiquidConsumer)blockEntity).getStoredLiquid(type); - int ammountStored = blockMachine.getStoredLiquid(type); - int tankCount = 1; - boolean bottom = false; - TileEntity firstEntity = null; - TileEntity secondEntity = null; - if(rise) - { - firstEntity = connectedBlocks[1]; - secondEntity = connectedBlocks[0]; - } - else - { - firstEntity = connectedBlocks[0]; - secondEntity = connectedBlocks[1]; - } - //checks wether or not the block bellow it is a tank to move liquid too - if(firstEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) firstEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) firstEntity).getLiquidCapacity(type); - //checks if that tank has room to get liquid. - - if(bWater < bMax) - { - int tradeVol = 0; - int emptyVol = Math.max( bMax - bWater,0); - tradeVol = Math.min(emptyVol, ammountStored); - int rejected = ((ILiquidConsumer) firstEntity).onReceiveLiquid(type, tradeVol, ForgeDirection.getOrientation(1)); - ammountStored = ammountStored + rejected - tradeVol; - wSum -= tradeVol; - } - else - { - bottom = true; - } - } - else - { - //there was no tank bellow this tank - bottom = true; - } - //if this is the bottom tank or bottom tank is full. Update average water ammount. - if(bottom) - { - //get average water around center tank - for(int i = 2; i<6;i++) - { - TileEntity entityA = connectedBlocks[i]; - if(entityA instanceof ILiquidConsumer) - { - //if is a tank add to the sum - wSum += ((ILiquidConsumer) entityA).getStoredLiquid(type); - tankCount += 1; - } - } - - //if this is the bottom tank or bottom tank is full then trade liquid with tanks around it. - for(int i = 2; i<6;i++) - { - int average = Math.round((float)wSum / (float)tankCount);// takes the sum and makes it an average - int tradeSum = 0; - TileEntity entity = connectedBlocks[i]; - if(entity instanceof ILiquidConsumer) - { - int targetW = ((ILiquidConsumer) entity).getStoredLiquid(type); - if(targetW < average) - { - tradeSum = Math.min(average, ammountStored); //gets the ammount to give to the target tank - int rejectedAm = ((ILiquidConsumer) entity).onReceiveLiquid(type, tradeSum, ForgeDirection.getOrientation(i)); //send that ammount with safty incase some comes back - ammountStored =rejectedAm + ammountStored - tradeSum; //counts up current water sum after trade - } - } - } - - if(secondEntity instanceof ILiquidConsumer) - { - int bWater = ((ILiquidConsumer) secondEntity).getStoredLiquid(type); - int bMax = ((ILiquidConsumer) secondEntity).getLiquidCapacity(type); - if(bottom && ammountStored > 0) - { - if(bWater < bMax) - { - int emptyVolS = Math.max( bMax - bWater,0); - int tradeVolS = Math.min(emptyVolS, ammountStored); - int rejectedS = ((ILiquidConsumer) secondEntity).onReceiveLiquid(type, tradeVolS, ForgeDirection.getOrientation(0));; - ammountStored =rejectedS + ammountStored - tradeVolS; - wSum -= tradeVolS; - } - } - } - } - return ammountStored; - } - /** - * - * @param entity - entity in question - * @return 1-4 if corner 0 if not a corner - * you have to figure out which is which depending on what your using this for - * 1 should be north east 2 south east - */ - public static int corner(TileEntity entity) - { - TileEntity[] en = getSourounding(entity); - if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) - { - return 1; - } - if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) - { - return 2; - } - if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) - { - return 3; - } - if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) - { - return 4; - } - - return 0; - - } -} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index bb22ac7a..c0c48107 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -12,13 +12,12 @@ import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import steampower.SteamPowerMain; import steampower.TileEntityMachine; -import steampower.TradeHelper; -import steampower.burner.TileEntityFireBox; import universalelectricity.network.IPacketReceiver; import basicpipes.pipes.api.IHeatProducer; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; import com.google.common.io.ByteArrayDataInput; @@ -130,7 +129,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv { count = 0; //update/resets connection list - TileEntity[] entityList = TradeHelper.getSourounding(this); + TileEntity[] entityList = MHelper.getSourounding(this); tankCount = 0; for(int c = 0; c< 6; c++) { @@ -168,8 +167,8 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv emptyBuckets(); //adds water from container slot - this.waterStored = TradeHelper.shareLiquid(this, Liquid.WATER, false); - this.steamStored = TradeHelper.shareLiquid(this, Liquid.STEAM, true); + this.waterStored = MHelper.shareLiquid(this, Liquid.WATER, this.waterStored); + this.steamStored = MHelper.shareLiquid(this, Liquid.STEAM, this.steamStored); if(waterStored > 0 && hullHeated && heatStored > heatNeeded) diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index ee556fdb..6389dd84 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -8,15 +8,13 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import steampower.SteamPowerMain; import steampower.TileEntityMachine; -import steampower.TradeHelper; import steampower.boiler.TileEntityBoiler; import universalelectricity.network.IPacketReceiver; - import basicpipes.pipes.api.IHeatProducer; +import basicpipes.pipes.api.MHelper; import com.google.common.io.ByteArrayDataInput; @@ -144,7 +142,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei public void addConnection() { connectedUnits = 0; - TileEntity[] aEntity = TradeHelper.getSourounding(this); + TileEntity[] aEntity = MHelper.getSourounding(this); for(int i = 0; i<6; i++) { diff --git a/src/common/steampower/mcmod.info b/src/common/steampower/mcmod.info index 7a4a675c..bba7821a 100644 --- a/src/common/steampower/mcmod.info +++ b/src/common/steampower/mcmod.info @@ -3,7 +3,7 @@ "modid": "SteamPower", "name": "Steam Power", "description": "Basic coal fired power plant generator pack for UE", - "version": "r5", + "version": "1.8", "mcversion": "1.3.2", "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", "updateUrl": "", diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java b/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java new file mode 100644 index 00000000..8375b443 --- /dev/null +++ b/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java @@ -0,0 +1,427 @@ +// Date: 10/8/2012 7:31:40 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes.renderTank; + +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.TileEntityPipe; +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class ModelLiquidTank extends ModelBase +{ + //fields + ModelRenderer Mid; + ModelRenderer Corner; + ModelRenderer Corner2; + ModelRenderer Corner3; + ModelRenderer Corner4; + ModelRenderer C8; + ModelRenderer C7; + ModelRenderer C6; + ModelRenderer C5; + ModelRenderer C4; + ModelRenderer C; + ModelRenderer C3; + ModelRenderer C2; + ModelRenderer GuageT; + ModelRenderer GuageB; + ModelRenderer Guage; + ModelRenderer GuageR; + ModelRenderer GuageGlass; + ModelRenderer GuageL; + + ModelRenderer GuageT2; + ModelRenderer GuageB2; + ModelRenderer Guage2; + ModelRenderer GuageR2; + ModelRenderer GuageGlass2; + ModelRenderer GuageL2; + + ModelRenderer GuageT3; + ModelRenderer GuageB3; + ModelRenderer Guage3; + ModelRenderer GuageR3; + ModelRenderer GuageGlass3; + ModelRenderer GuageL3; + + ModelRenderer GuageT4; + ModelRenderer GuageB4; + ModelRenderer Guage4; + ModelRenderer GuageR4; + ModelRenderer GuageGlass4; + ModelRenderer GuageL4; + + ModelRenderer CCBottom; + ModelRenderer CCRight; + ModelRenderer CCLeft; + ModelRenderer CCFront; + ModelRenderer CCBack; + ModelRenderer CCTop; + + public ModelLiquidTank() + { + textureWidth = 128; + textureHeight = 128; + + Mid = new ModelRenderer(this, 0, 50); + Mid.addBox(-6F, 0F, -6F, 12, 14, 12); + Mid.setRotationPoint(0F, 9F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Corner = new ModelRenderer(this, 0, 30); + Corner.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner.setRotationPoint(-7F, 8F, 7F); + Corner.setTextureSize(128, 128); + Corner.mirror = true; + setRotation(Corner, 0F, 0F, 0F); + Corner2 = new ModelRenderer(this, 0, 30); + Corner2.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner2.setRotationPoint(-7F, 8F, -7F); + Corner2.setTextureSize(128, 128); + Corner2.mirror = true; + setRotation(Corner2, 0F, 0F, 0F); + Corner3 = new ModelRenderer(this, 0, 30); + Corner3.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner3.setRotationPoint(7F, 8F, -7F); + Corner3.setTextureSize(128, 128); + Corner3.mirror = true; + setRotation(Corner3, 0F, 0F, 0F); + Corner4 = new ModelRenderer(this, 0, 30); + Corner4.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner4.setRotationPoint(7F, 8F, 7F); + Corner4.setTextureSize(128, 128); + Corner4.mirror = true; + setRotation(Corner4, 0F, 0F, 0F); + C8 = new ModelRenderer(this, 9, 35); + C8.addBox(-1F, 0F, -1F, 2, 2, 12); + C8.setRotationPoint(6F, 22F, -5F); + C8.setTextureSize(128, 128); + C8.mirror = true; + setRotation(C8, 0F, 0F, 0F); + C7 = new ModelRenderer(this, 9, 35); + C7.addBox(-1F, 0F, -1F, 2, 2, 12); + C7.setRotationPoint(-6F, 8F, -5F); + C7.setTextureSize(128, 128); + C7.mirror = true; + setRotation(C7, 0F, 0F, 0F); + C6 = new ModelRenderer(this, 9, 35); + C6.addBox(-1F, 0F, -1F, 2, 2, 12); + C6.setRotationPoint(6F, 8F, -5F); + C6.setTextureSize(128, 128); + C6.mirror = true; + setRotation(C6, 0F, 0F, 0F); + C5 = new ModelRenderer(this, 9, 30); + C5.addBox(-1F, 0F, -1F, 12, 2, 2); + C5.setRotationPoint(-5F, 8F, 6F); + C5.setTextureSize(128, 128); + C5.mirror = true; + setRotation(C5, 0F, 0F, 0F); + C4 = new ModelRenderer(this, 9, 35); + C4.addBox(-1F, 0F, -1F, 2, 2, 12); + C4.setRotationPoint(-6F, 22F, -5F); + C4.setTextureSize(128, 128); + C4.mirror = true; + setRotation(C4, 0F, 0F, 0F); + C = new ModelRenderer(this, 9, 30); + C.addBox(-1F, 0F, -1F, 12, 2, 2); + C.setRotationPoint(-5F, 22F, 6F); + C.setTextureSize(128, 128); + C.mirror = true; + setRotation(C, 0F, 0F, 0F); + C3 = new ModelRenderer(this, 9, 30); + C3.addBox(-1F, 0F, -1F, 12, 2, 2); + C3.setRotationPoint(-5F, 8F, -6F); + C3.setTextureSize(128, 128); + C3.mirror = true; + setRotation(C3, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 9, 30); + C2.addBox(-1F, 0F, -1F, 12, 2, 2); + C2.setRotationPoint(-5F, 22F, -6F); + C2.setTextureSize(128, 128); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + //G1-------------------------------------- + GuageT = new ModelRenderer(this, 54, 42); + GuageT.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT.setRotationPoint(0F, 12F, -8F); + GuageT.setTextureSize(128, 128); + GuageT.mirror = true; + setRotation(GuageT, 0F, 0F, 0F); + GuageB = new ModelRenderer(this, 54, 42); + GuageB.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB.setRotationPoint(0F, 12F, -8F); + GuageB.setTextureSize(128, 128); + GuageB.mirror = true; + setRotation(GuageB, 0F, 0F, 0F); + Guage = new ModelRenderer(this, 54, 32); + Guage.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage.setRotationPoint(0F, 12F, -7F); + Guage.setTextureSize(128, 128); + Guage.mirror = true; + setRotation(Guage, 0F, 0F, 0F); + GuageR = new ModelRenderer(this, 44, 32); + GuageR.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR.setRotationPoint(0F, 12F, -7F); + GuageR.setTextureSize(128, 128); + GuageR.mirror = true; + setRotation(GuageR, 0F, 0F, 0F); + GuageGlass = new ModelRenderer(this, 60, 32); + GuageGlass.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass.setRotationPoint(0F, 12F, -8F); + GuageGlass.setTextureSize(128, 128); + GuageGlass.mirror = true; + setRotation(GuageGlass, 0F, 0F, 0F); + GuageL = new ModelRenderer(this, 44, 32); + GuageL.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL.setRotationPoint(0F, 12F, -7F); + GuageL.setTextureSize(128, 128); + GuageL.mirror = true; + setRotation(GuageL, 0F, 0F, 0F); + //G2---------------------------------- + GuageT2 = new ModelRenderer(this, 54, 42); + GuageT2.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT2.setRotationPoint(-8F, 12F, 0F); + GuageT2.setTextureSize(128, 128); + GuageT2.mirror = true; + setRotation(GuageT2, 0F, 1.570796F, 0F); + GuageB2 = new ModelRenderer(this, 54, 42); + GuageB2.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB2.setRotationPoint(-8F, 12F, 0F); + GuageB2.setTextureSize(128, 128); + GuageB2.mirror = true; + setRotation(GuageB2, 0F, 1.570796F, 0F); + Guage2 = new ModelRenderer(this, 54, 32); + Guage2.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage2.setRotationPoint(-7F, 12F, 0F); + Guage2.setTextureSize(128, 128); + Guage2.mirror = true; + setRotation(Guage2, 0F, 1.570796F, 0F); + GuageR2 = new ModelRenderer(this, 44, 32); + GuageR2.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR2.setRotationPoint(-7F, 12F, 0F); + GuageR2.setTextureSize(128, 128); + GuageR2.mirror = true; + setRotation(GuageR2, 0F, 1.570796F, 0F); + GuageGlass2 = new ModelRenderer(this, 60, 32); + GuageGlass2.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass2.setRotationPoint(-8F, 12F, 0F); + GuageGlass2.setTextureSize(128, 128); + GuageGlass2.mirror = true; + setRotation(GuageGlass2, 0F, 1.570796F, 0F); + GuageL2 = new ModelRenderer(this, 44, 32); + GuageL2.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL2.setRotationPoint(-7F, 12F, 0F); + GuageL2.setTextureSize(128, 128); + GuageL2.mirror = true; + setRotation(GuageL2, 0F, 1.570796F, 0F); + //G3-------------------------------------- + GuageT3 = new ModelRenderer(this, 54, 42); + GuageT3.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT3.setRotationPoint(0F, 12F, 8F); + GuageT3.setTextureSize(128, 128); + GuageT3.mirror = true; + setRotation(GuageT3, 0F, 3.141593F, 0F); + GuageB3 = new ModelRenderer(this, 54, 42); + GuageB3.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB3.setRotationPoint(0F, 12F, 8F); + GuageB3.setTextureSize(128, 128); + GuageB3.mirror = true; + setRotation(GuageB3, 0F, 3.141593F, 0F); + Guage3 = new ModelRenderer(this, 54, 32); + Guage3.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage3.setRotationPoint(0F, 12F, 7F); + Guage3.setTextureSize(128, 128); + Guage3.mirror = true; + setRotation(Guage3, 0F, 3.141593F, 0F); + GuageR3 = new ModelRenderer(this, 44, 32); + GuageR3.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR3.setRotationPoint(0F, 12F, 7F); + GuageR3.setTextureSize(128, 128); + GuageR3.mirror = true; + setRotation(GuageR3, 0F, 3.141593F, 0F); + GuageGlass3 = new ModelRenderer(this, 60, 32); + GuageGlass3.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass3.setRotationPoint(0F, 12F, 8F); + GuageGlass3.setTextureSize(128, 128); + GuageGlass3.mirror = true; + setRotation(GuageGlass3, 0F, 3.141593F, 0F); + GuageL3 = new ModelRenderer(this, 44, 32); + GuageL3.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL3.setRotationPoint(0F, 12F, 7F); + GuageL3.setTextureSize(128, 128); + GuageL3.mirror = true; + setRotation(GuageL3, 0F, 3.141593F, 0F); + //G4------------------------------- + GuageT4 = new ModelRenderer(this, 54, 42); + GuageT4.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT4.setRotationPoint(8F, 12F, 0F); + GuageT4.setTextureSize(128, 128); + GuageT4.mirror = true; + setRotation(GuageT4, 0F, -1.570796F, 0F); + GuageB4 = new ModelRenderer(this, 54, 42); + GuageB4.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB4.setRotationPoint(8F, 12F, 0F); + GuageB4.setTextureSize(128, 128); + GuageB4.mirror = true; + setRotation(GuageB4, 0F, -1.570796F, 0F); + Guage4 = new ModelRenderer(this, 54, 32); + Guage4.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage4.setRotationPoint(7F, 12F, 0F); + Guage4.setTextureSize(128, 128); + Guage4.mirror = true; + setRotation(Guage4, 0F, -1.570796F, 0F); + GuageR4 = new ModelRenderer(this, 44, 32); + GuageR4.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR4.setRotationPoint(7F, 12F, 0F); + GuageR4.setTextureSize(128, 128); + GuageR4.mirror = true; + setRotation(GuageR4, 0F, -1.570796F, 0F); + GuageGlass4 = new ModelRenderer(this, 60, 32); + GuageGlass4.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass4.setRotationPoint(8F, 12F, 0F); + GuageGlass4.setTextureSize(128, 128); + GuageGlass4.mirror = true; + setRotation(GuageGlass4, 0F, -1.570796F, 0F); + GuageL4 = new ModelRenderer(this, 44, 32); + GuageL4.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL4.setRotationPoint(7F, 12F, 0F); + GuageL4.setTextureSize(128, 128); + GuageL4.mirror = true; + setRotation(GuageL4, 0F, -1.570796F, 0F); + //Pipe Connectors + CCBottom = new ModelRenderer(this, 0, 0); + CCBottom.addBox(-3F, -9F, -3F, 6, 1, 6); + CCBottom.setRotationPoint(0F, 15F, 0F); + CCBottom.setTextureSize(128, 128); + CCBottom.mirror = true; + setRotation(CCBottom, 3.141593F, 0F, 0F); + CCRight = new ModelRenderer(this, 0, 0); + CCRight.addBox(-3F, -8F, -3F, 6, 2, 6); + CCRight.setRotationPoint(0F, 15F, 0F); + CCRight.setTextureSize(128, 128); + CCRight.mirror = true; + setRotation(CCRight, 0F, 0F, -1.570796F); + CCLeft = new ModelRenderer(this, 0, 0); + CCLeft.addBox(-3F, -8F, -3F, 6, 2, 6); + CCLeft.setRotationPoint(0F, 15F, 0F); + CCLeft.setTextureSize(128, 128); + CCLeft.mirror = true; + setRotation(CCLeft, 0F, 0F, 1.570796F); + CCFront = new ModelRenderer(this, 0, 0); + CCFront.addBox(-3F, -8F, -3F, 6, 2, 6); + CCFront.setRotationPoint(0F, 15F, 0F); + CCFront.setTextureSize(128, 128); + CCFront.mirror = true; + setRotation(CCFront, 1.570796F, 0F, 0F); + CCBack = new ModelRenderer(this, 0, 0); + CCBack.addBox(-3F, -8F, -3F, 6, 2, 6); + CCBack.setRotationPoint(0F, 15F, 0F); + CCBack.setTextureSize(128, 128); + CCBack.mirror = true; + setRotation(CCBack, -1.570796F, 0F, 0F); + CCTop = new ModelRenderer(this, 0, 0); + CCTop.addBox(-3F, -7F, -3F, 6, 1, 6); + CCTop.setRotationPoint(0F, 15F, 0F); + CCTop.setTextureSize(128, 128); + CCTop.mirror = true; + setRotation(CCTop, 0F, 0F, 0F); + } + + public void renderMain(TileEntityLTank te ,float f5) + { + //render regardless of sides + Mid.render(f5); + Corner.render(f5); + Corner2.render(f5); + Corner3.render(f5); + Corner4.render(f5); + C8.render(f5); + C7.render(f5); + C6.render(f5); + C5.render(f5); + C4.render(f5); + C.render(f5); + C3.render(f5); + C2.render(f5); + CCTop.render(f5);CCBottom.render(f5); + //Front + if(te.cc[2] instanceof TileEntityPipe) + { + CCFront.render(f5); + }else + { + GuageT.render(f5); + GuageB.render(f5); + Guage.render(f5); + GuageR.render(f5); + GuageGlass.render(f5); + GuageL.render(f5); + } + //back + if(te.cc[3] instanceof TileEntityPipe) + { + CCBack.render(f5); + }else + { + GuageT3.render(f5); + Guage3.render(f5); + Guage3.render(f5); + GuageR3.render(f5); + GuageGlass3.render(f5); + GuageL3.render(f5); + } + //right + if(te.cc[4] instanceof TileEntityPipe) + { + CCRight.render(f5); + }else + { + GuageT4.render(f5); + Guage4.render(f5); + Guage4.render(f5); + GuageR4.render(f5); + GuageGlass4.render(f5); + GuageL4.render(f5); + } + //left + if(te.cc[5] instanceof TileEntityPipe) + { + CCLeft.render(f5); + }else + { + GuageT2.render(f5); + Guage2.render(f5); + Guage2.render(f5); + GuageR2.render(f5); + GuageGlass2.render(f5); + GuageL2.render(f5); + + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/basicpipes/renderTank/RenderLTank.java b/src/minecraft/basicpipes/renderTank/RenderLTank.java new file mode 100644 index 00000000..31897a9b --- /dev/null +++ b/src/minecraft/basicpipes/renderTank/RenderLTank.java @@ -0,0 +1,51 @@ +package basicpipes.renderTank; + +import net.minecraft.src.ModelBase; +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.BasicPipesMain; +import basicpipes.ModelLargePipe; +import basicpipes.ModelPipe; +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.pipes.api.Liquid; + + +public class RenderLTank extends TileEntitySpecialRenderer +{ + private Liquid type = Liquid.DEFUALT; + private ModelLiquidTank model; + private int pos = 0; + + public RenderLTank() + { + model = new ModelLiquidTank(); + } + + public void renderAModelAt(TileEntityLTank te, double d, double d1, double d2, float f) + { + type = te.getType(); + pos = Math.min(te.getStoredLiquid(type),4); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + + switch(type.ordinal()) + { + //case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTank"+pos+".png"); break; + } + model.renderMain(te, 0.0625F); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityLTank)tileEntity, var2, var4, var6, var8); + } + +} \ No newline at end of file diff --git a/src/minecraft/steampower/GUISteamPiston.java b/src/minecraft/steampower/GUISteamPiston.java index 3d220089..9ec3949c 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -34,8 +34,6 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; String displayText = ""; String displayText2 = ""; String displayText3 = ""; - String displayText4 = ""; - String displayText5 = ""; /** if(tileEntity.connectedElectricUnit == null) { @@ -57,18 +55,13 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; { //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); displayText = "ForceOut: "+tileEntity.force+"N"; - } displayText2 = "water" + "-" + tileEntity.water; displayText3 = "steam" + "-" + tileEntity.steam; - - displayText4 = "Db:PacketsReceived " + "=" + tileEntity.pCount; - //displayText5 = "Debug:bforce" + "=" + tileEntity.bForce; + } 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/RenderBoiler.java b/src/minecraft/steampower/RenderBoiler.java index 1af554d7..f837f16c 100644 --- a/src/minecraft/steampower/RenderBoiler.java +++ b/src/minecraft/steampower/RenderBoiler.java @@ -6,6 +6,7 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; import steampower.boiler.TileEntityBoiler; +import basicpipes.pipes.api.MHelper; public class RenderBoiler extends TileEntitySpecialRenderer { @@ -36,14 +37,14 @@ public class RenderBoiler extends TileEntitySpecialRenderer model.generalRender(0.0625F); } else - if(TradeHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) + if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) { bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); model2.renderBlock(0.0625F); } else { - int corner = TradeHelper.corner(tileEntity); + int corner = MHelper.corner(tileEntity); bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); switch(corner) { diff --git a/src/minecraft/textures/tanks/GUITurret.png b/src/minecraft/textures/tanks/GUITurret.png new file mode 100644 index 0000000000000000000000000000000000000000..ab367dbb75ab11df7cd8c85ffda82f85c34d06b1 GIT binary patch literal 1208 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn`1yx4R3& ze-K=-cll(X2xoyuWHAE+-$4*&+%YlxEl`lX#M9T6{SFr!2d|*`Kf68#1{MoX7srr_ zTW{|y%oh%nIqSTipz$@2JPTFh}rWl57gqxtsAJC~{qRDxx_4LC$N zSQwp~lujHjXfAo|^}Fir?tSOo6Td}Qysj-SZ;luIw}Pp}Iq?6&`|tH_pZxh_^Sk-Z zO8tMUivC`nxO%_Fs{P6zzFqv?n*Js3PU(dG%nu$d4_y&+y=pI77ilZiX#7-@E_szsKlsYFlk$yETIYC>^jc2%s_6UHDPYcxn^R;)@!; zX3t>G)NBcjjb$o9(3Z9tr1Q;S)76LuTE^zpmba4`p`$QIZ$Z#-lG$;e(#3)61 zg5}Bc3vGL)8x>s5m?~Mo(UhRstIwFrYNp<5xjDKqGMM3&yaP{k{@KpC$=Vy-(P9xE zRv?A|gF7$?Qci>=6i=G(T%E(ZtT>1D8_+tSTT;q@pU-;JBG9!+W7W%&R|Sffts9aI xBrJHX4s##4I>YwBsfiaZp4S6rdD?)S#`sn4)7Ymkf4c@`fv2mV%Q~loCIA9jjS2t& literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/tanks/LiquidTank.png b/src/minecraft/textures/tanks/LiquidTank.png new file mode 100644 index 0000000000000000000000000000000000000000..446b443d90dab18984ac1d9f993f26d74c6815c4 GIT binary patch literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ%^A}@|=t^u0z%+tj&q~g}w zJBE3;4Mf-;95=c9B$`9hYU%fkcDVz`PcvF=`MzSgLYw}An|HdxV$WO)TjIc^qq1#Z zKBvOz4#mGUOEfQOveoSPedC+#|G&?}-~ZfwSC3Wv`M0Iw^SAZi4VW^!wrJ0~?C?)c zcXzNbH83RbT(B2-W4rGBe!0w78UOE|{r%x>0;6cc3%B{NYk*FKfpZV<&-%M--R+M5 zr*{JlI)Cl+^x|W)c7^PDUvH!zeRx_N<1XF(Z$4PAV{zWyeoX3?sY%M2yhWdOe*azT z;$q_a`HgL8Y5k|2#rKwM%Y9#^@8T6L`k*W1YVGXLRz-30dH>FLWJKrwyYhDF*Ryx0 z?T=b}$~!k+b;YXo!}tB$1q>`1f~V>&p7QVd9fet+tyaA{csBl(!iOD98xAnc>0=B4 z!x^8W58Tf9Ia_37=bZljWgcp?rwcZ`+jG$SyhRD)3Wn*6tXEz!IlE$7yxP)JDpS1* zp2jxJUw)ajU>%pi*TRDD6F=SfzP~k{y_>tCo0r>c=hyn5e@d^pir%lU37*KqB*?(R z!05mr0H+#0dlsL6d;aWZW>HiL7!MY581#eCzpM**=D*|M_74L|db;|#taD0e0ssrv B04@Lk literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/tanks/LiquidTank0.png b/src/minecraft/textures/tanks/LiquidTank0.png new file mode 100644 index 0000000000000000000000000000000000000000..821f9a02880771dff7838456c0ec2855b8084c30 GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$7l6CE^-+-oE@^o&e&W zk8SK+c=Yp|rCC=0KL5U3@h@$2XX9*R%dd~J_O5AHy8EX2apk<-lgwWoR25)gVMuOx z)|l|Pu=d~Ij#~HM{rvt1w>JxhG;EWuUH6$0=rky>Xumt_ug&?@0{^C$ufKMB@z*~u z=dAmsCz}6jKF{fE8#abFRGs#>uKA|zc>CSLb+^iRx4zsoTch^f+cIe}a#eqN;`zEDT}<+FAHr=@4*XWfaqACv#{@=KGwA*P{C zIxT2Ra01PEQL?4*C<EF2a){Q!x#f&?^ZdjQ?9_6&fBfKA_fxU= z>v_-fxrsA~OS`Qpe_dZ)D_;_L^!fGnt`va|1_cHV2BroCHOF73Dz83cp6m)V38*qy daADHoU)fcY=Y2>Jo>B>t^mO%eS?83{1OV7Z?H>RD literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/tanks/LiquidTank1.png b/src/minecraft/textures/tanks/LiquidTank1.png new file mode 100644 index 0000000000000000000000000000000000000000..4d427d6a945b2b38807a20ed480aa3a816c99162 GIT binary patch literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$7T)!-jXaG(5zGJdmphH9f_;=iD1DgV}zbF}pV{Z87`! zJy*%HPw3|U`#tG4o`#R^p8cJd@%z2~_vYXE+i#1^nfvja4;}6*c~WvFDTe;_P=P!&b@!l!}AZ{J;OP3?0mtm zwKdoJ8r{+yt-~Yeg(?9%qTQ<9CbMfCxv%k;YU8iyCter*N^{v{K z%hts(F*-09ut~^q@X1|&9^YqDy5;}7SG7M%H#Be+ym6cVss`vt81Q@ea^~M%>vnhi z?=Qcf|8Ab``S^2^*{>Eqa;~3Tc~ffJ7p@EWKU3S!*Qr`;tIk-Hyt}PWa`WsJHSh1{ zi3!TSG(S&eQ;W`C6H0iBXsTVIkQjf)HJtOT6Fmtf9(9|`*-qx zuD-fz&sE;grd3h)d#4!~7%~J;)muE}-}O5Rvx*--)2|fR5ziPA!?4fwT)e#Y!F=b2 z)Uby4{p;u7d8^9yU<1ia&q8I=dQixG)GXurL6F4o>;0pS9g?Z=TJr#lY0SpuoU^M!~`mgFdjjiebT{ V1y$vLce8*bJzf1=);T3K0RW@L{lNeL literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/tanks/LiquidTank3.png b/src/minecraft/textures/tanks/LiquidTank3.png new file mode 100644 index 0000000000000000000000000000000000000000..dec251e778d615c39b4322b14e74d15da86f8856 GIT binary patch literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$-dT+&xt$?Py_jGX#skrs_ zj$__s2NAXh=1bqqiH>kxbI3N~B6ETAx{J&k8mb?JUeyr)V71x#L7vsp!nvoWCAA*8 zzkTBq3$G_XpZ6MnQ#r~gpJ!L*{QLi(zqS>B%69u6yt%XP_0jgTwe})QH-7(iz4Wcm zyp`I^9T)@{Vwid2Ir!e0Ka1}(`I`0r?$zHPUMDb$J_vA@e_a7|Bnif&>bKb?`W; zpWP#!D*F=>mH?lx2BPjOaUdIluv>FVdQ I&MBb@0DJWUh5!Hn literal 0 HcmV?d00001 diff --git a/src/minecraft/textures/tanks/LiquidTank4.png b/src/minecraft/textures/tanks/LiquidTank4.png new file mode 100644 index 0000000000000000000000000000000000000000..f11129168a716278165b1cc3ad15834caf45e91a GIT binary patch literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$-a;MKZPXn6r%+tj&q~g}w zJBE3;4Mf-;95=c9B$`9hYU%fkcDVz`PcvF=`MzSgLYw}An|HdxV$WO)TjIc^qq1#Z zKBvOz4#mGUOEfQOveoSPedC+#|G&?}-~ZfwSC3Wv`M0Iw^SAZi4VW^!wrJ0~?C?)c zcXzNbH83RbT(B2-W4rGBe!0w78UOE|{r%x>0;6cc3%B{NYk*FKfpZV<&-%M--R+M5 zr*{JlI)Cl+^x|W)c7^PDUvH!zeRx_N<1XF(Z$4PAV{zWyeoX3?sY%M2yhWdOe*azT z;$q_a`HgL8Y5k|2#rKwM%Y9#^@8T6L`k*W1YVGXLRz-30dH>FLWJKrwyYhDF*Ryx0 z?T=b}$~!k+b;YXo!}tB$1q>`1f~V>&p7QVd9fet+tyaA{csBl(!iOD98xAnc>0=B4 z!x^8W58Tf9Ia_37=bZljWgcp?rwcZ`+jG$SyhRD)3Wn*6tXEz!IlE$7yxP)JDpS1* zp2jxJUw)ajU>%pi*TRDD6F=SfzP~k{y_>tCo0r>c=hyn5e@d^pir%lU37*KqB*?(R z!05mr0H+#0dlsL6d;aWZW>HiL7!MY581#eCzpM**=D*|M_74L|db;|#taD0e0su5Y B073u& literal 0 HcmV?d00001 From 8de148650982ba5e20a977aa4af6cd846e1abed4 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 8 Oct 2012 23:34:04 -0400 Subject: [PATCH 098/115] Finished liquid tank render and most code Still have bugs to work out like liquid trading and glass face not rendering on the model; However, the render looks nice and the corner look better than the old ones. --- src/common/basicpipes/BasicPipesMain.java | 11 ++ src/common/basicpipes/LTanks/ItemTank.java | 130 +++++++++++++++++ .../basicpipes/LTanks/TileEntityLTank.java | 4 + .../basicpipes/conductors/ItemGuage.java | 14 ++ .../basicpipes/machines/BlockMachine.java | 13 +- src/minecraft/basicpipes/PipeClientProxy.java | 3 + .../renderTank/ModelLiquidTankCorner.java | 138 ++++++++++++++++++ .../basicpipes/renderTank/RenderLTank.java | 22 ++- src/minecraft/textures/Items.png | Bin 30215 -> 29075 bytes .../textures/tanks/LiquidTankCorner.png | Bin 0 -> 446 bytes 10 files changed, 326 insertions(+), 9 deletions(-) create mode 100644 src/common/basicpipes/LTanks/ItemTank.java create mode 100644 src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java create mode 100644 src/minecraft/textures/tanks/LiquidTankCorner.png diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 22a796c9..d8ea69c4 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -7,6 +7,8 @@ import net.minecraft.src.ItemStack; import net.minecraftforge.common.Configuration; import universalelectricity.BasicComponents; import universalelectricity.network.PacketManager; +import basicpipes.LTanks.ItemTank; +import basicpipes.LTanks.TileEntityLTank; import basicpipes.conductors.BlockPipe; import basicpipes.conductors.BlockRod; import basicpipes.conductors.ItemGuage; @@ -44,6 +46,7 @@ public class BasicPipesMain{ private static int ppipeID; public static int machineID; private static int toolID; + private static int tankID; public static int valveID; public static int rodID; public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); @@ -52,6 +55,7 @@ public class BasicPipesMain{ public static Block rod = new BlockRod(rodID); public static Item parts = new ItemParts(partID); public static Item itemPipes = new ItemPipe(ppipeID); + public static Item itemTank = new ItemTank(tankID); public static Item gauge = new ItemGuage(toolID); public static String channel = "Pipes"; @@ -69,6 +73,7 @@ public class BasicPipesMain{ partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); toolID = Integer.parseInt(config.getOrCreateIntProperty("ToolID", Configuration.CATEGORY_ITEM, 23024).value); + tankID = Integer.parseInt(config.getOrCreateIntProperty("tankID", Configuration.CATEGORY_ITEM, 23025).value); config.save(); return pipeID; } @@ -88,14 +93,20 @@ public class BasicPipesMain{ GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); + GameRegistry.registerTileEntity(TileEntityLTank.class, "ltank"); //Names and lang stuff //Pipe Names for(int i =0; i < Liquid.values().length;i++) { LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), Liquid.getLiquid(i).lName+" Pipe"); } + for(int i =0; i < Liquid.values().length;i++) + { + LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), Liquid.getLiquid(i).lName+" Tank"); + } //Pump LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); + LanguageRegistry.addName((new ItemStack(machine, 1, 4)), "WaterCondensor"); LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); //Tools LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); diff --git a/src/common/basicpipes/LTanks/ItemTank.java b/src/common/basicpipes/LTanks/ItemTank.java new file mode 100644 index 00000000..baf6f196 --- /dev/null +++ b/src/common/basicpipes/LTanks/ItemTank.java @@ -0,0 +1,130 @@ +package basicpipes.LTanks; + +import java.util.List; + +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.Liquid; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemTank extends Item +{ + int index = 64;//64 + 2 rows alloted to pipes + private int spawnID; + + public ItemTank(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("tank"); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Tank" : "unknown"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < Liquid.values().length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Pipes"; + } + @Override + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.machineID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,5)) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityLTank) + { + TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; + Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + +} \ No newline at end of file diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java index a5547fb3..c9245978 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -193,5 +193,9 @@ public void handlePacketData(NetworkManager network, System.out.print("Fail reading data for Storage tank \n"); } +} +public void setType(Liquid dm) { + this.type = dm; + } } diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index 991183b1..3a89239f 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -6,6 +6,7 @@ import java.util.List; import steampower.turbine.TileEntitySteamPiston; import basicpipes.BasicPipesMain; +import basicpipes.LTanks.TileEntityLTank; import basicpipes.pipes.api.IMechanical; import basicpipes.pipes.api.Liquid; @@ -69,6 +70,19 @@ public class ItemGuage extends Item player.sendChatToPlayer(print); return true; } + if(blockEntity instanceof TileEntityLTank) + { + TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; + Liquid type = pipeEntity.getType(); + int steam = pipeEntity.getStoredLiquid(type); + String typeName = type.lName; + String print = "Error"; + + print = typeName +" " + steam; + + player.sendChatToPlayer(print); + return true; + } if(blockEntity instanceof IMechanical) { IMechanical rod = (IMechanical) blockEntity; diff --git a/src/common/basicpipes/machines/BlockMachine.java b/src/common/basicpipes/machines/BlockMachine.java index 035b1d0a..729a0eb9 100644 --- a/src/common/basicpipes/machines/BlockMachine.java +++ b/src/common/basicpipes/machines/BlockMachine.java @@ -9,6 +9,7 @@ import net.minecraft.src.TileEntity; import net.minecraft.src.World; import basicpipes.BasicPipesMain; import basicpipes.ItemRenderHelper; +import basicpipes.LTanks.TileEntityLTank; public class BlockMachine extends BlockContainer { @@ -46,11 +47,7 @@ public class BlockMachine extends BlockContainer { return 0; } - if(meta > 3 && meta < 8) - { - return 4; - } - return 0; + return meta; } @Override public TileEntity createNewTileEntity(World var1,int meta) { @@ -59,13 +56,13 @@ public class BlockMachine extends BlockContainer { return new TileEntityPump(); } - if(meta > 3 && meta < 8) + if(meta == 4) { return new TileEntityCondenser(); } - if(meta > 7 && meta < 12) + if(meta == 5) { - return new TileEntityValve(); + return new TileEntityLTank(); } return null; } diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/src/minecraft/basicpipes/PipeClientProxy.java index 74984883..2f737a87 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/src/minecraft/basicpipes/PipeClientProxy.java @@ -2,9 +2,11 @@ package basicpipes; import steampower.SteamPowerMain; import basicpipes.PipeProxy; +import basicpipes.LTanks.TileEntityLTank; import basicpipes.conductors.TileEntityPipe; import basicpipes.conductors.TileEntityRod; import basicpipes.machines.TileEntityPump; +import basicpipes.renderTank.RenderLTank; import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; @@ -27,5 +29,6 @@ public class PipeClientProxy extends PipeProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPump.class, new RenderPump()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLTank.class, new RenderLTank()); } } diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java b/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java new file mode 100644 index 00000000..199fc650 --- /dev/null +++ b/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java @@ -0,0 +1,138 @@ +package basicpipes.renderTank; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelLiquidTankCorner extends ModelBase +{ + //fields + ModelRenderer sOne; + ModelRenderer sTwo; + ModelRenderer d7; + ModelRenderer d5; + ModelRenderer d3; + ModelRenderer d4; + ModelRenderer d1; + ModelRenderer d6; + ModelRenderer d2; + ModelRenderer d8; + ModelRenderer d9; + ModelRenderer d10; + ModelRenderer face; + + public ModelLiquidTankCorner() + { + textureWidth = 128; + textureHeight = 128; + + sOne = new ModelRenderer(this, 0, 30); + sOne.addBox(-1F, 0F, -1F, 2, 16, 2); + sOne.setRotationPoint(-7F, 8F, 7F); + sOne.setTextureSize(128, 128); + sOne.mirror = true; + setRotation(sOne, 0F, 0F, 0F); + sTwo = new ModelRenderer(this, 0, 30); + sTwo.addBox(-1F, 0F, -1F, 2, 16, 2); + sTwo.setRotationPoint(-7F, 8F, -7F); + sTwo.setTextureSize(128, 128); + sTwo.mirror = true; + setRotation(sTwo, 0F, 0F, 0F); + d7 = new ModelRenderer(this, 43, 2); + d7.addBox(-1F, 0F, -1F, 2, 16, 12); + d7.setRotationPoint(-7F, 8F, -5F); + d7.setTextureSize(128, 128); + d7.mirror = true; + setRotation(d7, 0F, 0F, 0F); + d5 = new ModelRenderer(this, 9, 12); + d5.addBox(-1F, 0F, -1F, 14, 16, 2); + d5.setRotationPoint(-5F, 8F, 7F); + d5.setTextureSize(128, 128); + d5.mirror = true; + setRotation(d5, 0F, 0F, 0F); + d3 = new ModelRenderer(this, 9, 67); + d3.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); + d3.setRotationPoint(-6F, 22F, -6F); + d3.setTextureSize(128, 128); + d3.mirror = true; + setRotation(d3, 0F, -0.7853982F, 0F); + d4 = new ModelRenderer(this, 9, 88); + d4.addBox(0F, 0F, -9F, 5, 2, 4); + d4.setRotationPoint(-6F, 22F, 6F); + d4.setTextureSize(128, 128); + d4.mirror = true; + setRotation(d4, 0F, 0F, 0F); + d1 = new ModelRenderer(this, 9, 67); + d1.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); + d1.setRotationPoint(-6F, 8F, -6F); + d1.setTextureSize(128, 128); + d1.mirror = true; + setRotation(d1, 0F, -0.7853982F, 0F); + d6 = new ModelRenderer(this, 9, 75); + d6.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); + d6.setRotationPoint(-6F, 22F, -4F); + d6.setTextureSize(128, 128); + d6.mirror = true; + setRotation(d6, 0F, -0.7853982F, 0F); + d2 = new ModelRenderer(this, 9, 80); + d2.addBox(0F, 0F, -5F, 9, 2, 5); + d2.setRotationPoint(-6F, 22F, 6F); + d2.setTextureSize(128, 128); + d2.mirror = true; + setRotation(d2, 0F, 0F, 0F); + d8 = new ModelRenderer(this, 9, 75); + d8.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); + d8.setRotationPoint(-6F, 8F, -4F); + d8.setTextureSize(128, 128); + d8.mirror = true; + setRotation(d8, 0F, -0.7853982F, 0F); + d9 = new ModelRenderer(this, 9, 88); + d9.addBox(0F, 0F, -9F, 5, 2, 4); + d9.setRotationPoint(-6F, 8F, 6F); + d9.setTextureSize(128, 128); + d9.mirror = true; + setRotation(d9, 0F, 0F, 0F); + d10 = new ModelRenderer(this, 9, 80); + d10.addBox(0F, 0F, -5F, 9, 2, 5); + d10.setRotationPoint(-6F, 8F, 6F); + d10.setTextureSize(128, 128); + d10.mirror = true; + setRotation(d10, 0F, 0F, 0F); + face = new ModelRenderer(this, 0, 50); + face.addBox(-8.5F, 0F, 0F, 17, 14, 2); + face.setRotationPoint(0F, 9F, 0F); + face.setTextureSize(128, 128); + face.mirror = true; + setRotation(face, 0F, -0.7853982F, 0F); + } + + public void render(float f5) + { + sOne.render(f5); + sTwo.render(f5); + d7.render(f5); + d5.render(f5); + d3.render(f5); + d4.render(f5); + d1.render(f5); + d6.render(f5); + d2.render(f5); + d8.render(f5); + d9.render(f5); + d10.render(f5); + face.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + + public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) + { + super.setRotationAngles(f, f1, f2, f3, f4, f5); + } + +} diff --git a/src/minecraft/basicpipes/renderTank/RenderLTank.java b/src/minecraft/basicpipes/renderTank/RenderLTank.java index 31897a9b..44500397 100644 --- a/src/minecraft/basicpipes/renderTank/RenderLTank.java +++ b/src/minecraft/basicpipes/renderTank/RenderLTank.java @@ -6,23 +6,28 @@ import net.minecraft.src.TileEntitySpecialRenderer; import org.lwjgl.opengl.GL11; +import steampower.SteamPowerMain; + import basicpipes.BasicPipesMain; import basicpipes.ModelLargePipe; import basicpipes.ModelPipe; import basicpipes.LTanks.TileEntityLTank; import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; public class RenderLTank extends TileEntitySpecialRenderer { private Liquid type = Liquid.DEFUALT; private ModelLiquidTank model; + private ModelLiquidTankCorner modelC; private int pos = 0; public RenderLTank() { model = new ModelLiquidTank(); + modelC = new ModelLiquidTankCorner(); } public void renderAModelAt(TileEntityLTank te, double d, double d1, double d2, float f) @@ -32,13 +37,28 @@ public class RenderLTank extends TileEntitySpecialRenderer GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - + if(MHelper.corner(te) > 0) + { + bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTankCorner.png"); + int corner = MHelper.corner(te); + switch(corner) + { + case 2: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 1: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + modelC.render(0.0625F); + } + else + { switch(type.ordinal()) { //case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; default:bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTank"+pos+".png"); break; } model.renderMain(te, 0.0625F); + } GL11.glPopMatrix(); } diff --git a/src/minecraft/textures/Items.png b/src/minecraft/textures/Items.png index ccc2a2907367c253fc2c968eae825918ce2ade56..3a5c5cafe657afcad99e6de3daa51e66d7c4b2a8 100644 GIT binary patch literal 29075 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

lrdx^KPA8^8k`Zj?Lv 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 QOa#eGD}So~X!7lU0b{|gWB>pF literal 30215 zcmXt91ymbdu-@SAPSN5nrBK}6t+*Dg07Z)>xO=hUR-kBc4^o^KcXxN!y!`K-cVc($ zCMS1iXYR~=^KFEtx&k%^1qJ{B*h-4B+5iB84?zGL3jD+5Yl-cDlB>3YG*J2P)jnK6 zu~Jcx1z`U@a@&iO;4|pXiiWNLfb;9W7s#ZHi3~o8>ZYV7hq{E0NJ_w(oWDZ{0JMOT ztdy?T!jY+i7m?nKKf90Js-UzqLI9E?Kqni|nN~u}LR+@SJivnRx`2g;<#kXvMtE*4 zJxd@a{Qx~%E(3wbfII{*Fp}>8SM)CgQZuj{L{OL^Q6bW3#E20qmIsK0!_nE8^hYVgf{-i?SP zb@P#id&SkNqsF76@3z9J-QANIpaVl13G=m7a)#@3sWIJVgzhx;o7du4*eNs7?u$i< zV%b^0xw*Cm>2qhMr2I^MQpe!~a*vmvSSBumLqhg@2`_Nn>VPrzRr?3Ef@kKGSAi9( zp?0g_oMn=s*Js>c)izv{rDkuOwHT{?Zoj1Lb#!#FaB?2sAY!1ScUi}Y^|3%^q-ix6 z75%SWW#FeY^7rrh{ysWCKfi&2fh1Sz>t7Nvr9HmqI&7}$3UPz@spE$1+po61zT4Q? zfS>BrYEfz=yW>8|%Ge5Q+Gdjc@XPpzr4bfsNhgg0qOOs2Zl1PxSEXHl%xf$_4>!k{ zz`)GermiK(iq2PE{>us~5uWXS>O7R|F}yb*RM`lhBz6&ZDBB1>%zz9)sT zi<#N$tHor1#~H$1S-3^VFh`j_Z{y}@OYVNsI5`IeOGwMe{I(e;+1lNWN|f-e=5}Pu z7?aM(%hOhGOrO_MS65e5QR!jM@eRbLe2XToD*bZJ|0+IvBEO>?b)Qmgw00Nlg?e^+ z>suc_DtOtvbxQ9o)EalsU5=FPcVp=0;Src$@`XLX-~#r$pU3;k{*9m@Vuqe%e6$`y z@YB*RNsLjUUUN@xFY?XJ4GSx)lrETJyyw}uppaVSWgJ&Te3b6)af45|>OdrQ^hE#( z^o6KK2b}at2^~9i;4Bgv_pvM9a>NnU6X>i85eUC&lsD0eT63`?(e#cX1v<;x5j1f@ z!Lgf0@&J$9#%7bpL)yZpjOebsm!pn@qv3p^4k27`>QyilvGEIWwX&r0qsa!MqyRA6 z;m7Me$8%&L5+$a8^f0OChZMo(kz*KWU}(6$k9xHCNKb_~-iS~<>P^cf7wg(gLS$o! z)6yP<+}O}?(f{mmFE`XD3HB7OgW^(W3!x3pV#KGLhCcSI7VZ4a2>ZO)K*z?Wtcwmv zDni(g*BwwvQ7Jr6##pp<^GbUn5g-c-MsTzHd}-U(=16RI(U40+W*-5P;#6$0ib4Fw z=9~-wwcT586^vSE3utI~tE;QKwl$a} zJV;aUvU=BpYyag--%_({E6y4V2rwYpMtE`6Nekgikz7<$rP_(oipq+2tD$~Rc<@`K z<3}5oxC?m}g&=>Y+MFLBb0Y6EE<=f?ff8jA5PXx6deI?CY4X=;=DzjGx@n6Sh1)%6 zj(6!4s_?kn{?Zh!u13>2OG?SwSGyMwG5St&W*;;6dxy!UYW?iYM;1`!7AY$wE2b-p zrJT)@{uq(mdR|EY0AVNf&mSHdDk&*p`P1LeFP0weX3(rfyq#S4gyX6e(D7w}yP}Z& zV1b31nVG}1Mb}x?lb;=k0X^_{f0UnMdv6Wp)6w+!krcryfRx8gt$hsnCQjC=aGWup?pQ&=H3 z^^ypkeqSVtY=JDvD`$yl?|%V|uoYMLC2Gm2r{Fzbx4XNd^Z80}VDTPpZEblpC|}lPq9Gw%E?iEp{Qsxapw&ch(gvInm97u;W%w z{#__88s&1J9c@o4a@2kv;U`w$?qEy<&6JYc8`}zrR2$7C&mk0#goK0wM=0-EPEO9~ zF_qi=--EEh#pQ?djb1byoY2%%QvC{}kiT#Z{9K}UT609$WMv*bE}qg>HMw9(^cRjT zL%+V;Zs0UA<fOWgpCp(U8OF{*aUXo+dblK zIh*M*$NxeLE?{^HKuSJ)+*fi~Z(beT)#5h^MsL!~tM!}10>wkr=p%WVrm(VREP+I% z+eTv?g!n+xRZ{A4&P?%mF?mf;T|`igjS<;K6>1T^lII!

WBxPs+bkGOEx4G`|ar`I}&WSW^7IyZYNezh@8vnb1`Od@p z*(!5f5fPEA!&%(x>uWMG?>8hI29S22TRxnDJ4cSluUhN@mAf|!5+3xOi|AoG4hBXI z(nZ=4W{9azzA6yBg6hP+9YVEy3~6O?W{v)okLz2mp__r*^g|LOlW10qq82dFA*Gal^yI|3x)aRMe^2+1ehE1h+go z+!jIDF>ajPdzQB+%UUz$$ejC1`nvnYLmGv82|qLGrCJjA^Ei2LOl6Xt!LI8Tu~2R zZgIbZD_hIlJgzv$-{|bsO?FvNpi68yqhz+RN#v`PlrOms6nyDeeCevg7-@v8);`zo z68J=KyWC^GfhUp<`CuX5K2%b=%Y5!?ciCMZSs*l*AJ44)V>+GJnnE?!Oe&FknV~@v zlZ(e<9%LswGn#t3d1Sc|Z3^I!aA1V1;1ZcW)$!v;0U{8v^?gbUu$SN#@w!{cs7vimqimO8Wzm`4+ZJNAJWv zqR&O0=BlNF)@Z;_yp<-+fmP6#AIlwG3!(dnYt9VoGDt&~^ z-4vt9LuEm1a7da1m{tn;>0`J&x4O6A2~XD;IfxEf>XqSEZ%hR)@pDDm6BZ};TN;h6 z#i-i4GY#>x_LUon#YV!>zvd(Uw$G~Ma(8PLF>N;)auK)3^Lzj#EDTjWOF1+rN90AI zwrb@@@YyZn9PDC?aN+7YJ~bD9?HabmS zWAcme41$U!%Ixe=`>sFVMi1|Cc%I$L$?Q{&9aB}u&v*9B%UPGJ+oE=(-sj0`#f%*B zF%*%6FT|^>{}8K-t9`dD&Hv}zty(@IA0v{DczctrR!6s#0{tAc2G^_Nozmps+gTsM z=T1qL=xnDT^9F%U$!v_`ACh7pFk5xh>=~$iI|wyZrJRe=Lg+!wQc_e@RQ3)I0TmS$ zq0{sXD_+z#bG`ns071lR_e1?R0s`xI=bO<%$uci{n*2y!B9`Y#e-($WEh>N)SC#lh zx``_M^F~%q2>@D5`U5>aAMH+dmmQ#6f@c|Rhg*!wFPpzA6+7G21cVBIP5LVM`Z|mG zWwLbK>bhcW^;Fr9zt;2h%4?Ydg;yxs|F|SG;7MPhFshAle14X6sqgYWsV?vlsbii=S6#Ev5N~wqdA&8V{ zjGxafsEEmWTgX9Ho48JbM9}(W3Kr& z2A;uwc}wa7d6A2*D&z>xL6AQjfcQR$=~vaSUy*uWeUUrskwVqju3_fuPBCb%*=eu5ozIsoynuod%xkncf6bR+@sf${WD_L971lEnykUoTuP zkW1htTo8fsfO99=MJ?$}GB@6@5^bBn!M(%pk-J-%URjQT7?SOH-$IB$IZsv?5O(-= zj34|^T~jkr{pruZXm1RS1hu=nyP}%fbkw>+xJxlTX|(GHE93!=h(moxHg}E9@Ne}); zKsAQ^;5$l+toLi#0>9tUl3&pFuKJ&y1@f|4AQB&hFICB945U3?JpH@~IOGTZ!M^NW z@?Sl{RK0$M5h;4soM9bwg?yO5bC+LtyI$%GpZYX(QfM5-GR+m|lAv9cELjft%`E;J zYF`UYi}VO`U+%#RmY^3UvSDnU=# zpi)$?6=Cy_)oA}Nf8E?TEFblu1jDHTnxAXmJ9&KSXeNgjg>@a$E`7iP)>*%5Q3SR2 zx5cvnyo24J0i*Hn5rA0cU2SbnvXlC=-DY<~UT*FW2;uO>_T|x>D43~}JN}}~V{@OO zg^JtY;o}FuOOx*@e6@Jk*t0R-gSfWP$dT^^ujc$g`|l%TXb#27q=L2Qy%OqD=Epn^P1?G z-sjf*y^ELGA)Yt>pAb**E*7WuPyxN3hJ++^VnW-9DT(goGqHem6nB)Tt7|RF7)R3J z+QvqH2pn+Pv^Cm)g)%^CW6C;%u!Y(}1ki~ABd_KtnIo${Ze1ZtekouFEOLtpfiaT} z!imd9bk+cP@OV&mA$x4kTW{%eSJQu2^QccWg$I_=zyh(FZbAJX-#*-)jjX8nSY-gz7vCI1105(!68{x93msXEjNq3c9)L>|KO72VMI6KD$Ya?kB$tDm7$@X zzb+2#`WxpGsz3BG{!E9$h|(zD_pU{KBMKFSPGi@_ER-M;W7<=b+kt)6mZVD1^P=>+ zWJGzVmrYdW>C1ro4kq|dh%!xu^C`#Qg%0H2hUS<&BJittTS zi}gT^ZuE|Tj*Gu3xseE#%9&Vxk7FoC^&6OPX#9Z*-1MT{)q1&!lZmz<;% zw2&<63LY9dh&(dB3TJk5qFY0`!nL)c>q9X`0A4k%A;N!?#?yo*VUADTZSr$f>Y&*- z+9xwYyxl+hKGVO5%*kI6m#)Xh(&NkrC24h~L-3{5pAfK*&tZIdx;HJ{O`v&wBBOYr zm(>$EJ{mnmD?UZ-=_6r>#J6Wo>_3xDKgyM6pf~4Tm z&)FEPY42}n_tv&*xe*^nD@pk)ydEvyJ&f8?JCBs3U!}}8>PQ;~ER;5FynAT*aQjQ` zjZ&$N4>%6(2TMS{hD4#?8iyjJq$KRzmSfLeonvskN5O)VkozUxzn?;qKOcdd1eb~j zVYcQ?RovB$)t1EcpR4@h9}DR*YRV>w?B8rX@kLH(j(62v!VrV6MDsC?0IOZ8U^-}Z z+iL%PWwhLBTHMd;BjzvaN-yDcDk0%N$U_kqxh)3fB;igQzzDWgMn_p*HLj7w>WPQ$#Ce89pUii^Mw7YhhVG)^PR$TS~$#v&;JoYExdBuCC5E} z0ggQJJhHTZ-BhWwF7^;M^t?D{zj+nd-<|F?`#NxDpjboYk%$^UYS85+tX&r7n&z`3(&lB;Q{J1N<4aazM3b1-L zT8Lrqu1^-#cxWScn{yn&dpyaCts==e`p-Z$Bs7#>T%7uyf9n1s>hQS1gtCh-@P@9f zL(}B?46+fo4)^W=&uOuCO>r@JZF%{;UrahKy=6!IO_m{+S{wmzcCN__Mo<zW)z z-=wAqr~2rhY;l9S#~=YP_%~x;+Kr6ScF5yGooG5=i<7cXExLxZvEDT3m!OQTO!#|- z0&rV0$cdLa&3O~3y&HsEWdQq-`b?1ik7z}8AQzL}A<`T#ANENjQ^+eCj>-Of7`^$^ zH*L(a+Xl=CR%6vV00zzHj4i(llj&aqvJ(?tE6|@F5_Wc{e@H^PAGFI`S=GevA-v#U zIk){W>!U3u^(CJn(lJ9wc5p)Yq@9Mq(n$ho`y{0LnNCX+9q$`FX?l>dVRWtoRoC^- zA|A1>Ue3G$GPQ_w2z|XL0ZrisIW>RwE4Zb@^;fYvq43pDTf4iBwB5Tt@_{)x6v)Z+ zqdw_~)lA|0r^I#7ucK@bw$^Oj$Z-Ai?@Nc*alNNoVvb_>p$;TQqNnP;lRo}{N=rFb zBCHGNz2_66fZD?Bd)BJ)uRue>s;0;iXE~>AmXCHh@WNaEx8+`zP=HxG^c!>1J|a4s z?@bjQtAuXRq{$)V5Nk{2;O)C*mB)@hC?AR0`kN-ZiYH5wycfudZ94hEkXJ4dv2mRnJpvz8jCLZ zj$(5a{Rpq-=`H4L-;eeC8n67S)G12^kk*7j&07-LnJQFvqEB@TlN!)G@e1q|RiQKR z!VebKt<%cz>!(i|soW;|?9a-)D*hX1j|a>A9Q)TwA60M;4u7p3%-~kF-~5!?LIp^T znN~M9peG8h#;D%UhwR^d&%j6iaf~?yFPFV7qj`DAo;Abk#77Y|i$6e~#NUQmze4Me z&^J)i2nU58(9R9nC6lEFs%$0}=H}L#*OGO8eMNaPT(0mp2x+<^W~_sszR%sQ&iVQd z?J^G;pNpD?nx3t;{oqTv>%Bk-;=RXc(3kkjDE3|=ArIjHToM>ph6Tq#?k2whfc99Z zuIA{pc(5#XUvKaFIKJQfxy1hV;M+V%F1)=^(H79a_>pCp>U7Mhq#{&s8B-wC>yL2L zVq&t*5`qqDgSo|uPW?Q0^3z2=Wp&+GNK$Q7*Or92Dv>{D_N$RUpO9Kaa`$U@Ev)C0 z6AWSZR^O*RiuAxfwJAX%p>|N(W;B1xA9A0!9E!vao=J59hH5*@G;ZlV@u`*sQ)+NM zh*jAi7#JPxPvJDK{<^J9OFiXUrLbOm)MzN@Ou4aT*Y+@?3gODf{0lhu?}$4x($<+D z+~r__u!to@lD}(O2#?LiXjc_U`=S{2&y!5qzrU^w*p_pJD%9iDx(Z~AvKDe$Z?@MTYT^)ctDC$i{r zeZ$If>f2?+Q{lkC`C>+WK3NAre9JPP1RPH3BDE~f+3|AK^(vDxv zWMr(1&1UXAV7OT-5yZ#(`nDfORiGBfJz41lEU|Wm{&ZCC$AT1o$h{JoIdXEw_%Rkb zf*|@~SX9J+rL*Am!vwt0R`Jg(mx3pyN3M?cO)9kh27faBpBHkRyg< zDTag7;(cSbiv7{-sH)4)U9QcXq+fdCX=y6U?{8I5GF}3o_CGT#X)ST`esHMH9;lvt zS7cXyRtst^4{l}GkZ4ydGd10^3sZmbIIGoBYQdESo&6#wH(G=UPcxiMlP*+7J((a| zpxuLLg{1okvLElM+eKg~XO#&ClNTFI&7K>ZY}T+o`Kz~Nu=vljtG9&M=0&N-f|9Z> z)&7V{Ph!D*%LqwJY7toOV+$$qTCm0zRCfLHy$eBS{oF0w5#9ap~l8 zq^7bcDzPD=|gw0C?kmkAek+w8!PVuc>euDOK%N zS8Tn~mNf-0@y^%7Xsqrpwkeb?78^eAebiCBCGJGbo#v(xaGYWRI=6>Y>jl!J>2~gN zCnqL&Ugah(r3UW| z@~HV!*XGr_9nRUG^2eU_t?u$-IP5Lyk_>b$;_h|x7dioB$&V}X^*>^9rdRz949Kjk ztm-&ueqS;y9$G4dpw3%q=2CIl@mV$pA+)w_+rT znNWimn}=yXe6u+RKN5(FJ?RKu?b!4VtDoO5%|AUoD5k&KhzSGvsBkR88Nj`IzMhnECiZ*>$LDD zmu^_-DUG)?1QXl_CvvQcw1pz<)ln?rFc|L{TDMavlIXtrkdrO2B6rS5&R<_dMAy>6 zidpqg=K+wkge%A5zoHS~OSj_hgVE;$Ko!b4V|I*bK^7SHD=u;gmN#(%+u>UW0_@Y2 zy5G}?aZmUMGqgP;+ul+>ADk_1cier_t(>|6G02QQBGMW_Tr_A;<}|e=IlNTP(JV z@zfGEY+W(^42sXr(Zl)ru8bjgD^?~AIliP8mAN0yTk#kLp(*;c9Sy#NrQpdNE()!Q z(4RShh5Or4o0hZZ(Nr(k`)`YpH-PpT*JQs(*>fnb>c0oJIfO~#qkBbr8iEy?@khJL zj>eW1b650RbB;~DgXdP?!UdL>-1LZ_CSvpYvH=1;<&0{ltu_OXcH>k!GO8_6vo;5W zA-O7rKMp)Gos0@rf?>65tR18mf7g3TM~38&l-O;G9|x{1;80Ts=fKoHvcKysa@Q~D ze-KH-=S5Aw%j&eo3>1h;Dwo#NzIY(iqAsXkc8Ke_2T4ZYb8wHjF5ou;MxovmUUvta@i++({#7x%lY(lA9wKQbkWnq?lGf7 zX(Gb>SvQ!(e{f`dKwZPe4%F0N9E*ko#Jf&=K1WihU;rI=%(bfb$1)1%U(y8*jO~$d zk8pooq!b!5oVd~4^23B?5W*NjA{aK@0*e;6F>S9j zE}b9(G4~329e~8e;WF~!R*{}UzX=q*ejV>^dH$`j|$b=1?+4D+X{hP1$If4&Zqd#qXvjBm_i9V+DuuZCCsU zQ3=~*WoE{I;Z<~Y`OeIITQuM+0kD*%xB1K2u(LTX&c6fyK8%Ae+039LbEh)!@kp1c zg3Ejy4QIZz5){E?HY5r@%eDNjNvjDb=`h-4gC8U$^6vs94^|8E<&kQ3dzm{rb~P#` zPI_>82l^>$8>svD2BeyF?U5n!T6*k}TuVgmA-y(k+NyZ*CqfW6JsM>moZRBzky}AQ zL6wCUg~X`ybD|fKF%}LwXjK(=8-fCD?OwSSG|6y298XY0>LLnV3&Gg7>9^Q(-w{`4 ze6hJ=aJbq4cj_=*>abi;AeY@t*YJGedGC~)p3p|3d5-VHdKd+FV^tWtGW)MHy9D@! zep)rwIiJQAtPgh@xGrW-^Olrj);WE6XN=YkvEu$oG~e(!BNv&rA&Yyq(v;sG4je~9 z6ghF|b#IJkJ?KY8FR?nFE>uJ>NBD(&Zay_qN78NWvV(rI8O3~%C3;m{X}EV7VOVJVI71HqygM9%NgAJ-Sw1}(1s6iGDX|v*k@~lT{TA=} zzSJj6Ek z@82679VgmOVvp}4@(eDgD!mqqH=kh;)*~Y)XBGXYuEUZnZM!kOUdf?1L?m=N$DZZrJ;{)f*24=Ovy+v+Gj$-6BAJv z2K3L5WgA8D;BKDxTREQy7+==9g4TC;nI9;%i30q#G^fnRGv&WFfzzavAtv>|-@ken zX=wFs{i{jifQC3+o4y;x+i&U1tFrpumMTNyb9`UKzW?`UQ-Tf3;@O8snFi2U4SLZ19Xyv=A5efzMO2ADBmZ}>Y|=c} zYLrg)bbR@x(GImH0b+80d?c9}ms7z^V=Our6c4TFNQ@PGA2C7?@--zukmoK;OiDs7 zRw-7?2#rD&+#6B&&tK5)q5AG}m)O6n6`)QH-Osz<};5?3f@i3DZkk|If?BF!#!+=1xTqI-AZt#?u+$2EOf2@PQLMclQbqS^HQ8` z6nVUu6V&?1^F7tPFKLrz%;)9(7wSLHL3WrOh!2$#WkZ>f)Ph7l9d-o%O=8gRaPJ)` zxGUTx$XV@R%~=SB>1;mU)&xMU%l2Q^xpi?ng9X=5kyj??3AP13gAX5>4RAZ>d|$GE zF`s!3^}n>P!Y(epioRRPSaab%1pN^erd(`zCe(-puQ@%wpwA%kyv>0YAD};FUHpcf z+=AhpmnFY==jVLrXH_vsZ&zP2x$)D8_VDt4K!rQGV0DPTF>C7`SqCZL=ldeygEGfX1}gWo2?BDC<;w6jss_%M=(t* zo1S9ztjKN^pR~jB+){eRitEr`6_zeX==v%Si-XE~n9g|$!%Lf#QuX&pn?*V_D z!@5`&C;rJKoK(YpN>l6sy(HS&R+V3F`Mg?CQi2Aoou0;3uu~U-)*b~E?DiYr4Z(H+kZu@9> zGG}cLukx@H6>xf+2+cPh9$VM=HtAygrWMq?Z2Dwa3|iEAsA;i)2yxo14P>COr4t=k z$BV-Ze?=UVyXGt;BxLc_G!AqoLOZgRu!e>^=qO0fx-Yh`GCs~~18)XkaL!BZOkkRq zu(6d%)9aO|t2TM;=lp#7yT?cC=i!knLo@OMvfxbcWHF+MC*LGk*@mt7x#-}=U81K@ z#aQY+k=52FO--<16+4O++S9Z2?5J7%mrN$jLH1V#Gjzi&4J-}0_ z3&kqk{z)&W8AGyEx26mf#hKYW^I%Qqo1yw7rX{6y=L=(_jp`EK)5hSH;IWfu`0ttE1+_ZEB zeI@eDYCn(wp>G$3T6cT)eQi_qEtOm@uOtWnP0zREEKhU4pUG$j?lW6&EbV|+2qYv(baQ&ipGNtFPFnNCMO89;fii|QETU=eRKkThJ5xzi9IgO0<=&m$9 z1Oa+d)^Bc(hpZbUU{5X3HUW6sx62>i30HB)c$q&3DH6kzCSX#C^qAMPXXHhE@*td$6_?>zYlSOK!wbt7m(AkmYE8^dSS$A{QMhbKY};Bbcbai;228{y%M zD<~(ot*s4-7|xRlTX|e1d12La5+Jd){ZU}d{*fK)YDA%H9o4--;<<~t4~3SoPZ4m^?XgqU5^O@|nuOSF73for9bn>ZiX8?%5JF5?}rhWvaXw z^1VDGX6YJ`byj4*T#lONXn;TeoQ=W(5K*us_4P?AO*I&hZyQU((J3%pSjHltP6uT~ogY>ZEObtWhte>{ik9%Fa0Qh7`qiDrYyIXsMEnWql*#vQJCckOkB5VL}#)K zZVnoRqxo7?IDLbnUrs>*k^BcQR%gF^w;9bv*2AR*Ryjv|kv!fiU-2rQmoR zrnB@o*qg*5O?S`aPH^IRH(>Ak2bYG{?yNw5GnK4MBa6ZdD$<5sg4!&k& zWDJjumAA2Bd_*YIjn+At`)!R!kDCC$`y_n5$M0)P2sd^!)c9^|>qGn9e?QoAH8mB8 zjJni(|30Rr#c`0yPf7}efq`LRV-o_Wj7&{W=hf8_ou8kxu&|8Xpkp2MAekU}4Zl&< z@7U*NvhL&Ic7%LPK*_#(_yA1{4h}9^beibAR0H$=Mn5U&^K@Lh{|Vi@kF#-HMQVEE zm@P4Sm8$H2LFsdI1OjdXCf{I3=HpRPVn$BrZ?Lk)qzN3l!!b9^=H@tv6SivlMqtb9 zF(v;>B7HZHkFOj!%%az{3qYVXIFgzsZyLrcJ-EOva~uUXsslwOIgKeF!fGWO10X0BHK(;YVb$|AvyDM3NeqT1Y0C zUGO3;LP-@KOrO#jg@u1`I$n4t_7vBi@7(x7G5zPANwJ(=`PzL&d7G#KeCuDJ1Z7Ex z%QU2^koPAAUMUh1*?a78T?B;aDwINaMopvj7aHk`QF zbQ%GnGl;;eRz2L#n$e!+U#Ji>!k9|bH3Z4^clpNGz#8=jH!;YZYw`dG9~X@|xis%= zj+9EbNE{XB)-ED3v7`m9?Xj7hLf8+be+o_?5kFNdtkZ}R*}7piw6(^ZoMHhtMDNj^ z&%-qA5CQl#h-O|j!z88Q)@46g`}Dw_%XL%$vRJEAOI(mR+qc`>-VB0Mze%XyUd3jW z(ILYwiJYEF?E5#{Q98?u$WyoPtL;&}eP$-x#r~d^S8>Si({Re5=teSPsMlow@ z^m?tArd1+PyI&tWyIGW6T>axuJjo%ucb7|K%EzuU4AXHTC--{GB;PJZ^xx?30!0t> zIVCp50Cx@gT7dA^OU7Nyn#)gLN5U7UC~hv#+#0rzYS%z84grCVcs)AoeRmW#GCYRD zpGck=2cWe7e};?b{@=94|AkYgryL}11LCzuYGm~ARvPNIrb3?2pBv~sFVnfjz_FsPk$LQ+6nJtB95%7%5Sfr0zIST zw`|~WWeJCx|1+74xb=Myi1d0k^=)&$_Tu6Q#9$aJ{%Vy{l~C2nU%Bm6tn;Q zxS7x?DXMYc;u@~8wRgN2XaJ`1d2(H`7d`9bfgC_II{jFnI?)Fg+8<2Y0~cCQ+zf=R zPDdRAd4b^@-{3gXj&K_vaRNptmtn*1Yqvt%$(^3SQWwr>LiYVW_oa~$i@_=t>cc}U z4OEMhwU?6iZ>V1qx=IpL*IOCh9b`iO$#;&UD3%e&B8HRig}!IzE!^KMe}`o7n;Y|V zlm-$=(IAy9G}-*(@_aZD*=VsBE=&wLGW5bw(t}=qVKPM?3wZe9{YF#$ZsYw9 z@(eLh_i0oCfQa0O3_!hQ`0nS=@2f2^0FR=~AR8_n87Yi=&|3czh3MNp@|@!B^=3=N zGbMe#12$0MA(&zZ! z(INAIq=L^>owDfO0pS|Xev7Pmsg14NQ1sP-pTWxe&(L`o<3BKzYL-vsd;|QJQqH%7 z(E{zfSswsKyjZ?3du-{3nr$FLU~8I4aTHztqa7n&2StfFaj@gsD(sGvW|<}Y&C?*+ zZ>;}_>T4H!6}g#s5tpyn(51K^yF<#SZ|(3SVFbIW0_5#|&#UBBRn!n7#xc{4+wabs zFl_YuYnr7Zp+W*E^EogVOe3S@1TW$KFo0E>Pc{5s8kYZLxFf0{<~l?~ytBGHX@IBF zVrNqLDPk)f$dIx&nsG7`I3{KL(^FJI%bRPfas#B9om~)It+xCLD$;w&0^FVV(vI8pFPt`dT5oI1NkJkNwQxsVhxjWQ>Kov_fH_7zqsx(EU)t?=S45 zZQY7P;IIxaIfJ>OzCHH7ZfoSVE0)UWGRpH}Y_t3!9^dCxWG9d5ji?$A%}-{em9zw6y|f z<4iW#K~fu!sy2=aZ%TDbVp>Zy@D&qJ&5lCeIkj#~tvGHSC0iRtx*Zv3JgkirvHhVc z3!*DzCJ+!KI#(dSQ228tulz^#Id%wQ}^wDipnE< z4WI4DZP;|2l28MtX8!5kn>4N`j*kq_jZG!U)6-M{KuYS`c13Tos*OqKYm2X==QX(j zGHB!s$XJakX(OEc^Kh|FR#M*|%-iazp-173pY7d^Pm8wp%Q2D|EL;zbul@7Qyte_>1Mw zSz>~}ks>+r$F-ga;keV3CV_154C)>_I|NUxwkDw-n7e_qE14^ZcDDr*2f>c#NH;!m zhWP5FQ}vrZ%2mBp zE88yBBS|9ecCOm{E|Voa7iXE1wK4`Z#^Mm+7JQbhe2 zeq)eLv(#1`%?#;rkqo&joNEq~V*uPLD{YkO4d; zC|S1u=3_wcV0pd%B~{ixoy$~=)&_ zmNBem$c0{`^(0I8Lcwdkrd^y)BK3}X<>l<`rvHz4Y+(D#-&C{CzhV8g!A`C2m?>Nb z!ijm&$k*SzQ|zmtH{)m=G{k}B-CySnj5_;5<*Vb^mDwC!_^XIgNOtCk!Fpp?x9Joy za6_QjIxYF|5>9VlRvFR@k;F#L>&S+RY@L?dp*2;j@xSZu88+j-e{JRcn*TR})}#zR zTpKU+%hVB{?}+$;s@QJ#)4_&tS#gxw%;{A5++d z#b5HUk9IpNdu&fXA zujd_1?kKMOC5dZ{nF4NnqnC>`;x_x}_8 z_TL1~>ukWty2bpmF@sFlwf=JuiiwE{2=%RS(Q+Q@K;XxL?<6Vb$G|~n*q^{!MZY?^La3BTWOsy< z`?6#?jpH-c3a%x*eC(xy7s}9Zn%vMGhj#5fypfU@7GWKco}1qm^(C1}P8OQao#BC< zzGJVu%X|K4w((UVLm{}C&5=xp>%2iOrW~&8EVj0mYw*r2@ne~zbf8K^3eqP23y3sI zWm?yyq6jp$W^8_R7COa(O>dkDPl8C2J zW9%Dwiu=Z5zLKPR&j0PzZ9SHp17pEjUoS?VprCrblXJVJ55^ya+;v~3zxGg99Xb|t zY`rl5pz4;EH1vB3v{Pjs%M`#d^fuG8^mi&(aGh*K{BPwmGc2mb`{=w4+{}jbLBh?` z>4}&gY-|BcoU*FU6xHSZ*RwWv0*7lW2-&d{Lmbt?VPmA;cl-7yhf?03kzR>XF^t$e zJiQ$Uo%!jFWt~^$7jN%u2BG^dCg7Aa4pitlq%aZO)XRL8n7uL9LuvMr@UYU=9I_G{ zGwa&=`NQkCZ^$Xovmg_OuB4*viIe;>Wz4JkZ%Yie`bw3c9*1r^MfKsg9P=?3iMBn!8hRN;+{jiU#62eG(F&xI&!kBF$t4v4Pr?(doj`;nf8 z+!Qv~M&3EfIk}ws&pfMRxi1_)^0K9W(kC9kksCtW#PbVE`}OU>EYFnnRnD|(6Qlbi z2OMddlA45n>R3Yp&IUrNNx_GM7KOkUx%& z;Hsz7m3P5$BBJEgC$y?3wF>{U8rV`=Rwz7ZLc4plE?3vk!~*6|fS)fdOA|2--P-2g zQ9OtDA2M3f5aN%fbwI@Ey^{SgI%vk*L?!&6gy72nHT64~$U3HU=YG0XLEtWV?59f` z`e^5^3bMLLWK^{r2U}ejYb_IZ0Jc&7J|wBKyUyzQJr8U+jjG#(Npb^9bd9N$g+zV* zYP=oAg09Gm);Z3y%2Y4Ssdi)f-iWNaJVRr(rz5~}x4FJSE;!1TW;9lfbpO~Oyw`ES zeM&J1NFUb{;|z&F1L)4f5+g*(@Nz5e?fhTKf{+toRjPqp8UjRwj|}!AIk|O{-cE(c zk8Edrs1u-zEWfiL0n{i|>tuKmQl+d{bdt$gzRipmnR*bR$^NC~ETJu3(G+q`7|ld7 z+yA7a!U`1I$!&wG=RIWm~G}aK54{4MA_VIja6FWyF_%} z9b&QvK|MZ+3@ysm?cd=yl}B71ohyUv0s;bZKQc2*>V3*!(9nrG6nk0&%FM=$7U3{X z4;)p8D-8WAU(V(c9yJNr16RDovM*P_=QmQuPi zsBu-qP=#T2Nl}pj$UZeRRj<)Lfs36z240Hn2b1!D-=~sFs5?yz)btB7kr{wN^lBy< zL~>R&>0tdI0?M8-7&a z77cN6ar24SmzUGaX9td$fYi&AbIY1lI2gTnS7niSrkRz;^pe7ZAiJ3ln6`ipNoR4t)lFB=&{hH@|v3xjewnup&vna3mQJWuBAj7}NA9 zSD%}AXoLB@;e4Z%f+T4B-Yxf&ftytd;&~)DzX9QD8beP=bw9PqQ8%AzSpLn1nv35B z;Fmz>tcint)@O{u+cD*p_?Yq+KAP|v(paG2hmI#o8dyhTJskP$ zM|eWbA+vm^kgCS5FGTax|_pQDTziv zpf7k?6NH(eGd9bz&D}tOU_%e({aK%?C zh7B5#6R1GT%gZ0#chaoIQlX%!#l`QVl3;q0Nd`%fr$8Ck?v2Ip7mi0bz`|4*;cOMT z99b3^V#}y=cflF+QxCVYqYP?sLqW1(H6AVNYs?g}CghhfSoxNRyOWTbdY^joQb3iB z$csJTVB~Sln(?W^V&@+`nJd)|nIF|t%aVETkn~WC8-b13U)cDe1TpD9Y!y+(Spu7$ z`FbL9=u@9ZzZ@b)Csp7}z~-EO^qY{07JcmqZ*g9%ghZx3P9b83rKNjlP$s1$3AWMF zmYWVq7bYcIdMk+w-`oiU4Co4GZDwwER(P*Q{-Jla68GLdQvODw#+CN?+Re(0z%ZGj zlG(*opj7wu%#kArS3U5Tu_;KoHmmu)mbd95-u|9rcB7G3nlv*oh)hUKA&q7d2mASn zyms!z_k5YTuHf-VX!b7n?=8`;;7+pY{mCB`zm?x*-TR#-wDqMLJLfeV`w~I#9idM}78b+<4_<#`@3=v4-SzX%&k|wEztb zf@)*O9!{pwgew&e#>wNbP^hg~D;M#jZx)d5ed~FFBtJGVOLAT3ac=S9utLsQxhU7` z+W!yQD*GiIj`(Lj_Zky<$dq*LXHWP{agd!COC4)5#I;&8UyftYwS@DNJ}6}$pAk`n zPP7@+NnW)nV%~!Mc!HjWSbMjRY<)nu*}O`6$OD3ghF!)zUTc`>Mc|dFkvJh$8X$DM zG*M6n)DmDz*vIwvYwzwVasFZ86_iz$WuL#rQt#DJS7s9mK@wuh^!|V-bg=6nM8-1;gKhGb0CTc5!PTnqbh4x&bQrAb%ag*WK+GR!gqV z$0FQrr5Fgt;{a%)1SvjV13?c(1<0vf82xx#9jlAH)(_kS;gg3^FH*L;v+p8d8}yyF?(|)bNc2%&;#C*X{IR! zP6aa{OPY^!4ckJR-1_gi5a^#yVXa%3S8-4tPh_7cfBFdivaLUsCW;;Y1C7rkGXhA@ zF}Pn@LxCLg;yIgX;G7a$E?l=iNOyZDE;)^F*yQ)4pt|JrOFs^|7y_KKUFz1P-) z99LX?noqmVY#UEAyz44wd*7qo#oE2ywi2EEQ!r4#!A93V7~!>~xZ;UKza#1P zE&}f5rHs!|$l#+|(KKxY%%iw)2rI8cbK#5`Y;ucr1?IBg=jXNP`q_3&@%yrZ_k>tf zqT51bs-*K5~rB%TiMS$yB`mifQlxw=w-JdLq)y@oHk?4fU;dh6{~(1^3W z*}nLD_>B%8wCVnFE=D*-xmL4*S)T}k6MNRwD{YrsQO*B;!+sx)#$Z;pqki<*V)dLZ zEUZl?Dj0tEuO4IyJ#~%G!5&rrQs-<`WVFobNl-~8k&T&bQ#mRDp?`!dH_Zj}PLNtW z$F07C^+pCbUQ!JGpLJo2292XHx(7w0Rj*qyzsf3HXkjRL1+J)hB9qF=Z3)wYU)`Yg zC}F{=S9HCca-6ESjR%NNo+qy54EHNlateb&#FFFVeD~LTPVa@+)y{;TZ?%9MXS!oGTV<(dgu2FxsT6k`Dv00*vbJML-aOJ7nFG^j6czr5SW0BmbpWg`DROfjT z9{G+X$=P^ux8kq1%geVckj3hSfUL;8w)o7kQkTQ~T3O@NimI!{d;DSWGe%Bq@A?Gs zWKpG$FmtjeLmaIBoD|kL8Z_Q@FJarCRtNN}{n-H<8RWH}1`Q3}q#EwfT5F+RT~cBqGkPr<+(ny9q`PdTxD*%alW~ z8@Zj$0O<8#R6zwl_`4g?ldJ=E`o2C2D1QD@klllaz%1#&U|Z_?iyOo_?QYi6)r^nW zniduuaWayIL);hZD!H}Twe|sWZQ4!ta^!S({#>`F6AXvu`r|%G3992$dv%PMVc5}f z*+$}?Bl+JbuUtE{p?(5q2fU4?q&W0`aGj*p!QhXH3CO$t$MWGWD&$|*S5Y>EB7@*h zM9eHg){M5LoLwV90f09lik2#Pd4131BT#YrbG}4Xvu?Lo8fzJda|{oFS>i44+vUNb zH8}=73zL=9;Z4KR)tSLJ?T1mRzGusF+3f-epm4z-L8ho;R^u~n5jj{6fe8L1MU~Ay zl&Kk8&ED|rUN*m{OTLt1fBd55YfcA9@u)cU@;%^~V=BrI6q_JrcS}jy*#hG*=H$qo zGE0* zxQN0HU+f?+r$`Q#!5fRf`JZJF^(Xc8tls~8vU4SuWLKB1($&(@8il(0NfdCo-B7`y zl5rE7MNu7xhRxc%RH@u==_0y4euqPR^1XiH&dMaaxFeExQ3L^QAuShIe3q!sNGsgg zVG-(PSxGifXZ6!&G-ddIeM0T`$MsSpTm#yV?(PyS>c;}F|9GP$Bl~GCg$#5zAiiRhVY9LQ{&SXlLgq z;}cfSCCcZ3AbYH4#n`@RFZ({}T?hS>^ACWr`;lsu!Bw$HjfsP!S}_Ke@~9$|toMCc zdnD9Aul{<__&2umi6+yg_xsvW#YIga6!{1LfSux^B5sGDF6+?v&70|76NNk0~c3+s(vz6GC!vF0-t9ZmXo@vDP_pM)3>-^YFTDH zUYHUT#Rw}NcmE9dmW*0%C-%N#wPq9;*om_iTd=>gnMn^McI}Ljtz$_#Ncx|jYiRH< zlT$2gWJ?{^a$!-{38|tWE2--K{M_(^M3#;FTXEg#N~bm{=`z&QMjA&)4iN!Gfk(^% zQCeDhHvPlZ`G~TSU;!BRs{f8KR91$VxVl$cPbF)Zo(#My1(ty~VLEA1WqY@HDiQgz%W#2ZXQSng3d8xzV&sDUEIV_g z%c?|UD~>SA$dBOlDo&Ktf41!gzQnw#dQU_+OEqOAsRo~?VKSm8Ag#PSucwK9`);8CBGFxlt z9M=jl0=p<3pNc*7N4aanXH(PC{v1(`>66N7%7+h=j$1O0STY7|Ux~cDJU#)w_++mR z=ct3;JhBfl#2;dk?Afgei1+3p{BUqD)XOOxrfoF%yVrHhEG6XL=t3R zFgQFSGBLBqwtRU0KFY%l{^!<;6`$bmYkdOVfo2nf{qyrEVLfa+=lAU6*cj%s*T^!A zd>Y`VcO)#b;u0kTIk6fKs>ru{rkT^E-%&N*iVbxJJ#?N!J`Ddl|M}}Ou%sQNIV1^S zD}cf>|1mgwHZOpQ^D9qPc;GX3LZJOGCn&Ixoi;&1ho9%YB86o1HE8>&#I*6@i4E>@#zG&J%)bNPWP=AwtKckhs*^xFcE466o? ze3aC>)3?aRV^$Lh4`v_ssx6aM^~|eFpm>s4V{dZrZa{zl(@vGQLvJ4bU>6JLOXkrr z*1}3;ev~(S`1S9V+IV>1dDk{z(!fNVK$j{mMv{Xg_UF&HkNoOcQnIoLKrlR0#Oud7 z1eT2~nEi$R_62SrreRJ;n~0pg)~sB1^t>FFW8x%JFfBw3<5ZBxB_|JS9u&@B;Ymi$a{tk;&&xe-TL@j%zd9A8<%KSINx!eX`& zPw25n&%WHtSk#00xRRGRN_n-7az!8zFiX0oS6Oyk#gEUc@#4`o{zEf%n#MsOkiL`Z zXz*-5pYP^*UzO2Az|Kl^Mw)_>*w=7u&!s1o27#d9xUPxal1g%69{ZSP`^R>*b2ahc zvuM!2EU6R1jr9j3MbOOU`$10O5R#ofo4(YE^EGD%wXAJP$DO;g)MJcP zj%SKL+kJyxlCb)K->;p$*f)jJN+f+7r_xw(l^FS@rSJa--I);GrXa$0hzI^ifT^gO z?=AUkTv{#lNK~|oI?^)O1z$Ny0`BAaE5GyFQ%Ok)FED4~V1fh$1Q?WJ#JPRxHAefK zTh}qJE3v+or11(~It=`OJ}%5&(ozpPbOCG`RMgiI=a~V;$p|>?kmJytx2tEWb20ML zhN5uYJr9!07iJ*Gm_`f|k(VKh3!{S*^B#oo15V4Qbqz{@(DW=>GW& z*~_o{!yyHQlJQKkxa|dCclMZfJ2p0~Z2JiMjMoeQ>;~m{2pZAtx7n^g&k7W8y3kHD zClNKE)$;n;g#~6E!9&S$j*?6Y&*fBuRj!_vim;=eONa^)nyIsEf~21s?#=GuMG^^D zss_&$m^auaU12BN*ggaE)}+nIxZWW|)}mmk z;|8T=I2ZWBB;q%mpHo|={Lnfns4RK|QS82PepWX$ZWe~qt2A!?SzgX+3SPT*l-9db zFO*x7G6_WB_8QOBAuV-0i!d;I-`VVcs;hm>_vm^nJ(+^ILMG9DIBg|fUUD%Yr|(yK zzrjlje<(X}K6YXB7f;Q6ZzLJC>a}2^t)ufF*)>SF#`N^g2WmA#?>(FR*(>a+qEqnb9DvH~ihF9?;MBQrRVSor7bOBJQ0OkiiA>qu- zOfL#mz@|6f#l)PRmXT3Z??UPhCZoHuGl6fuY%e#zk+Ded;rqWN;6AZX=*Szay0@FI zMSn&C3MCx4E`*1N+bp%L;La^<3iq?6Z+_y2RfNgP;hJUE_u1l2O4Osi^yVAKqER5R zNVFi5Ym|u7$&uHyX_$q>c3|xDgc(~KD3D-f{L{}q=v`)a`--x)s?VK+4r}s1#Qgkx zW=_s~CD<oP#sfL$n6=(XuSG6Iye)x)l zRV;Okn?mXC0>u_X?3n4oi^qVS3Ezu$)y;`3Qj@&O`amf=)#7+=R<91QvqVFKdIN%9 z=^3%|W zb=evl8>7htvA|%MccLY|va<5S;on=R$30v%rFh0yC5Gv8`+#2-R=PCd{LZPj45nU~ z+_JP^u3}e&Gha?wdGkOZ0;~V_2*4}qf^8=XHoKjMMkXaYwlLU`I|z6Z~fj8q9cceYInNeYaQ!4K7f|HQbtcHT zY?`{kdA#^=p6wyI6Je%SRgJX)GJ4ZwXhKo2J%~HcnVq}urbc?-%J&*^_8_ij>>VC< zNkl||heta8)q>?l5ZV1B_?5apk?09^vh#tIGq5<3_o*=D73dsy?Te`)lT3% z34(%x8X6XDOENMtY7MIZE?@r!`liCduXaK8-%BJ`5xcF9j`*G*KR=h-8TkAw)KXnM z9RASC7#j~~i)9Cs>slZygm}CS8|Xy=t1vMSrRqU^qkTOF-int>;<9Kh8$+xVu`RfW z)A&CT>Q)d`%>9_Q?>FcAXk?^fVL^i&)>9=dS@s8Pm4Aw|%KHk4*VrcV6oEW4z^P$Z zy;J`6WW^KvUyPXyPf(|tx|6v)xDSv)9!+8YwDE8b;|B*FK$4QPz@__b(Nqr?;gE)3 zu|~yux%Q5hgXwyxXe7Z)Qy;Xfcp1Y8!fS|VXb7>$M~l1uEbQGPe5{xo1DvnoV#a{L zz{{(v?Gz&yi`ACT95LXt)$4B@B+tKU7BjmM(v8U1Pf-1L&Z$V5UE9M!W4hx|MX-3aNR*wv(AztsgwgAuAatk*=d6% z@ZlCkL+06o`~iDz=Amdr5HJt1bRz$i)%awk*wqQus4i;I#2!~tm5xdD>;O|uF$^y>u(i{DE zj0!QNCk>R{v98TlT%OL6rzY**xP*iQ09vH9rY1F}q^)h4=B<9aH~V?lbM@#siJ&F% zp!@a10_1h?;t9B&3>K^YBIbRUP}u=rVi?Zz?PoEnX&3CX#KsGQhzWZa+zZ!i@8ZL+ zbpAW!*UJg-v1R2C$FwC2>IED&`<24hl&gv!9=vGb@QK4;mz)%87Vs!3)ig8``Y^h0 zx#LN5)MaBxbNWG+RzQqokq|5BfuxL0BBW-%&qlZqxy<46L~*)|(ARA$J8>Wokv~Gq zNhqe72C-n`LslzRxJ*yTZ_il(M`Z_xb&Nf|L9C?q8B2OyTK||Gcsx8m)-!mpJ!U`! z>OuMFQ;LT_{6Hol3I)=6AB6%Z*UGx*{|Ew}%(P=;VM)pLM26i;3_NJRT;)CS+pzq+ z@b8Dr0WX2V@yRMr&B=%ASuTH{R?Hx~gAuXYK<|&7yh1u;(f(Y)TNGLvE4~av!_Z-v_oEc-N_;C?O5G&0T6wZDfFXb zF?fF_P)j9f)?@(Uck5VQUcTES5ed+Qx5|To>M9X2n9sb}3C@*D)MrC72yf>uq9Zy! z#s{^{ktG81<)Ykwa)he4m{_vaNx-y_YN5Ud*ZW{#tm$VGP2+b zFq?BU{?yYlkQ5JbsXsmEFr(4|tVC>C|4Yz+Q)hqMr`l3(yw;+=RcOe`E1lN)I-& z{Io_lgbjYjCo-UOet~h2cTZ9R%TYvpbinRVg7Z3=usc1F@jCQuqZG|1ql8i@s3Nrs z1TF6@^v+)S5UK`#?U*6__Q&t@Z)+O5?Rg*jUBy`Pgk~S7G=%OS2cw)LFy05!UpqWO z&FfaD74^@fV97Mol{4bt+&E$gZ=b8Gx=@Htg)SUUI zq(z;nSi40~yIQUn8|-Rl`uF9ED6&t>UL7t5vqKM#9dF&Fnb1+)WnBBK_XzrR*~1a_ z!1+90z_?6vW)JXh^9jBSk+-JLr&p9@#ysV)ow!RL~ ztfmTJWpol#;7$%RQvA)gDtqHp(rq zjG8ekMdPn+!Ka&I3E0=sc}W`?W@)&luO-`WSGqI@arOhkP@G|$MOve8GKrBvP7AMKsu z!U>N5O24TeVIe8CK8^6@`AMsYgMpfvxPDmaW9g6jrNK3{m$-l8Y!FHU%4iMO(K=K# z?A=66rae?CdW2itZ2wDswSzqkEiJnLqRR{sn*|@;L^x}VPT&xqpYmgLr;~(GKWX6& z__0YmV@<=J1I4}B3%P^;knLZ~?z5aNa^)})IXU?VfHoT!On2H&s;vNSfPX7KuU{gt zsm^qBV8>)Dx|ZcnO_@?2T+KSxc)#xy2jZNq=W@3=Vm3aS$OEnZkm<`Vs}RE=#!8r| zHX5&C^#%irMvS$|WT$32qjWk$snrpcMGw=$UXxyWD+H14h5ML2t(?66O*q0KosvOt zhR3H_1||Ro#zq$8Gmp@+)wA*W1wrNV{*tCrPE{`EjjXKroEM{|)#OHl9=qAd&1187 z`{hQbg#>OLBsU2)Xh>{SoI)sM!L)u3{^GVVd;&lX^;&9dl39*^N)vD<1+v!Ots8I* z?DRbzvZ)w^wnM_avgdS zmsb$u5OP5D>?-q=O_sO#g*=q$6hSoQ)H2%DRQhz}QdB(>1o~)~f%s^A1O)F)xPc`+*1+S zK{Y!3T$i~x@D5pF9?x?O`?|!@G2(ef`|pS7fk_}d78V5hcFcMl%`ZTAdwZ}u-IwOM z>^%vA?mpgYRg=9S-|}*xA|fiHNKmoi-bK$yBW9 zhBL|qa>`Q^^t<@QEK-4APiABvC=!^@dD$Lyr^g{I#`?ox3HAFZ=q z=#+SPvL+@Jw)IPSL3ys4o{MjzUC_ zzmBh;LtZ@0LV&F4mqB94$W7So*;E%l{X;=Q zLNb;q{FjDyvEkYsl%!l_oZ|-UOTYmsm?iIyh3I~^xm$3`Cha|}k71^(M0_+F3aSZq z%z+DTU9fOYEw~Bri>0h-GaLOZrP(VJb+D+IK$;uHqCf19^=|u zX+I0qbUityWBW!-)#o%MVh z0M-=Hg4K1{Cq?!8a=&+qeF5Luof$p1%{wX(hK1d}p{ek8u?JOZwl~w(@{WR6cyI3V z8KkMA5jk|lLC?ak@58=ro}Q{I+w?y>?6 zUNdjon{bDinW%%OY5^a|&tTVLETb>+D#M&j;Ap5A_**P-55v0!aeUkW*3$3S=jl7=st1y;>pv%i zaC*XTWdA&xwGD3kngFkNFf=qYaJjC(Es5=3`ecbAMSWQGAgX)*pvjPJE##c*r8^f{PS@V$m{Lmji(0oPN*vw*43lF;~ z6R_Ul+`Qd^-9yZ5k7wWa55`$<_3{DUw7TR=s1a^=sYYsnw!&o&ETDhAGveVMl5>!t z_^PZtqHjBqDH9Y#!@@$B4sbOS5a|A{=anY{TBeFmSkA&;WwEPdBp#7L%EsCCU`H9) zu;UVpKVM_|BE+hL6DM}1XXIiG)if`SaM3?#-L`^z`%^+MXj0M4LNt8}Ot6CtP94IU|P)PKjD_V)iR$ zcsRrE0gZ^8*wpMG_jCB{ zljPNq8C;t9v*FBN$W~G6tDLuYNS~d&K(5qORB2h=$bgxamCe;Iy^M_0QC}hxQ=T@m z$Xpd5&C(K*7z}E-G)2VuszbJ8)_Ucu?R^XP6#s83}LH@ec0ofV_$fLNR?lvzNo%jox?PQm(z^niH3nsSM1#FiaVHydz!h1o`=2nFB zXmUY;bCsvPJ@ek)0Vc3v54h$3i7Y{r4m)!`kIPl8}#d^TC!{

#FdFkx`l+9OqN^pZbi3m3Kt69#JnEnvyyBK_e;*^O}1Hi;p47B*hQBI<93jKwloCpB7{%;{dRnR!?I2jokn|#?NB{xnvftH>tcQP4%ei8fo zEQH5EPv6jvU}wg7BeRk91ce4X@@_wQWvwf|Z6*YG#Pk0i0sAkUUZ{LEJ#3dT)7NJP z#}(>T%so6la$EMJ0)fK*+Y`&q)K2}UTD20ooztwV2s@7St&1WMKo$2}&%5|M=d-Dq z=wFW)FtWhVQ#&gG0$pR=ZEolV5oc2DNm@@ z(|cmrFN%mN)3;iK4koS_zylbQagua9(96lprO21KSTP9fooXs2q|iC=+Gp>@r|uk< zy$tdB6lVds-u?BHx>df5Wcix;?&+08RQOU>HEy{{d|HLw#jXZ2Ynd(L zrM!MN{bJ{!e_avt&Udm2#`${a2h)toPE4eWc&Lg4_kYJNopYRZ^om;r6FtA455M>` zFf!(UWCrY%&lik$X3K^^;iH1AY#4bcYUh+sqp3UUofX{AFr0;&lN-~YQbn4>RJAZ3 z|Aeo)6&HP}pS0`CKPd|^FgY-AFfb}Gurx5dIK1;&x4r+hsN$k@rV9~W6;JhjnS@WUAXK0z zzmZb6|Mv42J`7cJ7_!T6&R|hvV8W`D;eh&IegK+uVTQ+z+myqvLSX~IHLu-0jCc`!g1e( z?$m=4+gZTwFW^f^&R}BLc%E^a9;e$*RR%@{hCMu6)Il22z=}^SRVy84-}t|hA0*@H L>gTe~DWM4fj_idZ literal 0 HcmV?d00001 From fccf7d2f29af6c89c042a0dde85794cf6ab8d068 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 10 Oct 2012 21:48:55 -0400 Subject: [PATCH 099/115] Update to UE 9.1 Need to test still since it looks like my forge it out data i can't test just yet --- .../basicpipes/LTanks/TileEntityLTank.java | 8 +- .../basicpipes/conductors/TileEntityPipe.java | 2 +- .../basicpipes/conductors/TileEntityRod.java | 6 +- .../dan200/computer/api/IComputerAccess.java | 131 ++++++++++++++++++ .../dan200/computer/api/IPeripheral.java | 103 ++++++++++++++ .../steampower/boiler/TileEntityBoiler.java | 2 +- .../steampower/burner/TileEntityFireBox.java | 2 +- .../steampower/turbine/TileEntityGen.java | 4 +- .../turbine/TileEntitySteamPiston.java | 4 +- 9 files changed, 249 insertions(+), 13 deletions(-) create mode 100644 src/common/dan200/computer/api/IComputerAccess.java create mode 100644 src/common/dan200/computer/api/IPeripheral.java diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java index c9245978..547a144e 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -180,13 +180,13 @@ public int presureOutput(Liquid type, ForgeDirection side) { @Override -public void handlePacketData(NetworkManager network, +public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { try { - this.type = Liquid.getLiquid(dataStream.readInt()); - this.LStored = dataStream.readInt(); + this.type = Liquid.getLiquid(data.readInt()); + this.LStored = data.readInt(); }catch(Exception e) { e.printStackTrace(); diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 10ca4e98..66855c55 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -245,7 +245,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { try diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index 451903d4..ca588e9e 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -112,12 +112,12 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { try { - this.force = dataStream.readInt(); + this.force = data.readInt(); }catch(Exception e) { e.printStackTrace(); diff --git a/src/common/dan200/computer/api/IComputerAccess.java b/src/common/dan200/computer/api/IComputerAccess.java new file mode 100644 index 00000000..52a034e2 --- /dev/null +++ b/src/common/dan200/computer/api/IComputerAccess.java @@ -0,0 +1,131 @@ + +package dan200.computer.api; + +/** + * The interface passed to peripherals by computers or turtles, providing methods + * that they can call. This should not be implemented by your classes. Do not interact + * with computers except via this interface. + */ +public interface IComputerAccess +{ + /** + * Creates a new numbered directory in a subPath of the users game save, and return that number. To be used with mountSaveDir.
+ * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new + * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. + * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory + * structure, and the value n could be saved out and used again in future to give the peripheral + * persistant storage. + * @param subPath A relative file path from the users world save, where the directory should be located. + * @return The numeric represenation of the name of the folder created. Will be positive. + * @see #mountSaveDir(String, String, int, boolean, long) + */ + public int createNewSaveDir( String subPath ); + + /** + * Equivalent to mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ) with no space limit. + * Mounts created with this method will have unlimited capacity. + * @see #mountSaveDir(String, String, int, boolean, long) + */ + public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly ); + + /** + * Mounts a directory into the computers file system, from a real directory a subPath of the users game save, + * with a numerical name. To be used with createNewSaveDir.
+ * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new + * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. + * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory + * structure, and the value n can be saved out by the peripheral and used again, to give the peripheral + * persistant storage.
+ * When a directory is mounted, it will appear in the computers file system, and the user will be + * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed). + * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. + * If this location already exists, a number will be appended until a free name is found, and the + * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to + * mount "cdrom", or a "cdrom" folder already exists. + * @param subPath The real relative file path from the users world save, where the directory to mount can be located. + * @param id The numerical name of the folder to mount from the subPath: ex: mountSaveDir( "cdrom", "computer/cdrom", 7 ) + * will mount the directory "computer/cdrom/7". Use createNewSaveDir to obtain a unique directory id. + * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. + * @param spaceLimit The size limit of the mount, in bytes. + * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the + * return value should be kept track of so the folder can be unmounted later. + * @see #createNewSaveDir(String) + * @see #mountFixedDir(String, String, boolean, long) + * @see #unmount(String) + */ + public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ); + + /** + * Equivalent to mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ) with no space limit. + * Mounts created with this method will have unlimited capacity. + * @see #mountFixedDir(String, String, boolean, long) + */ + public String mountFixedDir( String desiredLocation, String path, boolean readOnly ); + + /** + * Mounts a directory into the computers file system, from a real directory in the Minecraft install folder.
+ * For example: mountFixedDir( "stuff", "mods/mymod/lua/stuff", true ), will mount the "lua/stuff" folder from + * your mod's directory into the computers filesystem at the location "stuff", with readonly permission, giving the + * computer access to those files.
+ * When a directory is mounted, it will appear in the computers file system, and the user will be + * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed).
+ * mountFixedDir can also be used to mount files, for example: mountFixedDir( "rom/apis/myapi", "mods/mymod/lua/myapi.lua", true ) can + * be used to have the peripheral install an API onto the computer it attaches to. + * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. + * If this location already exists, a number will be appended until a free name is found, and the + * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to + * mount "cdrom", or a "cdrom" folder already exists. + * @param subPath The real relative file path from the minecraft install root, where the directory to mount can be located. + * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. + * @param spaceLimit The size limit of the mount, in bytes. + * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the + * return value should be kept track of so the folder can be unmounted later. + * @see #mountSaveDir(String, String, int, boolean, long) + * @see #unmount(String) + */ + public String mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ); + + /** + * Unmounts a directory previously mounted onto the computers file system by mountSaveDir or mountFixedDir.
+ * When a directory is unmounted, it will disappear from the computers file system, and the user will no longer be able to + * access it. All directories mounted by a mountFixedDir or mountSaveDir are automatically unmounted when the peripheral + * is attached if they have not been explicitly unmounted. + * @param location The desired location in the computers file system of the directory to unmount. + * This must be the location of a directory previously mounted by mountFixedDir() or mountSaveDir(), as + * indicated by their return value. + * @see #mountSaveDir(String, String, int, boolean, long) + * @see #mountFixedDir(String, String, boolean, long) + */ + public void unmount( String location ); + + /** + * Returns the numerical ID of this computer.
+ * This is the same number obtained by calling os.getComputerID() or running the "id" program from lua, + * and is guarunteed unique. This number will be positive. + * @return The identifier. + */ + public int getID(); + + /** + * Equivalent to queueEvent( String event, Object[] arguments ) with an empty arguments array. + * @see #queueEvent(String, Object[]) + */ + public void queueEvent( String event ); + + /** + * Causes an event to be raised on this computer, which the computer can respond to by calling + * os.pullEvent(). This can be used to notify the computer when things happen in the world or to + * this peripheral. + * @param event A string identifying the type of event that has occurred, this will be + * returned as the first value from os.pullEvent(). It is recommended that you + * you choose a name that is unique, and recognisable as originating from your + * peripheral. eg: If your peripheral type is "button", a suitable event would be + * "button_pressed". + * @param arguments In addition to a name, you may pass an array of extra arguments to the event, that will + * be supplied as extra return values to os.pullEvent(). Objects in the array will be converted + * to lua data types in the same fashion as the return values of IPeripheral.callMethod().
+ * You may supply null to indicate that no arguments are to be supplied. + * @see IPeripheral#callMethod + */ + public void queueEvent( String event, Object[] arguments ); +} diff --git a/src/common/dan200/computer/api/IPeripheral.java b/src/common/dan200/computer/api/IPeripheral.java new file mode 100644 index 00000000..8dfeb8dc --- /dev/null +++ b/src/common/dan200/computer/api/IPeripheral.java @@ -0,0 +1,103 @@ + +package dan200.computer.api; + +/** + * The interface that defines a peripheral. This should be implemented by the + * TileEntity of any block that you wish to be interacted with by + * computer or turtle. + */ +public interface IPeripheral +{ + /** + * Should return a string that uniquely identifies this type of peripheral. + * This can be queried from lua by calling peripheral.getType() + * @return A string identifying the type of peripheral. + */ + public String getType(); + + /** + * Should return an array of strings that identify the methods that this + * peripheral exposes to Lua. This will be called once before each attachment, + * and should not change when called multiple times. + * @return An array of strings representing method names. + * @see #callMethod + */ + public String[] getMethodNames(); + + /** + * This is called when a lua program on an attached computer calls peripheral.call() with + * one of the methods exposed by getMethodNames().
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is making the call. Remember that multiple + * computers can be attached to a peripheral at once. + * @param method An integer identifying which of the methods from getMethodNames() the computer + * wishes to call. The integer indicates the index into the getMethodNames() table + * that corresponds to the string passed into peripheral.call() + * @param arguments An array of objects, representing the arguments passed into peripheral.call().
+ * Lua values of type "string" will be represented by Object type String.
+ * Lua values of type "number" will be represented by Object type Double.
+ * Lua values of type "boolean" will be represented by Object type Boolean.
+ * Lua values of any other type will be represented by a null object.
+ * This array will be empty if no arguments are passed. + * @return An array of objects, representing values you wish to return to the lua program.
+ * Integers, Doubles, Floats, Strings, Booleans and null be converted to their corresponding lua type.
+ * All other types will be converted to nil.
+ * You may return null to indicate no values should be returned. + * @throws Exception If you throw any exception from this function, a lua error will be raised with the + * same message as your exception. Use this to throw appropriate errors if the wrong + * arguments are supplied to your method. + * @see #getMethodNames + */ + public Object[] callMethod( IComputerAccess computer, int method, Object[] arguments ) throws Exception; + + /** + * Is called before the computer attempts to attach to the peripheral, and should return whether to allow + * the attachment. Use this to restrict the number of computers that can attach, or to limit attachments to + * certain world directions.
+ * If true is returned, attach() will be called shortly afterwards, and the computer will be able to make method calls. + * If false is returned, attach() will not be called, and the peripheral will be invisible to the computer. + * @param side The world direction (0=bottom, 1=top, etc) that the computer lies relative to the peripheral. + * @return Whether to allow the attachment, as a boolean. + * @see #attach + */ + public boolean canAttachToSide( int side ); + + /** + * Is called when canAttachToSide has returned true, and a computer is attaching to the peripheral. + * This will occur when a peripheral is placed next to an active computer, when a computer is turned on next to a peripheral, + * or when a turtle travels into a square next to a peripheral. + * Between calls to attach() and detach(), the attached computer can make method calls on the peripheral using peripheral.call(). + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when attachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is being attached. Remember that multiple + * computers can be attached to a peripheral at once. + * @param computerSide A string indicating which "side" of the computer the peripheral is attaching, + * relative to the computers orientation. This value will be one of "top", "bottom", + * "left", "right", "front" or "back". This can be used to uniquely identify the + * peripheral when raising events or returning values to the computer. + * @see #canAttachToSide + * @see #detach + */ + public void attach( IComputerAccess computer, String computerSide ); + + /** + * Is called when a computer is detaching from the peripheral. + * This will occur when a computer shuts down, when the peripheral is removed while attached to computers, + * or when a turtle moves away from a square attached to a peripheral. + * This method can be used to keep track of which computers are attached to the peripheral, or to take action when detachment + * occurs.
+ *
+ * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe + * when interacting with minecraft objects. + * @param computer The interface to the computer that is being detached. Remember that multiple + * computers can be attached to a peripheral at once. + * @see #canAttachToSide + * @see #detach + */ + public void detach( IComputerAccess computer ); +} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index c0c48107..8af9e00b 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -64,7 +64,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 6389dd84..8da2df02 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -191,7 +191,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index 7e04f857..e4565030 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -99,9 +99,9 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, super.updateEntity(); } @Override - public void handlePacketData(NetworkManager network, + public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { + ByteArrayDataInput data) { // TODO Auto-generated method stub } diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 74f6d286..f77868a4 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -276,7 +276,9 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR return false; } @Override - public void handlePacketData(NetworkManager network,Packet250CustomPayload packet, EntityPlayer player,ByteArrayDataInput dataStream) { + public void handlePacketData(NetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { try { this.steam = dataStream.readInt(); From 64179b0e17570a913d0808e07a44cbf27c530d00 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 19 Oct 2012 01:38:53 -0400 Subject: [PATCH 100/115] bug fixes, bugs fixes, and ninja update suprised how long it too someone to noticed the major bugs i fixed. Guess i need to play my own mods more and find the bugs myself ;/. Fixed pipes again Fixed boiler & LiquidTank liquid sharing system Added a way for pipes to pump to tanks up a boiler chain Fixed Boiler GUI Fixed most machines in general (packets stopped being sent) pre implemented use of Liquid tank in place of boiler's internal storage tanks storage tanks act as pumps on sides, Top for gases, bottom for liquids. Added crafting for lava, water,steam.fuel,and oil tanks. Made 4 iron the default tank receipe, and 4 bronze optional will change out later. --- src/common/basicpipes/BasicPipesMain.java | 16 +- .../basicpipes/LTanks/TileEntityLTank.java | 55 +- .../basicpipes/conductors/BlockPipe.java | 38 -- .../basicpipes/conductors/ItemGuage.java | 12 +- .../basicpipes/conductors/TileEntityPipe.java | 268 ++++----- .../basicpipes/machines/TileEntityPump.java | 4 +- .../basicpipes/machines/TileEntityValve.java | 2 +- .../basicpipes/pipes/api/IHeatProducer.java | 6 +- .../basicpipes/pipes/api/IStorageTank.java | 5 + src/common/basicpipes/pipes/api/MHelper.java | 63 ++- ...ainerGenerator.java => ContainerFake.java} | 10 +- src/common/steampower/SteamPowerMain.java | 2 +- src/common/steampower/SteamProxy.java | 8 +- src/common/steampower/TileEntityMachine.java | 3 +- .../steampower/boiler/ContainerBoiler.java | 58 -- .../steampower/boiler/TileEntityBoiler.java | 508 ++++++++---------- .../steampower/burner/TileEntityFireBox.java | 14 +- src/minecraft/basicpipes/RenderPipe.java | 4 - src/minecraft/steampower/GUISteamPiston.java | 3 +- src/minecraft/steampower/GuiBoiler.java | 18 +- 20 files changed, 458 insertions(+), 639 deletions(-) create mode 100644 src/common/basicpipes/pipes/api/IStorageTank.java rename src/common/steampower/{turbine/ContainerGenerator.java => ContainerFake.java} (80%) delete mode 100644 src/common/steampower/boiler/ContainerBoiler.java diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index d8ea69c4..6bbb2c7a 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -31,7 +31,7 @@ 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 = "basicPipes", name = "Basic Pipes", version = "1.7",dependencies = "after:UniversalElectricity") +@Mod(modid = "basicPipes", name = "Basic Pipes", version = "1.9",dependencies = "after:UniversalElectricity") @NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class BasicPipesMain{ @@ -142,7 +142,17 @@ public class BasicPipesMain{ //fuel GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve - + + GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',Item.ingotIron});//tank + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,0), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,15)}); + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,1), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); + //lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,2), new Object[] { new ItemStack(parts, 1,6),Block.obsidian,Block.obsidian,Block.obsidian,Block.obsidian}); + //oil + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,3), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); + //fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,4), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); + try{ GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube //steam @@ -164,7 +174,7 @@ public class BasicPipesMain{ { System.out.print("UE based recipes not loaded"); //secondary boiler tank - GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',Item.ingotIron});//tank + //steam GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4)}); } diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java index 547a144e..a19dd139 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -6,8 +6,10 @@ import universalelectricity.network.IPacketReceiver; import universalelectricity.network.PacketManager; import universalelectricity.prefab.Vector3; import basicpipes.BasicPipesMain; +import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IStorageTank; import basicpipes.pipes.api.Liquid; import basicpipes.pipes.api.MHelper; import net.minecraft.src.EntityPlayer; @@ -20,7 +22,7 @@ import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -public class TileEntityLTank extends TileEntity implements ILiquidConsumer,ILiquidProducer,IPacketReceiver{ +public class TileEntityLTank extends TileEntity implements IStorageTank,ILiquidProducer,IPacketReceiver{ public TileEntity[] cc = {null,null,null,null,null,null}; public Liquid type = Liquid.DEFUALT; public int LStored = 0; @@ -31,13 +33,13 @@ private int count2 = 0; private boolean firstUpdate = true; public void updateEntity() { - if(++count >= 10) + if(++count >= 5) { count = 0; - this.cc = MHelper.getSourounding(this); + this.cc = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); if(!worldObj.isRemote) { - MHelper.shareLiquid(this, type, LStored); + MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.LStored,this.getLiquidCapacity(type), type); if(firstUpdate ||(this.LStored != pLStored)|| count2 >= 100) { count2 = 0; @@ -70,11 +72,29 @@ public void readFromNBT(NBTTagCompound nbt) @Override public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == this.type) { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); - this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); - return rejectedVolume; + if(this.LStored < this.getLiquidCapacity(this.type)) + { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); + this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); + return rejectedVolume; + }else + { + TileEntity te = null; + if(this.type.isGas) + { + worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + }else + { + worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + } + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } } return vol; } @@ -121,11 +141,11 @@ public Liquid getType() { @Override public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == this.type) + if(type == this.type && this.LStored > 1 && vol > 0) { - int aVol = Math.max(((this.getStoredLiquid(type) - vol) + this.LMax)-vol, 0); - this.LStored = Math.min(Math.max((LStored - aVol),0),this.LMax); - return aVol; + //TODO correct / do math for + LStored--; + return 1; } return 0; } @@ -150,11 +170,11 @@ public boolean canProduceLiquid(Liquid type, ForgeDirection side) { public boolean canProducePresure(Liquid type, ForgeDirection side) { if(type == this.type) { - if(this.type.isGas && side == ForgeDirection.UP) + if(this.type.isGas && side == ForgeDirection.DOWN) { return true; } - if(!this.type.isGas && side == ForgeDirection.DOWN) + if(!this.type.isGas && side == ForgeDirection.UP) { return true; } @@ -166,14 +186,7 @@ public boolean canProducePresure(Liquid type, ForgeDirection side) { public int presureOutput(Liquid type, ForgeDirection side) { if(type == this.type) { - if(this.type.isGas && side == ForgeDirection.UP) - { - return this.type.defaultPresure; - } - if(!this.type.isGas && side == ForgeDirection.DOWN) - { - return this.type.defaultPresure; - } + return this.type.defaultPresure; } return 0; } diff --git a/src/common/basicpipes/conductors/BlockPipe.java b/src/common/basicpipes/conductors/BlockPipe.java index 92131416..5664d0c4 100644 --- a/src/common/basicpipes/conductors/BlockPipe.java +++ b/src/common/basicpipes/conductors/BlockPipe.java @@ -35,32 +35,7 @@ public class BlockPipe extends BlockContainer public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); - this.updateConductorTileEntity(world, x, y, z); } - public static TileEntity getLiquidUnit(World world, int x, int y, int z, ForgeDirection side,Liquid type) - { - //Check if the designated block is a UE Unit - producer, consumer or a conductor - TileEntity tileEntity = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); - TileEntity returnValue = null; - - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(type,side)) - { - returnValue = tileEntity; - } - } - - if (tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(type,side)) - { - returnValue = tileEntity; - } - } - - return returnValue; - } /** * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are * their own) Args: x, y, z, neighbor blockID @@ -69,7 +44,6 @@ public class BlockPipe extends BlockContainer public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) { super.onNeighborBlockChange(world, x, y, z, blockID); - this.updateConductorTileEntity(world, x, y, z); } @Override public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) @@ -82,18 +56,6 @@ public class BlockPipe extends BlockContainer { return true; } - public static void updateConductorTileEntity(World world, int x, int y, int z) - { - for(int i = 0; i < 6; i++) - { - TileEntity tileEntity = world.getBlockTileEntity(x, y, z); - if(tileEntity instanceof TileEntityPipe) - { - ((TileEntityPipe) tileEntity).addConnection(getLiquidUnit(world, x, y, z, - ForgeDirection.getOrientation(i), ((TileEntityPipe) tileEntity).getType()), ForgeDirection.getOrientation(i)); - } - } - } @Override public TileEntity createNewTileEntity(World var1) { diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index 3a89239f..564facd5 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -1,18 +1,18 @@ package basicpipes.conductors; -import java.util.ArrayList; import java.util.List; -import steampower.turbine.TileEntitySteamPiston; - +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import basicpipes.BasicPipesMain; import basicpipes.LTanks.TileEntityLTank; import basicpipes.pipes.api.IMechanical; import basicpipes.pipes.api.Liquid; -import net.minecraft.src.*; -import net.minecraftforge.common.ForgeDirection; - public class ItemGuage extends Item { private int spawnID; diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 66855c55..61c4ed00 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -12,58 +12,100 @@ import universalelectricity.prefab.Vector3; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; import com.google.common.io.ByteArrayDataInput; public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver { protected Liquid type = Liquid.DEFUALT; - public int capacity = 2; - private int count = 0; - private int count2 = 0; + public int capacity = 2; public int presure = 0; public int connectedUnits = 0; - public int hPressure = 0; - public int hPProducer = 0; - protected int liquidStored = 0; + public int liquidStored = 0; + private int count = 0; + private int count2 =0; - private boolean intiUpdate = true; protected boolean firstUpdate = true; public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - /** - * This function adds a connection between this pipe and other blocks - * @param tileEntity - Must be either a producer, consumer or a conductor - * @param side - side in which the connection is coming from - */ - public void addConnection(TileEntity tileEntity, ForgeDirection side) - { - this.connectedBlocks[side.ordinal()] = null; - if(tileEntity instanceof ILiquidConsumer) - { - if(((ILiquidConsumer)tileEntity).canRecieveLiquid(this.type, side)) - { - this.connectedBlocks[side.ordinal()] = tileEntity; - } - } - if(tileEntity instanceof ILiquidProducer) - { - if(((ILiquidProducer)tileEntity).canProduceLiquid(this.type, side)) - { - this.connectedBlocks[side.ordinal()] = tileEntity; - } - } - } public int getPressure() { return this.presure; } - /** - * onRecieveLiquid is called whenever a something sends a volume to the pipe (which is this block). - * @param vols - The amount of vol source is trying to give to this pipe - * @param side - The side of the block in which the liquid came from - * @return vol - The amount of rejected liquid that can't enter the pipe - */ + + @Override + public void updateEntity() + { + int highestPressure = 0; + if(++count >= 5) + { + this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + for(int i =0; i < 6; i++) + { + + + if(connectedBlocks[i] instanceof ILiquidConsumer && ((ILiquidConsumer) connectedBlocks[i]).canRecieveLiquid(this.type, ForgeDirection.getOrientation(i).getOpposite())) + { + this.connectedUnits++; + if(connectedBlocks[i] instanceof TileEntityPipe) + { + if(((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) + { + highestPressure = ((TileEntityPipe) connectedBlocks[i]).getPressure(); + } + } + } + else + if(connectedBlocks[i] instanceof ILiquidProducer && ((ILiquidProducer) connectedBlocks[i]).canProduceLiquid(this.type, ForgeDirection.getOrientation(i).getOpposite())) + { + this.connectedUnits++; + if(((ILiquidProducer) connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i)) && ((ILiquidProducer) connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i).getOpposite()) > highestPressure) + { + highestPressure = ((ILiquidProducer) connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); + } + } + else + { + connectedBlocks[i] = null; + } + } + if(!worldObj.isRemote) + { + if(firstUpdate || count2++ >= 10) + { count2= 0; + firstUpdate = false; + Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); + } + this.presure = highestPressure -1; + for(int i =0; i < 6; i++) + { + if(connectedBlocks[i] instanceof ILiquidProducer) + { + int vol = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type, this.capacity - this.liquidStored, ForgeDirection.getOrientation(i).getOpposite()); + this.liquidStored = Math.max(this.liquidStored + vol,this.capacity); + } + if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0 && this.presure > 0) + { + if(connectedBlocks[i] instanceof TileEntityPipe) + { + this.liquidStored--; + int vol = ((ILiquidConsumer)connectedBlocks[i]).onReceiveLiquid(this.type, Math.max(this.liquidStored,1), ForgeDirection.getOrientation(i).getOpposite()); + this.liquidStored += vol; + }else + { + this.liquidStored = ((ILiquidConsumer)connectedBlocks[i]).onReceiveLiquid(this.type, this.liquidStored, ForgeDirection.getOrientation(i).getOpposite()); + } + } + } + } + } + } + + //--------------- + //liquid stuff + //--------------- @Override public int onReceiveLiquid(Liquid type,int vol, ForgeDirection side) { @@ -75,110 +117,6 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } return vol; } - @Override - public void updateEntity() - { - if(++count >= 5) - { - this.connectedUnits = 0; - this.hPressure = 0; - this.hPProducer = 0; - - count = 0; - BlockPipe.updateConductorTileEntity(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - if(!this.worldObj.isRemote) - { - if(firstUpdate || count2++ >= 10) - { count2= 0; - firstUpdate = false; - Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); - } - for(int i = 0; i < 6; i++) - { - if(connectedBlocks[i] instanceof ILiquidProducer) - { - - if(((ILiquidProducer)connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i))) - {++this.connectedUnits; - if(((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)) > hPProducer) - { - hPProducer = ((ILiquidProducer)connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); - } - } - } - if(connectedBlocks[i] instanceof TileEntityPipe) - { - ++this.connectedUnits; - if(((TileEntityPipe)connectedBlocks[i]).presure > hPressure) - { - hPressure = ((TileEntityPipe)connectedBlocks[i]).getPressure(); - } - } - - }//end of pressure update - - this.presure = 0; - if(connectedUnits > 0) - { - if(hPProducer > 0) - { - this.presure = hPProducer; - }else - { - this.presure = Math.max(hPressure - 1,0); - } - }else - { - this.presure = 0; - } - - //only trade liquid if there is more than one thing connect and its pressure is higher than 1 - if(this.connectedUnits > 0 && this.presure > 0) - { - for(int i = 0; i < 6; i++) - { - if(connectedBlocks[i] != null) - { - //Spread the liquid among the different blocks - if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0) - { - if(((ILiquidConsumer)connectedBlocks[i]).canRecieveLiquid(this.type,ForgeDirection.getOrientation(i))) - { - int transferVolumeAmount = 0; //amount to be moved - ILiquidConsumer connectedConsumer = ((ILiquidConsumer)connectedBlocks[i]); - if(connectedConsumer instanceof TileEntityPipe) - { - if(((TileEntityPipe)connectedBlocks[i]).presure < this.presure) - { - transferVolumeAmount = this.liquidStored; - } - } - else - { - transferVolumeAmount = this.liquidStored; - } - - int rejectedVolume = connectedConsumer.onReceiveLiquid(this.type,transferVolumeAmount, ForgeDirection.getOrientation(i)); - this.liquidStored = Math.max(Math.min(this.liquidStored - transferVolumeAmount + rejectedVolume, this.capacity), 0); - } - } - if(connectedBlocks[i] instanceof ILiquidProducer && this.liquidStored < this.getLiquidCapacity(type)) - { - if(((ILiquidProducer)connectedBlocks[i]).canProduceLiquid(this.type,ForgeDirection.getOrientation(i))) - { - int gainedVolume = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type,this.capacity-this.liquidStored, ForgeDirection.getOrientation(i)); - this.onReceiveLiquid(this.type, gainedVolume, ForgeDirection.getOrientation(i)); - } - } - } - } - }//end of liquid trader - - }//end of !worldObj.isRemote - } - } - /** * @return Return the stored volume in this pipe. */ @@ -201,27 +139,8 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke return this.capacity; } return 0; - } + } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type.ordinal()); - } //find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe @Override public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { @@ -243,7 +162,9 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } - + //--------------------- + //data + //-------------------- @Override public void handlePacketData(NetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, @@ -263,13 +184,24 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); + } - - - public int getSize() { - // TODO Auto-generated method stub - return 6; - } - + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type.ordinal()); + } } diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java index 5485974a..d752f27c 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -34,10 +34,10 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi @Override public void updateEntity() { super.updateEntity(); - if(count++ >= 20) + if(count++ >= 40) { count = 0; - sList = MHelper.getSourounding(this); + sList = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); Liquid bellow = Liquid.getLiquidByBlock(bBlock); diff --git a/src/common/basicpipes/machines/TileEntityValve.java b/src/common/basicpipes/machines/TileEntityValve.java index 3e322b2e..76739f16 100644 --- a/src/common/basicpipes/machines/TileEntityValve.java +++ b/src/common/basicpipes/machines/TileEntityValve.java @@ -55,7 +55,7 @@ boolean on = false; case 4: deltaX++;break; } - connected = MHelper.getSourounding(this); + connected = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); for(int i = 0;i<6;i++) { if(!(connected[i] instanceof TileEntityPipe)) diff --git a/src/common/basicpipes/pipes/api/IHeatProducer.java b/src/common/basicpipes/pipes/api/IHeatProducer.java index d9271ce7..da97ef71 100644 --- a/src/common/basicpipes/pipes/api/IHeatProducer.java +++ b/src/common/basicpipes/pipes/api/IHeatProducer.java @@ -1,5 +1,7 @@ package basicpipes.pipes.api; +import net.minecraftforge.common.ForgeDirection; + public interface IHeatProducer { @@ -7,8 +9,8 @@ public interface IHeatProducer * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer * block. * @param jouls - The maximum jouls can be transfered - * @param side - The side of block in which the conductor is on + * @param up - The side of block in which the conductor is on * @return jouls - Return jouls to consumer */ - public float onProduceHeat(float jouls, int side); + public float onProduceHeat(float jouls, ForgeDirection up); } \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/IStorageTank.java b/src/common/basicpipes/pipes/api/IStorageTank.java new file mode 100644 index 00000000..a088a831 --- /dev/null +++ b/src/common/basicpipes/pipes/api/IStorageTank.java @@ -0,0 +1,5 @@ +package basicpipes.pipes.api; + +public interface IStorageTank extends ILiquidConsumer { + +} diff --git a/src/common/basicpipes/pipes/api/MHelper.java b/src/common/basicpipes/pipes/api/MHelper.java index 3bc87ba7..de2f3580 100644 --- a/src/common/basicpipes/pipes/api/MHelper.java +++ b/src/common/basicpipes/pipes/api/MHelper.java @@ -1,21 +1,23 @@ package basicpipes.pipes.api; import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import net.minecraftforge.common.ForgeDirection; public class MHelper { /** - * + * you will have to tell your TileEntity to trade up if liquid or down if gas. I suggest having your onRecieveLiquid + * pump liquid one block up if you block is full. * @param entity - entity at center of search * @return an Array containing TileEntities around the TileEntity */ - public static TileEntity[] getSourounding(TileEntity te) + public static TileEntity[] getSourounding(World world, int x, int y, int z) { TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; for(int i =0; i< 6;i++) { ForgeDirection d = ForgeDirection.getOrientation(i); - TileEntity aEntity = te.worldObj.getBlockTileEntity(te.xCoord+d.offsetX, te.yCoord+d.offsetY, te.zCoord+d.offsetZ); + TileEntity aEntity = world.getBlockTileEntity(x+d.offsetX, y+d.offsetY, z+d.offsetZ); if(aEntity instanceof TileEntity) { list[i] = aEntity; @@ -30,37 +32,64 @@ public class MHelper { * @param vol - the volume to be traded * @return the remaining untraded liquid */ - public static int shareLiquid(TileEntity te, Liquid type,int vol) + public static int shareLiquid(World world, int x, int y, int z,int vol,int max, Liquid type) { + TileEntity ent = world.getBlockTileEntity(x, y, z); int currentVol = vol; + + int tCount = 1; boolean rise = type.isGas; - ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); - TileEntity first = te.worldObj.getBlockTileEntity(te.xCoord+st.offsetX, te.yCoord+st.offsetX, te.zCoord+st.offsetX); - //trades to the first, bottom for liquid, top for gas - if(first instanceof ILiquidConsumer && ((ILiquidConsumer) first).getStoredLiquid(type) < ((ILiquidConsumer) first).getLiquidCapacity(type)) + if(currentVol <= 0) { - currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, vol, st); + return 0; } + + + ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); + TileEntity first = world.getBlockTileEntity(x+st.offsetX, y+st.offsetY, z+st.offsetZ); + //trades to the first, bottom for liquid, top for gas + if(first instanceof IStorageTank && currentVol > 0 && ((IStorageTank) first).getStoredLiquid(type) < ((IStorageTank) first).getLiquidCapacity(type)) + { + currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, currentVol, st); + } + int vAve = currentVol; + TileEntity[] TeA = MHelper.getSourounding(world,x,y,z); + for(int i = 2; i < 6; i++) + { + if(TeA[i] instanceof IStorageTank) + { + vAve += ((IStorageTank)TeA[i]).getStoredLiquid(type); + tCount++; + } + } + vAve = (int)(vAve/tCount); //trades to side if anything is left for(int i = 2; i < 6;i++) { ForgeDirection side = ForgeDirection.getOrientation(i); - TileEntity sSide = te.worldObj.getBlockTileEntity(te.xCoord+side.offsetX, te.yCoord+side.offsetX, te.zCoord+side.offsetX); - if(sSide instanceof ILiquidConsumer && ((ILiquidConsumer) sSide).getStoredLiquid(type) < ((ILiquidConsumer) sSide).getLiquidCapacity(type) - && currentVol > 0) + TileEntity sSide = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); + if(currentVol <= 0 || currentVol <= vAve) { - currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, vol, st); + break; + } + if(sSide instanceof IStorageTank &&((IStorageTank) sSide).getStoredLiquid(type) < vAve) + { + int tA = vAve -Math.max((vAve - currentVol), 0); + currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, tA, st) -tA + currentVol; } } //trades to the opposite of the first if anything is left + /** + * need to find a way to solve it just trading back the ammount on next cycle if(currentVol > 0) { - TileEntity last = te.worldObj.getBlockTileEntity(te.xCoord+st.getOpposite().offsetX, te.yCoord+st.getOpposite().offsetX, te.zCoord+st.getOpposite().offsetX); - if(last instanceof ILiquidConsumer && ((ILiquidConsumer) last).getStoredLiquid(type) < ((ILiquidConsumer) last).getLiquidCapacity(type)) + TileEntity last = world.getBlockTileEntity(x+st.getOpposite().offsetX, y+st.getOpposite().offsetY, z+st.getOpposite().offsetZ); + if(last instanceof IStorageTank && currentVol == max) { - currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, vol, st); + currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, max/10, st.getOpposite()) + currentVol -(max/10); } } + */ return Math.max(currentVol,0); } /** @@ -72,7 +101,7 @@ public class MHelper { */ public static int corner(TileEntity entity) { - TileEntity[] en = getSourounding(entity); + TileEntity[] en = getSourounding(entity.worldObj, entity.xCoord,entity.yCoord,entity.zCoord); if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) { return 3; diff --git a/src/common/steampower/turbine/ContainerGenerator.java b/src/common/steampower/ContainerFake.java similarity index 80% rename from src/common/steampower/turbine/ContainerGenerator.java rename to src/common/steampower/ContainerFake.java index 98d9f06c..922a6751 100644 --- a/src/common/steampower/turbine/ContainerGenerator.java +++ b/src/common/steampower/ContainerFake.java @@ -1,16 +1,18 @@ -package steampower.turbine; +package steampower; import net.minecraft.src.Container; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; import net.minecraft.src.InventoryPlayer; import net.minecraft.src.ItemStack; import net.minecraft.src.Slot; +import net.minecraft.src.TileEntity; -public class ContainerGenerator extends Container +public class ContainerFake extends Container { - private TileEntitySteamPiston tileEntity; + private IInventory tileEntity; - public ContainerGenerator(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) + public ContainerFake(InventoryPlayer par1InventoryPlayer, IInventory tileEntity) { this.tileEntity = tileEntity; // this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 45d4f10b..b49597bc 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -24,7 +24,7 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "1.7",dependencies = "after:basicPipes") +@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9",dependencies = "after:basicPipes") @NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain{ diff --git a/src/common/steampower/SteamProxy.java b/src/common/steampower/SteamProxy.java index d447c2f4..bd8048a2 100644 --- a/src/common/steampower/SteamProxy.java +++ b/src/common/steampower/SteamProxy.java @@ -1,13 +1,12 @@ package steampower; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; import net.minecraft.src.TileEntity; import net.minecraft.src.World; -import steampower.boiler.ContainerBoiler; import steampower.boiler.TileEntityBoiler; import steampower.burner.ContainerFireBox; import steampower.burner.TileEntityFireBox; -import steampower.turbine.ContainerGenerator; import steampower.turbine.TileEntityGen; import steampower.turbine.TileEntitySteamPiston; import cpw.mods.fml.common.network.IGuiHandler; @@ -58,9 +57,8 @@ public class SteamProxy implements IGuiHandler{ { switch(ID) { - case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - case 1: return new ContainerBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new ContainerGenerator(player.inventory, ((TileEntitySteamPiston)tileEntity)); + case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + default: return new ContainerFake(player.inventory, (IInventory) tileEntity); } } diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index bb825a75..cd5d9242 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -84,8 +84,9 @@ public class TileEntityMachine extends TileEntity implements IInventory, ISided } public boolean needUpdate() { - return false; + return true; } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/common/steampower/boiler/ContainerBoiler.java b/src/common/steampower/boiler/ContainerBoiler.java deleted file mode 100644 index cab29942..00000000 --- a/src/common/steampower/boiler/ContainerBoiler.java +++ /dev/null @@ -1,58 +0,0 @@ -package steampower.boiler; -import net.minecraft.src.*; - -public class ContainerBoiler extends Container -{ - private TileEntityBoiler boiler; - private int lastCookTime = 0; - private int lastBurnTime = 0; - private int lastItemBurnTime = 0; - - public ContainerBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityboiler) - { - this.boiler = par2TileEntityboiler; - this.addSlotToContainer(new Slot(par2TileEntityboiler, 0, 56, 17)); - int line; - for (line = 0; line < 3; ++line) - { - for (int slot = 0; slot < 9; ++slot) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, slot + line * 9 + 9, 8 + slot * 18, 84 + line * 18)); - } - } - - for (line = 0; line < 9; ++line) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, line, 8 + line * 18, 142)); - } - } - - - - public void updateProgressBar(int par1, int par2) - { - if (par1 == 0) - { - // this.boiler.furnaceCookTime = par2; - } - - if (par1 == 1) - { - //this.boiler.boilerRunTime = par2; - } - - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.boiler.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index 8af9e00b..afabf5d7 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -6,6 +6,7 @@ import net.minecraft.src.EntityPlayer; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; @@ -13,323 +14,244 @@ import net.minecraftforge.common.ForgeDirection; import steampower.SteamPowerMain; import steampower.TileEntityMachine; import universalelectricity.network.IPacketReceiver; +import basicpipes.conductors.TileEntityPipe; import basicpipes.pipes.api.IHeatProducer; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IStorageTank; import basicpipes.pipes.api.Liquid; import basicpipes.pipes.api.MHelper; import com.google.common.io.ByteArrayDataInput; -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, ILiquidConsumer +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, IStorageTank { + public int steam = 0; + public int water = 0; + public int heat = 0; + public int hullHeat = 0; + public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; + public int tankCount = 0; + public int tickCount = 0; - /** - * The ItemStacks that hold the items currently being used in the furnace - */ - - - /** The number of ticks that the boiler will keep burning */ - public int RunTime = 0; - /** The ammount of water stored */ - public int waterStored = 0; - /** The ammount of steam stored */ - public int steamStored = 0; - /** The ammount of heat stored */ - public int heatStored = 0; - public int heatMax = 10000; - /** The ammount of heat stored */ - public int hullHeat = 0; - public int hullHeatMax = 4700; - private int heatTick = 0; - public int tankCount = 0; - private int heatNeeded = SteamPowerMain.boilerHeat; // kilo joules - int count = 0; - boolean hullHeated = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - int steamMax = 140; - public boolean isBeingHeated = false; - private Random random = new Random(); - private int pWater = 0; - private int pSteam = 0; - private int pHullH = 0; - public String getInvName() - { - return "container.boiler"; - } - public Object[] getSendData() + //----------------------------- + //Update stuff + //----------------------------- + @Override + public void updateEntity() + { + //update connection list used for rendering + this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + this.tankCount = 0; + for(int i =0; i < connectedBlocks.length; i++) { - return new Object[]{(int)RunTime,(int)waterStored, - (int)steamStored,(int)heatStored,(int)hullHeat,(int)heatTick}; - } - - @Override - public void handlePacketData(NetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try + if(connectedBlocks[i] != null) { - - RunTime = dataStream.readInt(); - waterStored = dataStream.readInt(); - steamStored = dataStream.readInt(); - heatStored = dataStream.readInt(); - hullHeat = dataStream.readInt(); - heatTick = dataStream.readInt(); + tankCount++; } - catch(Exception e) - { - e.printStackTrace(); - } - - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.RunTime = par1NBTTagCompound.getShort("BurnTime"); - this.steamStored = par1NBTTagCompound.getInteger("steamStore"); - this.heatStored = par1NBTTagCompound.getInteger("heatStore"); - this.waterStored = par1NBTTagCompound.getInteger("waterStore"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setShort("BurnTime", (short)this.RunTime); - par1NBTTagCompound.setInteger("steamStore", (int)this.steamStored); - par1NBTTagCompound.setInteger("heatStore", (int)this.heatStored); - par1NBTTagCompound.setInteger("waterStore", (int)this.waterStored); - par1NBTTagCompound.setInteger("hullHeat", (int)this.hullHeat); - - } - /** - * Allows the entity to update its state. Overridden in most subclasses, e.g. the mob spawner uses this to count - * ticks and creates a new spawn inside its implementation. - */ - public boolean needUpdate() + }//end connection update + if(tickCount++ >= 10 && !worldObj.isRemote) { - if(this.pWater != this.waterStored || this.pSteam != this.steamStored || this.pHullH != this.hullHeat) - { - return true; - } - return false; - } - @Override - public void updateEntity() - { - super.updateEntity(); - if(count++ >=20) - { - count = 0; - //update/resets connection list - TileEntity[] entityList = MHelper.getSourounding(this); - tankCount = 0; - for(int c = 0; c< 6; c++) - { - if(entityList[c] instanceof TileEntityBoiler) - { - connectedBlocks[c] = entityList[c]; - if(c != 0 && c != 1) - { - tankCount++; - } - } - else - { - connectedBlocks[c] = null; - } - } - - hullHeated = false; - if(hullHeat >= hullHeatMax) - { - hullHeated = true; - } - else - { - if(!worldObj.isRemote) - { - hullHeat = Math.min(hullHeat + heatStored, hullHeatMax); - } - } + tickCount = 0; - if(!worldObj.isRemote) - { - - - emptyBuckets(); - - //adds water from container slot - this.waterStored = MHelper.shareLiquid(this, Liquid.WATER, this.waterStored); - this.steamStored = MHelper.shareLiquid(this, Liquid.STEAM, this.steamStored); - - - if(waterStored > 0 && hullHeated && heatStored > heatNeeded) - { - heatStored = Math.max(heatStored - heatNeeded, 0); - --waterStored; - steamStored = Math.min(steamStored + 20,this.steamMax); - } - - TileEntity blockE = worldObj.getBlockTileEntity(xCoord, yCoord -1, zCoord); - this.isBeingHeated = false; - if(blockE instanceof IHeatProducer) - { - this.isBeingHeated = true; - heatStored = (int) Math.min((heatStored + ((IHeatProducer)blockE).onProduceHeat(250, 1)), heatMax); - } - else if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) - { - heatStored += (int) Math.min((int)(random.nextDouble()*100), heatMax); - } - //keeps track of what the previous measure were so packets stop sending after the machine doesn't change any - this.pWater = this.waterStored; - this.pSteam = this.steamStored; - this.pHullH = this.hullHeat; - } - - } - } - private void emptyBuckets() - { - if (storedItems[0] != null) - { - if(storedItems[0].isItemEqual(new ItemStack(Item.bucketWater,1))) - { - if((int)waterStored < getLiquidCapacity(Liquid.WATER)) - { - ++waterStored; - this.storedItems[0] = new ItemStack(Item.bucketEmpty,1); - this.onInventoryChanged(); - } - } - if(storedItems[0].isItemEqual(new ItemStack(Block.ice,1))) - { - if((int)waterStored < getLiquidCapacity(Liquid.WATER) && this.heatStored > 100) - { - ++waterStored; - int stacksize = this.storedItems[0].stackSize; - if(stacksize > 1) - { - this.storedItems[0] = new ItemStack(Block.ice,stacksize -1); - } - if(stacksize == 1) - { - this.storedItems[0] = null; - } - this.heatStored-=100; - this.onInventoryChanged(); - } - } - } - - } - public int precentHeated() { - int var1 = 0; - if(hullHeat < 100) + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if(ent instanceof IHeatProducer) { - var1 = (int)(100 *(hullHeat/hullHeatMax)); + this.heat = (int) Math.min(((IHeatProducer)ent).onProduceHeat(250, ForgeDirection.UP)+heat,2000); + }else + if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) + { + this.heat = Math.min(90+heat,2000); + } + if(hullHeat < 10000) + { + int mHeat = 10000 - hullHeat; + int hHeat = mHeat - Math.max((mHeat - this.heat),0); + hullHeat = Math.min(hullHeat + hHeat,10000); + this.heat -=hHeat; + }else + { + if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + this.water--; + this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); + this.heat -= 2000; + } + this.hullHeat-=5; + } + this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); + this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); + } + super.updateEntity(); + } + //----------------------------- + //Liquid stuff + //----------------------------- + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) + { + if(type == Liquid.WATER) + { + if(this.water < this.getLiquidCapacity(Liquid.WATER)) + { + int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); + this.water += vol - rej; + return rej; } else { - var1 = 100; - } - return var1; - } - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - int rejectedSteam = Math.max((this.steamStored + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); - this.steamStored += vol - rejectedSteam; - return rejectedSteam; - } - if(type == Liquid.WATER) - { - int rejectedWater = Math.max((this.waterStored + vol) - this.getLiquidCapacity(Liquid.WATER), 0); - this.waterStored += vol - rejectedWater; - return rejectedWater; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type,ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.waterStored; - } - if(type == Liquid.STEAM) - { - return this.steamStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type ==Liquid.WATER) - { - return 14; - } - if(type == Liquid.STEAM) - { - return steamMax; - } - return 0; - } - @Override - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - if(steamStored > 1) + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if( te instanceof IStorageTank) { - this.steamStored -= 1; - return 1; + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); } } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return (this.steamStored/this.steamMax)*40 +60; - } - return 0; - } - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) + }else + if(type == Liquid.STEAM) { - if(type == Liquid.STEAM) + if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) { - return true; + int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); + this.steam += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } } - return false; } + return vol; } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { + if(type == Liquid.WATER) + { + return true; + }else + if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) + { + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return 14; + }else + if(type == Liquid.STEAM) + { + return 140; + } + return 0; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) + { + //TODO setup the actual math for this + if(vol < this.steam) + { + this.steam -= vol; + return vol; + }else + if(this.steam >= 1) + { + this.steam -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return 100; + } + return 0; + } + //----------------------------- + //Data + //----------------------------- + public Object[] getSendData() + { + return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; + } + @Override + public void handlePacketData(NetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + this.water = dataStream.readInt(); + this.steam = dataStream.readInt(); + this.heat = dataStream.readInt(); + this.hullHeat = dataStream.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + } + + } + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("water", this.water); + par1NBTTagCompound.setInteger("steam", this.steam); + par1NBTTagCompound.setInteger("heat", this.heat); + par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.water = par1NBTTagCompound.getInteger("water"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.heat = par1NBTTagCompound.getInteger("heat"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + +} diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 8da2df02..21c299ae 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -8,6 +8,7 @@ import net.minecraft.src.NBTTagCompound; import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import steampower.SteamPowerMain; import steampower.TileEntityMachine; @@ -87,7 +88,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei this.itemCookTime --; if(isConnected) { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/20); + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/10); } } //Loose heat when the generator is not connected or if there is no coal in the inventory. @@ -142,7 +143,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei public void addConnection() { connectedUnits = 0; - TileEntity[] aEntity = MHelper.getSourounding(this); + TileEntity[] aEntity = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); for(int i = 0; i<6; i++) { @@ -180,9 +181,12 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei public String getInvName() { return "FireBox"; } - public float onProduceHeat(float jouls, int side) { - // TODO Auto-generated method stub - return Math.min(generateRate*getTickInterval(),jouls); + public float onProduceHeat(float jouls, ForgeDirection side) { + if(side == ForgeDirection.UP) + { + return Math.min(generateRate,jouls); + } + return 0; } @Override public Object[] getSendData() diff --git a/src/minecraft/basicpipes/RenderPipe.java b/src/minecraft/basicpipes/RenderPipe.java index 966ce875..39eaa0b9 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/src/minecraft/basicpipes/RenderPipe.java @@ -30,14 +30,11 @@ public class RenderPipe extends TileEntitySpecialRenderer //Texture file type = tileEntity.getType(); - size = tileEntity.getSize(); GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); - if(size == 6) - { switch(type.ordinal()) { case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; @@ -53,7 +50,6 @@ public class RenderPipe extends TileEntitySpecialRenderer if(tileEntity.connectedBlocks[5] != null) SixPipe.renderRight(); if(tileEntity.connectedBlocks[4] != null) SixPipe.renderLeft(); SixPipe.renderMiddle(); - } GL11.glPopMatrix(); } diff --git a/src/minecraft/steampower/GUISteamPiston.java b/src/minecraft/steampower/GUISteamPiston.java index 9ec3949c..1fda55ad 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/src/minecraft/steampower/GUISteamPiston.java @@ -6,7 +6,6 @@ import net.minecraft.src.StatCollector; import org.lwjgl.opengl.GL11; -import steampower.turbine.ContainerGenerator; import steampower.turbine.TileEntitySteamPiston; import universalelectricity.electricity.ElectricInfo; import universalelectricity.electricity.ElectricInfo.ElectricUnit; @@ -20,7 +19,7 @@ import universalelectricity.electricity.ElectricInfo.ElectricUnit; public GUISteamPiston(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) { - super(new ContainerGenerator(par1InventoryPlayer, tileEntity)); + super(new ContainerFake(par1InventoryPlayer, tileEntity)); this.tileEntity = tileEntity; } diff --git a/src/minecraft/steampower/GuiBoiler.java b/src/minecraft/steampower/GuiBoiler.java index d42e2c62..1a5a3a6d 100644 --- a/src/minecraft/steampower/GuiBoiler.java +++ b/src/minecraft/steampower/GuiBoiler.java @@ -7,10 +7,8 @@ import net.minecraft.src.StatCollector; import org.lwjgl.opengl.GL11; -import basicpipes.pipes.api.Liquid; - -import steampower.boiler.ContainerBoiler; import steampower.boiler.TileEntityBoiler; +import basicpipes.pipes.api.Liquid; public class GuiBoiler extends GuiContainer { @@ -18,7 +16,7 @@ public class GuiBoiler extends GuiContainer public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) { - super(new ContainerBoiler(par1InventoryPlayer, par2TileEntityGrinder)); + super(new ContainerFake(par1InventoryPlayer, par2TileEntityGrinder)); this.boilerInventory = par2TileEntityGrinder; } @@ -51,23 +49,27 @@ public class GuiBoiler extends GuiContainer int var8; int var9; int var10; - if (this.boilerInventory.waterStored > 0) + if (this.boilerInventory.getStoredLiquid(Liquid.WATER)> 0) { var7 = boilerInventory.getStoredLiquid(Liquid.WATER)*4 + 1; this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); } - if (this.boilerInventory.steamStored > 0) + if (this.boilerInventory.getStoredLiquid(Liquid.STEAM) > 0) { - var8 = boilerInventory.steamStored/14*4 + 1; + var8 = boilerInventory.getStoredLiquid(Liquid.STEAM)/14*4 + 1; this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); } float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); var9 = (int) Math.min(precentH*3.0F,30); this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); - float precentSH = this.boilerInventory.heatStored/1000; + float precentSH = this.boilerInventory.heat/1000; var10 = (int) Math.round(precentSH*5.33); this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); + //debug + this.fontRenderer.drawString("NonGraphic Debug", (int)(200), 90, 000000); + this.fontRenderer.drawString("Water:"+this.boilerInventory.water+"/14", (int)(200), 100, 000000); + this.fontRenderer.drawString("Steam:"+this.boilerInventory.steam+"/140", (int)(200), 110, 000000); } public static String getWattDisplay(int watts) From b5ac6766109daba1d5a9efb53d421be91e1457f0 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 19 Oct 2012 01:48:58 -0400 Subject: [PATCH 101/115] Version bump really testing jenkins build process too see if its doing it job but i did forget to update version numbers --- BasicPipesVersion.txt | 2 +- SteamPowerVersion.txt | 2 +- src/common/basicpipes/mcmod.info | 4 ++-- src/common/steampower/mcmod.info | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt index 46843749..872765e5 100644 --- a/BasicPipesVersion.txt +++ b/BasicPipesVersion.txt @@ -1 +1 @@ -1.8 \ No newline at end of file +1.9 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt index 46843749..872765e5 100644 --- a/SteamPowerVersion.txt +++ b/SteamPowerVersion.txt @@ -1 +1 @@ -1.8 \ No newline at end of file +1.9 \ No newline at end of file diff --git a/src/common/basicpipes/mcmod.info b/src/common/basicpipes/mcmod.info index f71701bd..68358513 100644 --- a/src/common/basicpipes/mcmod.info +++ b/src/common/basicpipes/mcmod.info @@ -2,8 +2,8 @@ { "modid": "basicPipes", "name": "Basic Pipes", - "description": "Simple liquid transport system for UE based mods", - "version": "1.8", + "description": "Simple liquid pumping & storage system for UE based mods. Can pump several types of common liquids including water,lava,oil,and Fuel.", + "version": "1.9", "mcversion": "1.3.2", "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", "updateUrl": "", diff --git a/src/common/steampower/mcmod.info b/src/common/steampower/mcmod.info index bba7821a..14d8b129 100644 --- a/src/common/steampower/mcmod.info +++ b/src/common/steampower/mcmod.info @@ -2,7 +2,7 @@ { "modid": "SteamPower", "name": "Steam Power", - "description": "Basic coal fired power plant generator pack for UE", + "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", "version": "1.8", "mcversion": "1.3.2", "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", From 168cf1f0497a8df2ee28e5d11e943d2c9b48329a Mon Sep 17 00:00:00 2001 From: Rseifert Date: Wed, 24 Oct 2012 18:55:14 -0400 Subject: [PATCH 102/115] PC: Auto upload --- src/common/basicpipes/BasicPipesMain.java | 2 +- .../railcraft/common/api/carts/CartBase.java | 118 ------ .../railcraft/common/api/carts/CartTools.java | 364 ----------------- .../api/carts/ICartRenderInterface.java | 24 -- .../common/api/carts/IEnergyTransfer.java | 82 ---- .../common/api/carts/IItemTransfer.java | 65 --- .../common/api/carts/ILinkableCart.java | 77 ---- .../common/api/carts/ILinkageManager.java | 102 ----- .../common/api/carts/ILiquidTransfer.java | 53 --- .../railcraft/common/api/carts/IMinecart.java | 52 --- .../common/api/carts/TransferCartBase.java | 252 ------------ .../common/api/carts/bore/IBoreHead.java | 37 -- .../common/api/carts/bore/IMineable.java | 36 -- .../common/api/core/INetworkedObject.java | 16 - .../common/api/core/IPostConnection.java | 27 -- .../common/api/core/WorldCoordinate.java | 78 ---- .../api/core/items/BallastRegistry.java | 93 ----- .../common/api/core/items/EnumItemType.java | 47 --- .../common/api/core/items/IMinecartItem.java | 39 -- .../common/api/core/items/ITrackItem.java | 46 --- .../common/api/core/items/ItemRegistry.java | 93 ----- .../IBlastFurnaceCraftingManager.java | 25 -- .../api/crafting/IBlastFurnaceRecipe.java | 21 - .../crafting/ICokeOvenCraftingManager.java | 26 -- .../common/api/crafting/ICokeOvenRecipe.java | 20 - .../crafting/IRockCrusherCraftingManager.java | 35 -- .../api/crafting/IRockCrusherRecipe.java | 37 -- .../IRollingMachineCraftingManager.java | 23 -- .../crafting/RailcraftCraftingManager.java | 16 - .../common/api/signals/EnumSignalAspect.java | 155 ------- .../common/api/signals/IBlockSignal.java | 47 --- .../common/api/signals/ISignalController.java | 45 -- .../common/api/signals/ISignalReceiver.java | 43 -- .../common/api/signals/SignalTools.java | 159 -------- .../common/api/tracks/ITrackCustomPlaced.java | 29 -- .../common/api/tracks/ITrackCustomShape.java | 24 -- .../common/api/tracks/ITrackEmitter.java | 22 - .../common/api/tracks/ITrackInstance.java | 123 ------ .../common/api/tracks/ITrackLockdown.java | 18 - .../common/api/tracks/ITrackPowered.java | 24 -- .../common/api/tracks/ITrackReversable.java | 17 - .../common/api/tracks/ITrackSwitch.java | 21 - .../common/api/tracks/ITrackTile.java | 13 - .../common/api/tracks/RailTools.java | 175 -------- .../common/api/tracks/TrackInstanceBase.java | 385 ------------------ .../common/api/tracks/TrackRegistry.java | 62 --- .../common/api/tracks/TrackSpec.java | 86 ---- src/common/steampower/SteamPowerMain.java | 10 +- 48 files changed, 6 insertions(+), 3358 deletions(-) delete mode 100644 src/common/railcraft/common/api/carts/CartBase.java delete mode 100644 src/common/railcraft/common/api/carts/CartTools.java delete mode 100644 src/common/railcraft/common/api/carts/ICartRenderInterface.java delete mode 100644 src/common/railcraft/common/api/carts/IEnergyTransfer.java delete mode 100644 src/common/railcraft/common/api/carts/IItemTransfer.java delete mode 100644 src/common/railcraft/common/api/carts/ILinkableCart.java delete mode 100644 src/common/railcraft/common/api/carts/ILinkageManager.java delete mode 100644 src/common/railcraft/common/api/carts/ILiquidTransfer.java delete mode 100644 src/common/railcraft/common/api/carts/IMinecart.java delete mode 100644 src/common/railcraft/common/api/carts/TransferCartBase.java delete mode 100644 src/common/railcraft/common/api/carts/bore/IBoreHead.java delete mode 100644 src/common/railcraft/common/api/carts/bore/IMineable.java delete mode 100644 src/common/railcraft/common/api/core/INetworkedObject.java delete mode 100644 src/common/railcraft/common/api/core/IPostConnection.java delete mode 100644 src/common/railcraft/common/api/core/WorldCoordinate.java delete mode 100644 src/common/railcraft/common/api/core/items/BallastRegistry.java delete mode 100644 src/common/railcraft/common/api/core/items/EnumItemType.java delete mode 100644 src/common/railcraft/common/api/core/items/IMinecartItem.java delete mode 100644 src/common/railcraft/common/api/core/items/ITrackItem.java delete mode 100644 src/common/railcraft/common/api/core/items/ItemRegistry.java delete mode 100644 src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java delete mode 100644 src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java delete mode 100644 src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java delete mode 100644 src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java delete mode 100644 src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java delete mode 100644 src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java delete mode 100644 src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java delete mode 100644 src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java delete mode 100644 src/common/railcraft/common/api/signals/EnumSignalAspect.java delete mode 100644 src/common/railcraft/common/api/signals/IBlockSignal.java delete mode 100644 src/common/railcraft/common/api/signals/ISignalController.java delete mode 100644 src/common/railcraft/common/api/signals/ISignalReceiver.java delete mode 100644 src/common/railcraft/common/api/signals/SignalTools.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackCustomShape.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackEmitter.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackInstance.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackLockdown.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackPowered.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackReversable.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackSwitch.java delete mode 100644 src/common/railcraft/common/api/tracks/ITrackTile.java delete mode 100644 src/common/railcraft/common/api/tracks/RailTools.java delete mode 100644 src/common/railcraft/common/api/tracks/TrackInstanceBase.java delete mode 100644 src/common/railcraft/common/api/tracks/TrackRegistry.java delete mode 100644 src/common/railcraft/common/api/tracks/TrackSpec.java diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 6bbb2c7a..e243429f 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -141,7 +141,7 @@ public class BasicPipesMain{ GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); //fuel GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,0),'@',Block.lever});//valve + GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,1),'@',Block.lever});//valve GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',Item.ingotIron});//tank GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,0), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,15)}); diff --git a/src/common/railcraft/common/api/carts/CartBase.java b/src/common/railcraft/common/api/carts/CartBase.java deleted file mode 100644 index d3403ba1..00000000 --- a/src/common/railcraft/common/api/carts/CartBase.java +++ /dev/null @@ -1,118 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.EntityItem; -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.minecart.MinecartInteractEvent; - -/** - * Generally minecarts should extend this class or there will be - * oddities if a user links two carts with different max speeds. - * - * It also contains some generic code that most carts will find useful. - * - * @author CovertJaguar - */ -public abstract class CartBase extends EntityMinecart implements IMinecart -{ - - private float trainSpeed = 1.2f; - - public CartBase(World world) - { - super(world); - CartTools.setCartOwner(this, "[Railcraft]"); - } - - public World getWorld() - { - return worldObj; - } - - @Override - public final float getMaxSpeedRail() - { - return Math.min(getCartMaxSpeed(), trainSpeed); - } - - @Override - public float getCartMaxSpeed() - { - return 1.2f; - } - - @Override - public final void setTrainSpeed(float speed) - { - this.trainSpeed = speed; - } - - @Override - public final boolean interact(EntityPlayer player) - { - if(MinecraftForge.EVENT_BUS.post(new MinecartInteractEvent(this, player))) { - return true; - } - if(CartTools.getCartOwner(this).equals("[Railcraft]")) { - CartTools.setCartOwner(this, player); - } - return doInteract(player); - } - - public boolean doInteract(EntityPlayer player) - { - return super.interact(player); - } - - @Override - public boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart) - { - if(stack == null || cart == null) { - return false; - } - ItemStack cartItem = cart.getCartItem(); - return cartItem != null && stack.isItemEqual(cartItem); - } - - @Override - public void setDead() - { - for(int var1 = 0; var1 < this.getSizeInventory(); ++var1) { - ItemStack var2 = this.getStackInSlot(var1); - this.setInventorySlotContents(var1, null); - - if(!worldObj.isRemote && var2 != null) { - float var3 = this.rand.nextFloat() * 0.8F + 0.1F; - float var4 = this.rand.nextFloat() * 0.8F + 0.1F; - float var5 = this.rand.nextFloat() * 0.8F + 0.1F; - - while(var2.stackSize > 0) { - int var6 = this.rand.nextInt(21) + 10; - - if(var6 > var2.stackSize) { - var6 = var2.stackSize; - } - - var2.stackSize -= var6; - EntityItem var7 = new EntityItem(this.worldObj, this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, new ItemStack(var2.itemID, var6, var2.getItemDamage())); - - if(var2.hasTagCompound()) { - var7.item.setTagCompound((NBTTagCompound)var2.getTagCompound().copy()); - } - - float var8 = 0.05F; - var7.motionX = (double)((float)this.rand.nextGaussian() * var8); - var7.motionY = (double)((float)this.rand.nextGaussian() * var8 + 0.2F); - var7.motionZ = (double)((float)this.rand.nextGaussian() * var8); - this.worldObj.spawnEntityInWorld(var7); - } - } - } - - super.setDead(); - } -} diff --git a/src/common/railcraft/common/api/carts/CartTools.java b/src/common/railcraft/common/api/carts/CartTools.java deleted file mode 100644 index c889872d..00000000 --- a/src/common/railcraft/common/api/carts/CartTools.java +++ /dev/null @@ -1,364 +0,0 @@ -package railcraft.common.api.carts; - -import railcraft.common.api.core.items.IMinecartItem; -import cpw.mods.fml.common.registry.EntityRegistry; -import java.util.ArrayList; -import java.util.List; -import net.minecraft.src.AxisAlignedBB; -import net.minecraft.src.BlockRail; -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemMinecart; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -public abstract class CartTools -{ - - public static ILinkageManager serverLinkageManager; - - /** - * Registers a subclass of EntityMinecart with the game engine. - * - * This is just a convenience function, it is not required to call this function - * if you call ModLoader.registerEntityID() and MinecraftForge.registerEntity() - * elsewhere. - * - * @param mod The mod doing the registration - * @param type The class of the cart - * @param tag The String identifier - * @param internalId The mods internal entity id - */ - public static void registerMinecart(Object mod, Class type, String tag, int internalId) { - EntityRegistry.registerModEntity(type, tag, internalId, mod, 80, 3, true); - } - - /** - * Returns an instance of ILinkageManager. - * - * Will return null if Railcraft is not installed. - * - * @param world The World, may be required in the future - * @return an instance of ILinkageManager - */ - public static ILinkageManager getLinkageManager(World world) { - return serverLinkageManager; - } - - /** - * Sets a carts owner. - * - * The is really only needed by the bukkit ports. - * - * @param owner - */ - public static void setCartOwner(EntityMinecart cart, EntityPlayer owner) { - cart.getEntityData().setString("owner", owner.username); - } - - /** - * Sets a carts owner. - * - * The is really only needed by the bukkit ports. - * - * @param owner - */ - public static void setCartOwner(EntityMinecart cart, String owner) { - cart.getEntityData().setString("owner", owner); - } - - /** - * Gets a carts owner. (player.username) - * - * The is really only needed by the bukkit ports. - * - * @param owner - */ - public static String getCartOwner(EntityMinecart cart) { - return cart.getEntityData().getString("owner"); - } - - /** - * Will return true if the cart matches the provided filter item. - * - * @param stack the Filter - * @param cart the Cart - * @return true if the item matches the cart - * @see IMinecart - */ - public static boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart) { - if(stack == null) { - return false; - } - if(cart instanceof IMinecart) { - return ((IMinecart)cart).doesCartMatchFilter(stack, cart); - } - ItemStack cartItem = cart.getCartItem(); - return cartItem != null && isItemEqual(stack, cartItem); - } - - private static boolean isItemEqual(ItemStack a, ItemStack b) { - if(a == null || b == null) { - return false; - } - if(a.itemID != b.itemID) { - return false; - } - if(a.stackTagCompound != null && !a.stackTagCompound.equals(b.stackTagCompound)) { - return false; - } - if(a.getHasSubtypes() && (a.getItemDamage() == -1 || b.getItemDamage() == -1)) { - return true; - } - if(a.getHasSubtypes() && a.getItemDamage() != b.getItemDamage()) { - return false; - } - return true; - } - - /** - * Spawns a new cart entity using the provided item. - * - * The backing item must implement IMinecartItem - * and/or extend ItemMinecart. - * - * Generally Forge requires all cart items to extend ItemMinecart. - * - * @param owner The player name that should used as the owner - * @param cart An ItemStack containing a cart item, will not be changed by the function - * @param world The World object - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @return the cart placed or null if failed - * @see IMinecartItem, ItemMinecart - */ - public static EntityMinecart placeCart(String owner, ItemStack cart, World world, int i, int j, int k) { - if(cart == null) { - return null; - } - cart = cart.copy(); - if(cart.getItem() instanceof IMinecartItem) { - IMinecartItem mi = (IMinecartItem)cart.getItem(); - return mi.placeCart(owner, cart, world, i, j, k); - } else if(cart.getItem() instanceof ItemMinecart) { - try { - boolean placed = cart.getItem().onItemUse(cart, null, world, i, j, k, 0, 0, 0, 0); - if(placed) { - List carts = getMinecartsAt(world, i, j, k, 0.3f); - if(carts.size() > 0) { - setCartOwner(carts.get(0), owner); - return carts.get(0); - } - } - } catch (Exception e) { - return null; - } - } - - return null; - } - - /** - * Offers an item stack to linked carts or drops it if no one wants it. - * @param cart - * @param stack - */ - public static void offerOrDropItem(EntityMinecart cart, ItemStack stack) { - EntityMinecart link_A = getLinkageManager(cart.worldObj).getLinkedCartA(cart); - EntityMinecart link_B = getLinkageManager(cart.worldObj).getLinkedCartB(cart); - - if(stack != null && stack.stackSize > 0 && link_A instanceof IItemTransfer) { - stack = ((IItemTransfer)link_A).offerItem(cart, stack); - } - if(stack != null && stack.stackSize > 0 && link_B instanceof IItemTransfer) { - stack = ((IItemTransfer)link_B).offerItem(cart, stack); - } - - if(stack != null && stack.stackSize > 0) { - cart.entityDropItem(stack, 1); - } - } - - public static boolean isMinecartOnRailAt(World world, int i, int j, int k, float sensitivity) { - return isMinecartOnRailAt(world, i, j, k, sensitivity, null, true); - } - - public static boolean isMinecartOnRailAt(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { - if(BlockRail.isRailBlockAt(world, i, j, k)) { - return isMinecartAt(world, i, j, k, sensitivity, type, subclass); - } - return false; - } - - public static boolean isMinecartOnAnySide(World world, int i, int j, int k, float sensitivity) { - return isMinecartOnAnySide(world, i, j, k, sensitivity, null, true); - } - - public static boolean isMinecartOnAnySide(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { - List list = new ArrayList(); - for(int side = 0; side < 6; side++) { - list.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); - } - - if(type == null) { - return !list.isEmpty(); - } else { - for(EntityMinecart cart : list) { - if((subclass && type.isInstance(cart)) || cart.getClass() == type) { - return true; - } - } - } - return false; - } - - public static boolean isMinecartAt(World world, int i, int j, int k, float sensitivity) { - return isMinecartAt(world, i, j, k, sensitivity, null, true); - } - - public static boolean isMinecartAt(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { - List list = getMinecartsAt(world, i, j, k, sensitivity); - - if(type == null) { - return !list.isEmpty(); - } else { - for(EntityMinecart cart : list) { - if((subclass && type.isInstance(cart)) || cart.getClass() == type) { - return true; - } - } - } - return false; - } - - public static List getMinecartsOnAllSides(World world, int i, int j, int k, float sensitivity) { - List carts = new ArrayList(); - for(int side = 0; side < 6; side++) { - carts.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); - } - - return carts; - } - - public static List getMinecartsOnAllSides(World world, int i, int j, int k, float sensitivity, Class type, boolean subclass) { - List list = new ArrayList(); - List carts = new ArrayList(); - for(int side = 0; side < 6; side++) { - list.addAll(getMinecartsOnSide(world, i, j, k, sensitivity, ForgeDirection.getOrientation(side))); - } - - for(EntityMinecart cart : list) { - if((subclass && type.isInstance(cart)) || cart.getClass() == type) { - carts.add(cart); - } - } - return carts; - } - - private static int getYOnSide(int y, ForgeDirection side) { - switch (side) { - case UP: - return y + 1; - case DOWN: - return y - 1; - default: - return y; - } - } - - private static int getXOnSide(int x, ForgeDirection side) { - switch (side) { - case EAST: - return x + 1; - case WEST: - return x - 1; - default: - return x; - } - } - - private static int getZOnSide(int z, ForgeDirection side) { - switch (side) { - case NORTH: - return z - 1; - case SOUTH: - return z + 1; - default: - return z; - } - } - - public static List getMinecartsOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { - return getMinecartsAt(world, getXOnSide(i, side), getYOnSide(j, side), getZOnSide(k, side), sensitivity); - } - - public static boolean isMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { - return getMinecartOnSide(world, i, j, k, sensitivity, side) != null; - } - - public static EntityMinecart getMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side) { - for(EntityMinecart cart : getMinecartsOnSide(world, i, j, k, sensitivity, side)) { - return cart; - } - return null; - } - - public static boolean isMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side, Class type, boolean subclass) { - return getMinecartOnSide(world, i, j, k, sensitivity, side, type, subclass) != null; - } - - public static EntityMinecart getMinecartOnSide(World world, int i, int j, int k, float sensitivity, ForgeDirection side, Class type, boolean subclass) { - for(EntityMinecart cart : getMinecartsOnSide(world, i, j, k, sensitivity, side)) { - if(type == null || (subclass && type.isInstance(cart)) || cart.getClass() == type) { - return cart; - } - } - return null; - } - - /** - * - * @param world - * @param i - * @param j - * @param k - * @param sensitivity Controls the size of the search box, ranges from (-inf, 0.49]. - * @return - */ - public static List getMinecartsAt(World world, int i, int j, int k, float sensitivity) { - sensitivity = Math.min(sensitivity, 0.49f); - List entities = world.getEntitiesWithinAABB(net.minecraft.src.EntityMinecart.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(i + sensitivity, j + sensitivity, k + sensitivity, i + 1 - sensitivity, j + 1 - sensitivity, k + 1 - sensitivity)); - List carts = new ArrayList(); - for(Object o : entities) { - carts.add((EntityMinecart)o); - } - return carts; - } - - public static List getMinecartsIn(World world, int i1, int j1, int k1, int i2, int j2, int k2) { - List entities = world.getEntitiesWithinAABB(net.minecraft.src.EntityMinecart.class, AxisAlignedBB.getAABBPool().addOrModifyAABBInPool(i1, j1, k1, i2, j2, k2)); - List carts = new ArrayList(); - for(Object o : entities) { - carts.add((EntityMinecart)o); - } - return carts; - } - - /** - * Returns the cart's "speed". It is not capped by the carts max speed, - * it instead returns the cart's "potential" speed. - * Used by collision and linkage logic. - * Do not use this to determine how fast a cart is currently moving. - * @param cart - * @return speed - */ - public static double getCartSpeedUncapped(EntityMinecart cart) { - return Math.sqrt(cart.motionX * cart.motionX + cart.motionZ * cart.motionZ); - } - - public static boolean cartVelocityIsLessThan(EntityMinecart cart, float vel) { - return Math.abs(cart.motionX) < vel && Math.abs(cart.motionZ) < vel; - } -} diff --git a/src/common/railcraft/common/api/carts/ICartRenderInterface.java b/src/common/railcraft/common/api/carts/ICartRenderInterface.java deleted file mode 100644 index 4fcb413f..00000000 --- a/src/common/railcraft/common/api/carts/ICartRenderInterface.java +++ /dev/null @@ -1,24 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.Block; - -/** - * Used by the renderer to renders blocks in carts. - * @author CovertJaguar - */ -public interface ICartRenderInterface -{ - - /** - * Return the block that should be rendered in the cart. - * @return The Block to render - */ - public Block getBlock(); - - /** - * Return the metadata for the block - * that should be rendered in the cart. - * @return metadata - */ - public int getBlockMetadata(); -} diff --git a/src/common/railcraft/common/api/carts/IEnergyTransfer.java b/src/common/railcraft/common/api/carts/IEnergyTransfer.java deleted file mode 100644 index 49fee703..00000000 --- a/src/common/railcraft/common/api/carts/IEnergyTransfer.java +++ /dev/null @@ -1,82 +0,0 @@ -package railcraft.common.api.carts; - -/** - * This interface is implemented by the Energy Cart - * and is used by the Energy Loaders to charge/discharge carts. - * It is roughly equivalent to the IItemTransfer interface - * and based on ElectricItem and IElectricItem. - * - * @author CovertJaguar - * @see IItemTransfer - */ -public interface IEnergyTransfer -{ - - /** - * Injects the specified amount of EU into the device. - * - * The function returns the remainder of the EU after - * any EU used is subtracted. - * - * @param source Object initiating the transfer, should be an Entity or Tile Entity - * @param amount amount of energy to transfer in EU - * @param tier tier of the source device, has to be at least as high as the target device - * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() - * @param simulate don't actually change the item, just determine the return value - * @return The amount of EU not used - */ - public int injectEnergy(Object source, int amount, int tier, boolean ignoreTransferLimit, boolean simulate, boolean passAlong); - - /** - * Requests a certain amount of EU from the device. - * - * The is function will subtract EU from the device's store of power - * and return a portion up to, but not exceeding, the amount of EU requested. - * - * @param source Object initiating the transfer, should be an Entity or Tile Entity - * @param amount amount of energy to transfer in EU - * @param tier tier of the source device, has to be at least as high as the target device - * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() - * @param simulate don't actually change the item, just determine the return value - * @param passAlong whether neighboring carts should be asked to provide any missing power. - * @return The amount of EU transferred - */ - public int extractEnergy(Object source, int amount, int tier, boolean ignoreTransferLimit, boolean simulate, boolean passAlong); - - /** - * Return true if energy can be injected into this device. - * - * @return true if can inject energy - */ - public boolean canInjectEnergy(); - - /** - * Return true if energy can be extracted from this device. - * - * @return true if can extract energy - */ - public boolean canExtractEnergy(); - - /** - * The max capacity of the device. - * - * @return max capacity - */ - public int getCapacity(); - - /** - * Returns the current energy contained in the device. - * - * @return current energy - */ - public int getEnergy(); - - public int getTier(); - - /** - * The device's transfer rate in EU/t. - * - * @return the transfer rate - */ - public int getTransferLimit(); -} diff --git a/src/common/railcraft/common/api/carts/IItemTransfer.java b/src/common/railcraft/common/api/carts/IItemTransfer.java deleted file mode 100644 index a5af647d..00000000 --- a/src/common/railcraft/common/api/carts/IItemTransfer.java +++ /dev/null @@ -1,65 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.ItemStack; -import railcraft.common.api.core.items.EnumItemType; - -/** - * This interface allows items to be passed around with out needing - * to know anything about the underlying implementation of the inventories. - * - * @author CovertJaguar - */ -public interface IItemTransfer -{ - - /** - * Offers an ItemStack to the object implementing this interface. - * This function will return null if the item is accepted in full, - * otherwise it will return whatever is rejected. - * - * @param source The Object offering the item - * @param offer The ItemStack being offered - * @return Unused or unwanted portions of offer - */ - public ItemStack offerItem(Object source, ItemStack offer); - - /** - * Requests an ItemStack from the object implementing this interface. - * It is up to the object implementing this interface to determine which - * ItemStack to return, or none at all. - * - * @param source The Object submitting the request - * @return An ItemStack to fulfill the request or null if refused. - */ - public ItemStack requestItem(Object source); - - /** - * Requests an ItemStack from the object implementing this interface - * that matches the request parameter. - * It is up to the object implementing this interface to - * determine which ItemStack to return, or none at all. - * However, if the return value is not null - * it should fulfill the following condition:
- * InventoryTools.isItemEqual(it.requestItem(this,request), request) == true - * - * @param source The Object submitting the request - * @param request The type of item requested - * @return An ItemStack to fulfill the request or null if refused. - */ - public ItemStack requestItem(Object source, ItemStack request); - - /** - * Requests an ItemStack from the object implementing this interface - * that matches the request parameter. - * It is up to the object implementing this interface to - * determine which ItemStack to return, or none at all. - * However, if the return value is not null - * it should fulfill the following condition:
- * EnumItemType.isItemType(it.requestItem(this,request), request) == true - * - * @param source The Object submitting the request - * @param request The type of item requested - * @return An ItemStack to fulfill the request or null if refused. - */ - public ItemStack requestItem(Object source, EnumItemType request); -} diff --git a/src/common/railcraft/common/api/carts/ILinkableCart.java b/src/common/railcraft/common/api/carts/ILinkableCart.java deleted file mode 100644 index d87386d9..00000000 --- a/src/common/railcraft/common/api/carts/ILinkableCart.java +++ /dev/null @@ -1,77 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.EntityMinecart; - -/** - * This interface should be implemented by any minecart that wishes - * to change the default linkage behavior. - * It is NOT required to be able to link a cart, - * it merely gives you more control over the process. - * @author CovertJaguar - */ -public interface ILinkableCart -{ - - /** - * To disable linking altogether, return false here. - * @return True if this cart is linkable. - */ - public boolean isLinkable(); - - /** - * Check called when attempting to link carts. - * @param cart The cart that we are attempting to link with. - * @return True if we can link with this cart. - */ - public boolean canLinkWithCart(EntityMinecart cart); - - /** - * Returns true if this cart has two links - * or false if it can only link with one cart. - * @return True if two links - */ - public boolean hasTwoLinks(); - - /** - * Gets the distance at which this cart can be linked. - * This is called on both carts and added together to determine - * how close two carts need to be for a successful link. - * Default = LinkageManager.LINKAGE_DISTANCE - * @param cart The cart that you are attempting to link with. - * @return The linkage distance - */ - public float getLinkageDistance(EntityMinecart cart); - - /** - * Gets the optimal distance between linked carts. - * This is called on both carts and added together to determine - * the optimal rest distance between linked carts. - * The LinkageManager will attempt to maintain this distance - * between linked carts at all times. - * Default = LinkageManager.OPTIMAL_DISTANCE - * @param cart The cart that you are linked with. - * @return The optimal rest distance - */ - public float getOptimalDistance(EntityMinecart cart); - - /** - * Return false if linked carts have no effect on the velocity of this cart. - * Use carefully, if you link two carts that can't be adjusted, - * it will behave as if they are not linked. - * @param cart The cart doing the adjusting. - * @return Whether the cart can have its velocity adjusted. - */ - public boolean canBeAdjusted(EntityMinecart cart); - - /** - * Called upon successful link creation. - * @param cart The cart we linked with. - */ - public void onLinkCreated(EntityMinecart cart); - - /** - * Called when a link is broken (usually). - * @param cart The cart we were linked with. - */ - public void onLinkBroken(EntityMinecart cart); -} diff --git a/src/common/railcraft/common/api/carts/ILinkageManager.java b/src/common/railcraft/common/api/carts/ILinkageManager.java deleted file mode 100644 index e3080968..00000000 --- a/src/common/railcraft/common/api/carts/ILinkageManager.java +++ /dev/null @@ -1,102 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.EntityMinecart; - -/** - * The LinkageManager contains all the functions needed to link and interact - * with linked carts. - * - * To obtain an instance of this interface, call CartTools.getLinkageManager(). - * - * Each cart can up to two links. They are called Link A and Link B. - * Some carts will have only Link A, for example the Tunnel Bore. - * - * @author CovertJaguar - * @see CartTools, ILinkableCart - */ -public interface ILinkageManager -{ - - /** - * The default max distance at which carts can be linked, divided by 2. - */ - public static final float LINKAGE_DISTANCE = 1.25f; - /** - * The default distance at which linked carts are maintained, divided by 2. - */ - public static final float OPTIMAL_DISTANCE = 0.78f; - - /** - * Creates a link between two carts, - * but only if there is nothing preventing such a link. - * - * @param cart1 - * @param cart2 - * @return True if the link succeeded. - */ - public boolean createLink(EntityMinecart cart1, EntityMinecart cart2); - - /** - * Returns the cart linked to Link A or null if nothing is currently - * occupying Link A. - * - * @param cart The cart for which to get the link - * @return The linked cart or null - */ - public EntityMinecart getLinkedCartA(EntityMinecart cart); - - /** - * Returns the cart linked to Link B or null if nothing is currently - * occupying Link B. - * - * @param cart The cart for which to get the link - * @return The linked cart or null - */ - public EntityMinecart getLinkedCartB(EntityMinecart cart); - - /** - * Returns true if the two carts are linked to each other. - * - * @param cart1 - * @param cart2 - * @return True if linked - */ - public boolean areLinked(EntityMinecart cart1, EntityMinecart cart2); - - /** - * Breaks a link between two carts, if any link exists. - * - * @param cart1 - * @param cart2 - */ - public void breakLink(EntityMinecart cart1, EntityMinecart cart2); - - /** - * Breaks all links the cart has. - * - * @param cart - */ - public void breakLinks(EntityMinecart cart); - - /** - * Break only link A. - * - * @param cart - */ - public void breakLinkA(EntityMinecart cart); - - /** - * Break only link B. - * - * @param cart - */ - public void breakLinkB(EntityMinecart cart); - - /** - * Counts how many carts are in the train. - * - * @param cart Any cart in the train - * @return The number of carts in the train - */ - public int countCartsInTrain(EntityMinecart cart); -} diff --git a/src/common/railcraft/common/api/carts/ILiquidTransfer.java b/src/common/railcraft/common/api/carts/ILiquidTransfer.java deleted file mode 100644 index 8d72e734..00000000 --- a/src/common/railcraft/common/api/carts/ILiquidTransfer.java +++ /dev/null @@ -1,53 +0,0 @@ -package railcraft.common.api.carts; - -import buildcraft.api.liquids.LiquidStack; - -/** - * This interface allows carts to transfer liquid between each other - * as well as adding a couple other functions related to liquids. - * - * @author CovertJaguar - */ -public interface ILiquidTransfer -{ - - /** - * Offers liquid to this object. - * - * Is not used by the Liquid Loader to load carts, - * the traditional ILiquidContainer is used for that. - * - * @param source The Object offering the liquid, used to prevent request loops in trains - * @param quantity The quantity offered - * @param id The liquid id offered - * @return the liquid used - */ - public int offerLiquid(Object source, LiquidStack offer); - - /** - * Requests liquid from this object. - * - * Is not used by the Liquid Unloader to drain carts, - * the traditional ILiquidContainer is used for that. - * - * @param source The Object requesting the liquid, used to prevent request loops in trains - * @param quantity The quantity requested - * @param id The liquid type requested - * @return the liquid provided - */ - public int requestLiquid(Object source, LiquidStack request); - - /** - * Set by the Liquid Loader while filling, - * primarily used for rendering a visible - * change while being filled. - * @param filling - */ - public void setFilling(boolean filling); - - /** - * - * @return true if being filled - */ - public boolean isFilling(); -} diff --git a/src/common/railcraft/common/api/carts/IMinecart.java b/src/common/railcraft/common/api/carts/IMinecart.java deleted file mode 100644 index 7707a20e..00000000 --- a/src/common/railcraft/common/api/carts/IMinecart.java +++ /dev/null @@ -1,52 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.ItemStack; - -/** - * Some helper functions to make interacting with carts simpler. - * - * This interface is implemented by CartBase. - * - * @author CovertJaguar - * @see CartBase - */ -public interface IMinecart -{ - - /** - * Returns true if the Minecart matches the item provided. - * Generally just stack.isItemEqual(cart.getCartItem()), - * but some carts may need more control (the Tank Cart for example). - * - * @param stack the Filter - * @param cart the Cart - * @return true if the item matches the cart - */ - public boolean doesCartMatchFilter(ItemStack stack, EntityMinecart cart); - - /** - * Unlike EntityMinecart.getMaxSpeedRail(), - * this function is independent of the actual max speed of the cart. - * - * It should represent the max possible speed at this point in time - * before any modifiers due to linked carts, etc are applied. - * - * This is really only used for Train speed calculations. - * Which ever cart in the train returns the lowest value here will be the max speed of the entire train. - * - * @return - */ - public float getCartMaxSpeed(); - - /** - * Sets the max speed of a train. - * - * This should be used to limit the return value for EntityMinecart.getMaxSpeedRail(). - * - * @param speed - * @see CartBase - */ - public void setTrainSpeed(float speed); - -} diff --git a/src/common/railcraft/common/api/carts/TransferCartBase.java b/src/common/railcraft/common/api/carts/TransferCartBase.java deleted file mode 100644 index d623308e..00000000 --- a/src/common/railcraft/common/api/carts/TransferCartBase.java +++ /dev/null @@ -1,252 +0,0 @@ -package railcraft.common.api.carts; - -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.IInventory; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; -import railcraft.common.api.core.items.EnumItemType; - -/** - * Abstract minecart class that implements the IItemTransfer - * interface for convenience and as example for others who wish - * to create carts that implements IItemTransfer. - * This particular implementation assumes a simple inventory - * and will attempt to pass along offers and requests to linked carts - * if it cannot fulfill them itself. - *
- *
- * Classes that extend this class:
- * EntityCartChest
- * EntityCartAnchor
- * - * @author CovertJaguar - */ -public abstract class TransferCartBase extends CartBase implements IItemTransfer -{ - - /** - * If passThrough == true, this cart will only pass requests along, it wont attempt to fulfill them. - */ - protected boolean passThrough = false; - - public TransferCartBase(World world) - { - super(world); - } - - @Override - public ItemStack offerItem(Object source, ItemStack offer) - { - if(!passThrough && getSizeInventory() > 0) { - offer = moveItemStack(offer, this); - if(offer == null) { - return null; - } - } - - ILinkageManager lm = CartTools.getLinkageManager(worldObj); - - EntityMinecart linkedCart = lm.getLinkedCartA(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - offer = ((IItemTransfer)linkedCart).offerItem(this, offer); - } - - if(offer == null) { - return null; - } - - linkedCart = lm.getLinkedCartB(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - offer = ((IItemTransfer)linkedCart).offerItem(this, offer); - } - - return offer; - } - - @Override - public ItemStack requestItem(Object source) - { - ItemStack result = null; - if(!passThrough && getSizeInventory() > 0) { - result = removeOneItem(this); - if(result != null) { - return result; - } - } - - ILinkageManager lm = CartTools.getLinkageManager(worldObj); - - EntityMinecart linkedCart = lm.getLinkedCartA(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this); - } - - if(result != null) { - return result; - } - - linkedCart = lm.getLinkedCartB(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this); - } - - return result; - } - - @Override - public ItemStack requestItem(Object source, ItemStack request) - { - ItemStack result = null; - if(!passThrough && getSizeInventory() > 0) { - result = removeOneItem(this, request); - if(result != null) { - return result; - } - } - - ILinkageManager lm = CartTools.getLinkageManager(worldObj); - - EntityMinecart linkedCart = lm.getLinkedCartA(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this, request); - } - - if(result != null) { - return result; - } - - linkedCart = lm.getLinkedCartB(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this, request); - } - - return result; - } - - @Override - public ItemStack requestItem(Object source, EnumItemType request) - { - ItemStack result = null; - if(!passThrough && getSizeInventory() > 0) { - result = removeOneItem(this, request); - if(result != null) { - return result; - } - } - - ILinkageManager lm = CartTools.getLinkageManager(worldObj); - - EntityMinecart linkedCart = lm.getLinkedCartA(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this, request); - } - - if(result != null) { - return result; - } - - linkedCart = lm.getLinkedCartB(this); - if(linkedCart != source && linkedCart instanceof IItemTransfer) { - result = ((IItemTransfer)linkedCart).requestItem(this, request); - } - - return result; - } - - /** - * Removes and returns a single item from the inventory. - * @param inv The inventory - * @return An ItemStack - */ - protected final ItemStack removeOneItem(IInventory inv) - { - for(int i = 0; i < inv.getSizeInventory(); i++) { - ItemStack slot = inv.getStackInSlot(i); - if(slot != null) { - return inv.decrStackSize(i, 1); - } - } - return null; - } - - /** - * Removes and returns a single item from the inventory that matches the filter. - * @param inv The inventory - * @param filter ItemStack to match against - * @return An ItemStack - */ - protected final ItemStack removeOneItem(IInventory inv, ItemStack filter) - { - for(int i = 0; i < inv.getSizeInventory(); i++) { - ItemStack slot = inv.getStackInSlot(i); - if(slot != null && filter != null && slot.isItemEqual(filter)) { - return inv.decrStackSize(i, 1); - } - } - return null; - } - - /** - * Removes and returns a single item from the inventory that matches the filter. - * @param inv The inventory - * @param filter EnumItemType to match against - * @return An ItemStack - */ - protected final ItemStack removeOneItem(IInventory inv, EnumItemType filter) - { - for(int i = 0; i < inv.getSizeInventory(); i++) { - ItemStack slot = inv.getStackInSlot(i); - if(slot != null && filter.isItemType(slot)) { - return inv.decrStackSize(i, 1); - } - } - return null; - } - - protected final ItemStack moveItemStack(ItemStack stack, IInventory dest) - { - if(stack == null) { - return null; - } - stack = stack.copy(); - if(dest == null) { - return stack; - } - boolean movedItem = false; - do { - movedItem = false; - ItemStack destStack = null; - for(int ii = 0; ii < dest.getSizeInventory(); ii++) { - destStack = dest.getStackInSlot(ii); - if(destStack != null && destStack.isItemEqual(stack)) { - int maxStack = Math.min(destStack.getMaxStackSize(), dest.getInventoryStackLimit()); - int room = maxStack - destStack.stackSize; - if(room > 0) { - int move = Math.min(room, stack.stackSize); - destStack.stackSize += move; - stack.stackSize -= move; - if(stack.stackSize <= 0) { - return null; - } - movedItem = true; - } - } - } - if(!movedItem) { - for(int ii = 0; ii < dest.getSizeInventory(); ii++) { - destStack = dest.getStackInSlot(ii); - if(destStack == null) { - if(stack.stackSize > dest.getInventoryStackLimit()) { - dest.setInventorySlotContents(ii, stack.splitStack(dest.getInventoryStackLimit())); - } else { - dest.setInventorySlotContents(ii, stack); - return null; - } - movedItem = true; - } - } - } - } while(movedItem); - return stack; - } -} diff --git a/src/common/railcraft/common/api/carts/bore/IBoreHead.java b/src/common/railcraft/common/api/carts/bore/IBoreHead.java deleted file mode 100644 index 3d541039..00000000 --- a/src/common/railcraft/common/api/carts/bore/IBoreHead.java +++ /dev/null @@ -1,37 +0,0 @@ -package railcraft.common.api.carts.bore; - -/** - * This interface it used to define an item that can - * be used as a bore head for the Tunnel Bore. - * @author CovertJaguar - */ -public interface IBoreHead -{ - - /** - * Return the texture file used for this bore head. - * @return The texture file path - */ - public String getBoreTexture(); - - /** - * Return the harvest level of this bore head. - * - * This value is compared against the tool classes - * "pickaxe", "axe", and "shovel" to determine if the - * block is harvestable by the bore head. - * - * @return The harvest level - */ - public int getHarvestLevel(); - - /** - * Return the dig speed modifier of this bore head. - * - * This value controls how much faster or slow this bore head - * mines each layer compared to the default time. - * - * @return The dig speed modifier - */ - public float getDigModifier(); -} diff --git a/src/common/railcraft/common/api/carts/bore/IMineable.java b/src/common/railcraft/common/api/carts/bore/IMineable.java deleted file mode 100644 index 185d0b65..00000000 --- a/src/common/railcraft/common/api/carts/bore/IMineable.java +++ /dev/null @@ -1,36 +0,0 @@ -package railcraft.common.api.carts.bore; - -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; - -/** - * This interface can be implemented by a block class to control whether a block can be - * mined by the bore without having to force the user to edit the configuration file. - * - * If the block is found to implement this class, any setting in the configuration - * is ignored for that block. - * - * Generally, the reason blocks are not minable by default is to prevent you - * from intentionally or accidentally boring through your base. - * - * @author CovertJaguar - */ -public interface IMineable -{ - - /** - * Called when the Bore attempts to mine the block. If it returns false, - * the Bore will halt operation. - * - * @param world The World - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @param bore The Bore entity - * @param head The BoreHead, item implements IBoreHead. - * @return true if mineable - * @see IBoreHead - */ - public boolean canMineBlock(World world, int i, int j, int k, EntityMinecart bore, ItemStack head); -} diff --git a/src/common/railcraft/common/api/core/INetworkedObject.java b/src/common/railcraft/common/api/core/INetworkedObject.java deleted file mode 100644 index c0943860..00000000 --- a/src/common/railcraft/common/api/core/INetworkedObject.java +++ /dev/null @@ -1,16 +0,0 @@ -package railcraft.common.api.core; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import net.minecraft.src.World; - -public interface INetworkedObject -{ - - public World getWorld(); - - public void writePacketData(DataOutputStream data) throws IOException; - - public void readPacketData(DataInputStream data) throws IOException; -} diff --git a/src/common/railcraft/common/api/core/IPostConnection.java b/src/common/railcraft/common/api/core/IPostConnection.java deleted file mode 100644 index 12a13c4e..00000000 --- a/src/common/railcraft/common/api/core/IPostConnection.java +++ /dev/null @@ -1,27 +0,0 @@ -package railcraft.common.api.core; - -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -/** - * If you want your block to connect (or not connect) to posts, - * implement this interface. - * - * The result takes priority over any other rules. - * - * @author CovertJaguar - */ -public interface IPostConnection -{ - - /** - * Return true if the block at this location should connect to a post. - * @param world The World - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @param side Side to connect to - * @return true if connect - */ - public boolean connectsAt(World world, int i, int j, int k, ForgeDirection side); -} diff --git a/src/common/railcraft/common/api/core/WorldCoordinate.java b/src/common/railcraft/common/api/core/WorldCoordinate.java deleted file mode 100644 index 3037e800..00000000 --- a/src/common/railcraft/common/api/core/WorldCoordinate.java +++ /dev/null @@ -1,78 +0,0 @@ -package railcraft.common.api.core; - -/** - * This immutable class represents a point in the Minecraft world, - * while taking into account the possibility of coordinates in different dimensions. - * @author CovertJaguar - */ -public class WorldCoordinate -{ - - /** - * The dimension - */ - public final int dimension; - /** - * x-Coord - */ - public final int x; - /** - * y-Coord - */ - public final int y; - /** - * z-Coord - */ - public final int z; - - /** - * Creates a new WorldCoordinate - * @param dimension - * @param i - * @param j - * @param k - */ - public WorldCoordinate(int dimension, int i, int j, int k) - { - this.dimension = dimension; - x = i; - y = j; - z = k; - } - - @Override - public boolean equals(Object obj) - { - if(obj == null) { - return false; - } - if(getClass() != obj.getClass()) { - return false; - } - final WorldCoordinate other = (WorldCoordinate)obj; - if(this.dimension != other.dimension) { - return false; - } - if(this.x != other.x) { - return false; - } - if(this.y != other.y) { - return false; - } - if(this.z != other.z) { - return false; - } - return true; - } - - @Override - public int hashCode() - { - int hash = 3; - hash = 13 * hash + this.dimension; - hash = 13 * hash + this.x; - hash = 13 * hash + this.y; - hash = 13 * hash + this.z; - return hash; - } -} diff --git a/src/common/railcraft/common/api/core/items/BallastRegistry.java b/src/common/railcraft/common/api/core/items/BallastRegistry.java deleted file mode 100644 index dcc724f1..00000000 --- a/src/common/railcraft/common/api/core/items/BallastRegistry.java +++ /dev/null @@ -1,93 +0,0 @@ -package railcraft.common.api.core.items; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import net.minecraft.src.Block; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; - -/** - * Register an item here to designate it as a possible - * ballast that can be used in the Bore. - * - * It is expected that ballast is affected by gravity. - * - * @author CovertJaguar - */ -public abstract class BallastRegistry -{ - - private static Set ballastRegistry = new HashSet(); - - private static class ItemWrapper - { - - public int itemID; - public int itemDamage; - public ItemStack stack; - - public ItemWrapper(ItemStack stack) - { - itemID = stack.itemID; - itemDamage = stack.getItemDamage(); - this.stack = stack; - } - - @Override - public boolean equals(Object obj) - { - if(obj == null) { - return false; - } - if(getClass() != obj.getClass()) { - return false; - } - final ItemWrapper other = (ItemWrapper)obj; - if(this.itemID != other.itemID) { - return false; - } - if(this.itemDamage != other.itemDamage) { - return false; - } - return true; - } - - @Override - public int hashCode() - { - int hash = 3; - hash = 47 * hash + this.itemID; - hash = 47 * hash + this.itemDamage; - return hash; - } - } - - static { - registerBallast(new ItemStack(Block.gravel)); - } - - public static void registerBallast(ItemStack ballast) - { - if(ballast.getItem() instanceof ItemBlock) { - ballastRegistry.add(new ItemWrapper(ballast)); - } else { - throw new RuntimeException("Attempted to register an invalid ballast, must be an ItemBlock item."); - } - } - - public static boolean isItemBallast(ItemStack ballast) - { - return ballastRegistry.contains(new ItemWrapper(ballast)); - } - - public static List getRegisteredBallasts() - { - List list = new ArrayList(); - for(ItemWrapper item : ballastRegistry) { - list.add(item.stack); - } - return list; - } -} diff --git a/src/common/railcraft/common/api/core/items/EnumItemType.java b/src/common/railcraft/common/api/core/items/EnumItemType.java deleted file mode 100644 index 850ff823..00000000 --- a/src/common/railcraft/common/api/core/items/EnumItemType.java +++ /dev/null @@ -1,47 +0,0 @@ -package railcraft.common.api.core.items; - -import net.minecraft.src.BlockRail; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemFood; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntityFurnace; -import net.minecraftforge.common.MinecartRegistry; - -/** - * This interface is used with several of the functions in IItemTransfer - * to provide a convenient means of dealing with entire classes of items without - * having to specify each item individually. - * @author CovertJaguar - */ -public enum EnumItemType -{ - - FUEL, RAIL, MINECART, BALLAST, FOOD; - - public static boolean isItemType(ItemStack stack, EnumItemType filter) - { - return filter.isItemType(stack); - } - - public boolean isItemType(ItemStack stack) - { - if(stack == null) { - return false; - } - switch (this) { - case FUEL: - return TileEntityFurnace.getItemBurnTime(stack) > 0; - case RAIL: - return stack.getItem() instanceof ITrackItem || (stack.getItem() instanceof ItemBlock && BlockRail.isRailBlock(stack.itemID)); - case MINECART: - return MinecartRegistry.getCartClassForItem(stack) != null || stack.getItem() instanceof IMinecartItem; - case BALLAST: - return BallastRegistry.isItemBallast(stack); - case FOOD: - return stack.getItem() instanceof ItemFood || stack.itemID == Item.wheat.shiftedIndex; - default: - return false; - } - } -} diff --git a/src/common/railcraft/common/api/core/items/IMinecartItem.java b/src/common/railcraft/common/api/core/items/IMinecartItem.java deleted file mode 100644 index 22d513b8..00000000 --- a/src/common/railcraft/common/api/core/items/IMinecartItem.java +++ /dev/null @@ -1,39 +0,0 @@ -package railcraft.common.api.core.items; - -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; - -/** - * This interface should be implemented by any cart item, - * but it is generally optional. - * - * @author CovertJaguar - */ -public interface IMinecartItem -{ - - /** - * Controls whether this cart item can be placed by the Cart and Train Dispensers. - * - * Generally, you can ignore the placeCart() function if this returns false. - * - * @return true if it can be placed, false otherwise - */ - public boolean canBePlacedByNonPlayer(ItemStack cart); - - /** - * Places a cart at the specified location. - * - * Implementing this function is optional. - * - * @param owner the name of the player placing the cart or "[MyMod]" with the brackets - * @param cart An ItemStack that contains the cart - * @param world The World - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @return the cart placed or null if failed - */ - public EntityMinecart placeCart(String owner, ItemStack cart, World world, int i, int j, int k); -} diff --git a/src/common/railcraft/common/api/core/items/ITrackItem.java b/src/common/railcraft/common/api/core/items/ITrackItem.java deleted file mode 100644 index 1c4cd72f..00000000 --- a/src/common/railcraft/common/api/core/items/ITrackItem.java +++ /dev/null @@ -1,46 +0,0 @@ -package railcraft.common.api.core.items; - -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -/** - * Should be implemented by any rail item class that wishes to have - * it's rails placed by for example the Tunnel Bore or Track Relayer. - * - * If you defined your rails with a TrackSpec, you don't need to worry about this. - * - * @author CovertJaguar - */ -public interface ITrackItem -{ - - /** - * Attempts to place a track. - * - * @param world The World object - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @return true if successful - */ - public boolean placeTrack(ItemStack stack, World world, int i, int j, int k); - - /** - * Return the block id of a placed track. - * - * @return the blockId - */ - public int getPlacedBlockId(); - - /** - * Return true if the given tile entity corresponds to this Track item. - * - * If the track has no tile entity, return true on null. - * - * @param stack - * @param tile - * @return - */ - public boolean isPlacedTileEntity(ItemStack stack, TileEntity tile); -} diff --git a/src/common/railcraft/common/api/core/items/ItemRegistry.java b/src/common/railcraft/common/api/core/items/ItemRegistry.java deleted file mode 100644 index 3760fad3..00000000 --- a/src/common/railcraft/common/api/core/items/ItemRegistry.java +++ /dev/null @@ -1,93 +0,0 @@ -package railcraft.common.api.core.items; - -import java.util.Map; -import java.util.TreeMap; -import net.minecraft.src.ItemStack; - -/** - * This class contains a registry of all currently active Railcraft items. - * Which items are registered depends on the user's settings in "railcraft.cfg", - * so the available items may vary from one installation to the next. - * - * Initialization of the registry will occur during the BaseMod.load() - * function. It is strongly recommended you wait until the BaseMod.modsLoaded() - * function to reference the registry. - * - * @author CovertJaguar - */ -public final class ItemRegistry -{ - - private static final Map registry = new TreeMap(); - - private ItemRegistry() - { - } - - /** - * This function will return an ItemStack containing the item that - * corresponds to the provided tag. - * - * Generally item tags will correspond to the tags used in "railcraft.cfg", - * but there will be some exceptions. - * - * This function can and will return null for just about every item - * if the item is disabled via the configuration files. - * You must test the return value for safety. - * - * For list of available tags see the printItemTags() function. - * - * @param tag The item tag - * @param qty The stackSize of the returned item - * @return The ItemStack or null if no item exists for that tag - */ - public static ItemStack getItem(String tag, int qty) - { - ItemStack stack = registry.get(tag); - if(stack != null) { - stack = stack.copy(); - stack.stackSize = qty; - } - return stack; - } - - /** - * Registers a new item with the Registry. - * - * This should generally only be called by Railcraft itself - * while the mod is initializing during the mod_Railcraft.load() call. - * - * @param tag The tag name - * @param item The item - */ - public static void registerItem(String tag, ItemStack item) - { - registry.put(tag, item); - } - - /** - * This function will print a list of all currently registered items - * to the console. - * - * Use this for development purposes. - */ - public static void printItemTags() - { - System.out.println(); - System.out.println("Printing all registered Railcraft items:"); - for(String tag : registry.keySet()) { - System.out.println(tag); - } - System.out.println(); - } - - /** - * Returns the entire mapping of items. - * - * @return - */ - public static Map getItems() - { - return registry; - } -} diff --git a/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java b/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java deleted file mode 100644 index e92381c3..00000000 --- a/src/common/railcraft/common/api/crafting/IBlastFurnaceCraftingManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package railcraft.common.api.crafting; - -import java.util.List; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface IBlastFurnaceCraftingManager -{ - - void addRecipe(int inputId, int inputDamage, int cookTime, ItemStack output); - - void addRecipe(int inputId, int cookTime, ItemStack output); - - List getFuels(); - - IBlastFurnaceRecipe getRecipe(int inputId, int inputDamage); - - IBlastFurnaceRecipe getRecipe(ItemStack stack); - - List getRecipes(); - -} diff --git a/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java b/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java deleted file mode 100644 index 6c6a7181..00000000 --- a/src/common/railcraft/common/api/crafting/IBlastFurnaceRecipe.java +++ /dev/null @@ -1,21 +0,0 @@ -package railcraft.common.api.crafting; - -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface IBlastFurnaceRecipe -{ - - public int getCookTime(); - - public ItemStack getInput(); - - public ItemStack getOutput(); - - int getOutputStackSize(); - - boolean isRoomForOutput(ItemStack out); -} diff --git a/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java b/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java deleted file mode 100644 index a6e5b73f..00000000 --- a/src/common/railcraft/common/api/crafting/ICokeOvenCraftingManager.java +++ /dev/null @@ -1,26 +0,0 @@ -package railcraft.common.api.crafting; - -import buildcraft.api.liquids.LiquidStack; -import java.util.List; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface ICokeOvenCraftingManager -{ - - void addRecipe(ItemStack input, ItemStack output, LiquidStack liquidOutput, int cookTime); - - void addRecipe(int inputId, int inputDamage, ItemStack output, LiquidStack liquidOutput, int cookTime); - - void addRecipe(int inputId, ItemStack output, LiquidStack liquidOutput, int cookTime); - - ICokeOvenRecipe getRecipe(ItemStack stack); - - ICokeOvenRecipe getRecipe(int inputId, int inputDamage); - - List getRecipes(); - -} diff --git a/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java b/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java deleted file mode 100644 index f2e9e29f..00000000 --- a/src/common/railcraft/common/api/crafting/ICokeOvenRecipe.java +++ /dev/null @@ -1,20 +0,0 @@ -package railcraft.common.api.crafting; - -import buildcraft.api.liquids.LiquidStack; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface ICokeOvenRecipe -{ - - public int getCookTime(); - - public ItemStack getInput(); - - public LiquidStack getLiquidOutput(); - - public ItemStack getOutput(); -} diff --git a/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java b/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java deleted file mode 100644 index 52dd8839..00000000 --- a/src/common/railcraft/common/api/crafting/IRockCrusherCraftingManager.java +++ /dev/null @@ -1,35 +0,0 @@ -package railcraft.common.api.crafting; - -import java.util.HashMap; -import java.util.List; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface IRockCrusherCraftingManager -{ - - /** - * - * @param inputId - * @param inputDamage metadata or -1 for wildcard - * @param output A map of outputs and chances. If more than 9 types of items, there will be unexpected behavior. - */ - void addRecipe(int inputId, int inputDamage, HashMap output); - - /** - * - * @param input - * @param output A map of outputs and chances. If more than 9 types of items, there will be unexpected behavior. - */ - void addRecipe(ItemStack input, HashMap output); - - IRockCrusherRecipe getRecipe(ItemStack input); - - IRockCrusherRecipe getRecipe(int inputId, int inputDamage); - - List getRecipes(); - -} diff --git a/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java b/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java deleted file mode 100644 index 75b2d811..00000000 --- a/src/common/railcraft/common/api/crafting/IRockCrusherRecipe.java +++ /dev/null @@ -1,37 +0,0 @@ -package railcraft.common.api.crafting; - -import java.util.List; -import java.util.Map; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface IRockCrusherRecipe -{ - - public ItemStack getInput(); - - /** - * Returns a map containing each output entry and its chance of being included. - * - * @return - */ - public Map getOutputs(); - - /** - * Returns a list of all possible outputs. - * This is basically a condensed version of getOutputs().keySet(). - * - * @return - */ - public List getPossibleOuput(); - - /** - * Returns a list of outputs after it has passed through the randomizer. - * - * @return - */ - public List getRandomizedOuput(); -} diff --git a/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java b/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java deleted file mode 100644 index 6b9ee7f6..00000000 --- a/src/common/railcraft/common/api/crafting/IRollingMachineCraftingManager.java +++ /dev/null @@ -1,23 +0,0 @@ -package railcraft.common.api.crafting; - -import java.util.List; -import net.minecraft.src.IRecipe; -import net.minecraft.src.InventoryCrafting; -import net.minecraft.src.ItemStack; - -/** - * - * @author CovertJaguar - */ -public interface IRollingMachineCraftingManager -{ - - void addRecipe(ItemStack output, Object[] components); - - void addShapelessRecipe(ItemStack output, Object[] compenents); - - ItemStack findMatchingRecipe(InventoryCrafting inventorycrafting); - - List getRecipeList(); - -} diff --git a/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java b/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java deleted file mode 100644 index 27608b22..00000000 --- a/src/common/railcraft/common/api/crafting/RailcraftCraftingManager.java +++ /dev/null @@ -1,16 +0,0 @@ -package railcraft.common.api.crafting; - -/** - * These variables are defined during the pre-init phase. - * Do not attempt to access them during pre-init. - * - * @author CovertJaguar - */ -public abstract class RailcraftCraftingManager -{ - - public static ICokeOvenCraftingManager cokeOven; - public static IBlastFurnaceCraftingManager blastFurnace; - public static IRockCrusherCraftingManager rockCrusher; - public static IRollingMachineCraftingManager rollingMachine; -} diff --git a/src/common/railcraft/common/api/signals/EnumSignalAspect.java b/src/common/railcraft/common/api/signals/EnumSignalAspect.java deleted file mode 100644 index 8a71e40d..00000000 --- a/src/common/railcraft/common/api/signals/EnumSignalAspect.java +++ /dev/null @@ -1,155 +0,0 @@ -package railcraft.common.api.signals; - -/** - * Represents a Signal state. - * @author CovertJaguar - */ -public enum EnumSignalAspect -{ - - /** - * The All Clear. - */ - GREEN(0), - /** - * Typically means pairing in progress. - */ - BLINK_YELLOW(1), - /** - * Caution, cart heading away. - */ - YELLOW(1), - /** - * Maintenance warning, the signal is malfunctioning. - */ - BLINK_RED(2), - /** - * Stop! - */ - RED(2), - /** - * Can't happen, really it can't (or shouldn't). - * Only used when rendering blink states (for the texture offset). - */ - OFF(3); - private final byte id; - private final int textureOffset; - private static byte nextId = 0; - private static boolean blinkState; - - private EnumSignalAspect(int textureOffset) - { - this.textureOffset = textureOffset; - id = getNextId(); - } - - /** - * Returns the aspect id, used mainly for saving and network communication. - * @return id - */ - public byte getId() - { - return id; - } - - /** - * Returns the texture offset for this specific aspect. - * @return offset - */ - public int getTextureOffset() - { - return textureOffset; - } - - /** - * Returns true if the aspect is one of the blink states. - * @return true if blinks - */ - public boolean isBlinkAspect() - { - if(this == BLINK_YELLOW || this == BLINK_RED) { - return true; - } - return false; - } - - /** - * Return true if the light is currently off. - * @return true if the light is currently off. - */ - public static boolean isBlinkOn() - { - return blinkState; - } - - /** - * Don't call this, its used to change blink states by Railcraft. - */ - public static void invertBlinkState() - { - blinkState = !blinkState; - } - - /** - * Takes an id and returns an Aspect. - * @param id - * @return - */ - public static EnumSignalAspect fromId(int id) - { - for(EnumSignalAspect a : EnumSignalAspect.values()) { - if(a.getId() == id) { - return a; - } - } - return RED; - } - - /** - * Tests two Aspects and determines which is more restrictive. - * The concept of "most restrictive" refers to which aspect enforces the - * most limitations of movement to a train. - * - * In Railcraft the primary use is in Signal Box logic. - * - * @param first - * @param second - * @return The most restrictive Aspect - */ - public static EnumSignalAspect mostRestrictive(EnumSignalAspect first, EnumSignalAspect second) - { - if(first == null && second != null) { - return second; - } else if(first != null && second == null) { - return first; - } else if(first == null && second == null) { - return RED; - } - if(first == OFF || second == OFF) { - return RED; - } - if(first.getId() > second.getId()) { - return first; - } - return second; - } - - private static byte getNextId() - { - byte i = nextId; - nextId++; - return i; - } - - @Override - public String toString() - { - String[] sa = name().split("_"); - String out = ""; - for(String s : sa) { - out = out + s.substring(0, 1) + s.substring(1).toLowerCase() + " "; - } - out = out.trim(); - return out; - } -} diff --git a/src/common/railcraft/common/api/signals/IBlockSignal.java b/src/common/railcraft/common/api/signals/IBlockSignal.java deleted file mode 100644 index a115423c..00000000 --- a/src/common/railcraft/common/api/signals/IBlockSignal.java +++ /dev/null @@ -1,47 +0,0 @@ -package railcraft.common.api.signals; - -/** - * This is not documented and needs some reworking to simplify usage. - * @author CovertJaguar - */ -public interface IBlockSignal -{ - - public void startSignalBlockPairing(); - - public void endSignalBlockPairing(); - - public boolean locateRail(); - - public boolean attemptToPair(IBlockSignal other); - - public void clearSignalBlockPairing(String reason, Object... args); - - public boolean isSignalBlockBeingPaired(); - - public boolean isSignalBlockPaired(); - - public IBlockSignal getSignalBlockPair(); - - public int getSignalBlockPairX(); - - public int getSignalBlockPairY(); - - public int getSignalBlockPairZ(); - - public int getRailX(); - - public int getRailY(); - - public int getRailZ(); - - public int getX(); - - public int getY(); - - public int getZ(); - - public int getDimension(); - - public String getDescription(); -} diff --git a/src/common/railcraft/common/api/signals/ISignalController.java b/src/common/railcraft/common/api/signals/ISignalController.java deleted file mode 100644 index a3160d7a..00000000 --- a/src/common/railcraft/common/api/signals/ISignalController.java +++ /dev/null @@ -1,45 +0,0 @@ -package railcraft.common.api.signals; - -import net.minecraft.src.World; - -/** - * This is not documented and needs some reworking to simplify usage. - * @author CovertJaguar - */ -public interface ISignalController -{ - - public EnumSignalAspect getSignalAspect(); - - public boolean attemptToPairWithReceiver(ISignalReceiver receiver); - - public void startReceiverPairing(); - - public void endReceiverPairing(); - - public void clearPairedReceiver(); - - public boolean isPairedWithReceiver(); - - public ISignalReceiver getReceiver(); - - public int getReceiverX(); - - public int getReceiverY(); - - public int getReceiverZ(); - - public int getX(); - - public int getY(); - - public int getZ(); - - public int getDimension(); - - public World getWorld(); - - public String getDescription(); - - public boolean isInvalid(); -} diff --git a/src/common/railcraft/common/api/signals/ISignalReceiver.java b/src/common/railcraft/common/api/signals/ISignalReceiver.java deleted file mode 100644 index 00de2b0c..00000000 --- a/src/common/railcraft/common/api/signals/ISignalReceiver.java +++ /dev/null @@ -1,43 +0,0 @@ -package railcraft.common.api.signals; - -import net.minecraft.src.World; - -/** - * This is not documented and needs some reworking to simplify usage. - * @author CovertJaguar - */ -public interface ISignalReceiver -{ - - public boolean doesActionOnAspect(EnumSignalAspect aspect); - - public void doActionOnAspect(EnumSignalAspect aspect, boolean trigger); - - public boolean attemptToPairWithController(ISignalController controller); - - public void clearPairedController(); - - public boolean isPairedWithController(); - - public ISignalController getController(); - - public int getControllerX(); - - public int getControllerY(); - - public int getControllerZ(); - - public int getX(); - - public int getY(); - - public int getZ(); - - public int getDimension(); - - public World getWorld(); - - public boolean isInvalid(); - - public String getDescription(); -} diff --git a/src/common/railcraft/common/api/signals/SignalTools.java b/src/common/railcraft/common/api/signals/SignalTools.java deleted file mode 100644 index 2c2b272c..00000000 --- a/src/common/railcraft/common/api/signals/SignalTools.java +++ /dev/null @@ -1,159 +0,0 @@ -package railcraft.common.api.signals; - -import java.util.HashMap; -import java.util.Map; -import java.util.Random; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import railcraft.common.api.tracks.RailTools; -import railcraft.common.api.core.WorldCoordinate; - -/** - * This is not documented and needs some reworking to simplify usage. - * @author CovertJaguar - */ -public abstract class SignalTools -{ - - private static Map signalBlockPairingMap = new HashMap(); - private static Map controllerReceiverPairingMap = new HashMap(); - - public static boolean isSignalBlockSectionValid(World world, IBlockSignal first, IBlockSignal second) { - return RailTools.areDistantRailsConnectedAlongAxis(world, first.getRailX(), first.getRailY(), first.getRailZ(), second.getRailX(), second.getRailY(), second.getRailZ()); - } - - public static boolean isControllerInRangeOfReceiver(ISignalController c, ISignalReceiver r, int range) { - int distX = c.getX() - r.getX(); - int distY = c.getY() - r.getY(); - int distZ = c.getZ() - r.getZ(); - int distance = (int)Math.sqrt(distX * distX + distY * distY + distZ * distZ); - return distance <= range; - } - - public static void startSignalBlockPairing(EntityPlayer player, ItemStack device, IBlockSignal first) { - endSignalBlockPairing(player, device); - int id = new Random().nextInt(Short.MAX_VALUE); - device.setItemDamage(id); - first.startSignalBlockPairing(); - signalBlockPairingMap.put(new PairingKey(player.username, device.getItemDamage()), new WorldCoordinate(first.getDimension(), first.getX(), first.getY(), first.getZ())); - } - - public static WorldCoordinate getSignalBlockPair(EntityPlayer player, ItemStack device) { - return signalBlockPairingMap.get(new PairingKey(player.username, device.getItemDamage())); - } - - public static void endSignalBlockPairing(EntityPlayer player, ItemStack device) { - WorldCoordinate pos = signalBlockPairingMap.remove(new PairingKey(player.username, device.getItemDamage())); - if(pos != null) { - TileEntity t = player.worldObj.getBlockTileEntity(pos.x, pos.y, pos.z); - if(t instanceof IBlockSignal) { - ((IBlockSignal)t).endSignalBlockPairing(); - } - } - } - - public static void startControllerReceiverPairing(EntityPlayer player, ItemStack device, ISignalController controller) { - endControllerReceiverPairing(player, device); - int id = new Random().nextInt(Short.MAX_VALUE); - device.setItemDamage(id); - controller.startReceiverPairing(); - controllerReceiverPairingMap.put(new PairingKey(player.username, device.getItemDamage()), new WorldCoordinate(controller.getDimension(), controller.getX(), controller.getY(), controller.getZ())); - } - - public static WorldCoordinate getSavedController(EntityPlayer player, ItemStack device) { - return controllerReceiverPairingMap.get(new PairingKey(player.username, device.getItemDamage())); - } - - public static void endControllerReceiverPairing(EntityPlayer player, ItemStack device) { - WorldCoordinate pos = controllerReceiverPairingMap.remove(new PairingKey(player.username, device.getItemDamage())); - if(pos != null) { - TileEntity t = player.worldObj.getBlockTileEntity(pos.x, pos.y, pos.z); - if(t instanceof ISignalController) { - ((ISignalController)t).endReceiverPairing(); - } - } - } - - public static ISignalReceiver getReceiverFor(ISignalController con) { - World world = con.getWorld(); - if(world == null || con.getReceiverY() < 0) { - return null; - } - int i = con.getReceiverX(); - int j = con.getReceiverY(); - int k = con.getReceiverZ(); - if(!world.blockExists(i, j, k)) { - return null; - } - TileEntity pair = world.getBlockTileEntity(i, j, k); - if(pair instanceof ISignalReceiver) { - return (ISignalReceiver)pair; - } else { - con.clearPairedReceiver(); - } - return null; - } - - public static ISignalController getControllerFor(ISignalReceiver rec) { - if(rec.getControllerY() < 0) { - return null; - } - World world = rec.getWorld(); - if(world == null) { - return null; - } - int i = rec.getControllerX(); - int j = rec.getControllerY(); - int k = rec.getControllerZ(); - if(!world.blockExists(i, j, k)) { - return null; - } - TileEntity pair = world.getBlockTileEntity(i, j, k); - if(pair instanceof ISignalController) { - return (ISignalController)pair; - } else { - rec.clearPairedController(); - } - return null; - } - - private static class PairingKey - { - - protected String username; - protected int id; - - public PairingKey(String username, int id) { - this.username = username; - this.id = id; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 59 * hash + (this.username != null ? this.username.hashCode() : 0); - hash = 59 * hash + this.id; - return hash; - } - - @Override - public boolean equals(Object obj) { - if(obj == null) { - return false; - } - if(getClass() != obj.getClass()) { - return false; - } - final PairingKey other = (PairingKey)obj; - if((this.username == null) ? (other.username != null) : !this.username.equals(other.username)) { - return false; - } - if(this.id != other.id) { - return false; - } - return true; - } - } -} diff --git a/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java b/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java deleted file mode 100644 index 0354d1a6..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackCustomPlaced.java +++ /dev/null @@ -1,29 +0,0 @@ -package railcraft.common.api.tracks; - -import net.minecraft.src.World; - -/** - * Have your ITrackInstance implement this to override normal track placement. - * - * Used by tracks such as the Suspended Track. - * - * @author CovertJaguar - */ -public interface ITrackCustomPlaced extends ITrackInstance -{ - - /** - * Used to override normal track placement. - * - * Used by tracks such as the Suspended Track. - * - * Warning: This is called before the TileEntity is set. - * - * @param world The World - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @return true if the rail can placed at the specified location, false to prevent placement - */ - public boolean canPlaceRailAt(World world, int i, int j, int k); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackCustomShape.java b/src/common/railcraft/common/api/tracks/ITrackCustomShape.java deleted file mode 100644 index 35fd7e43..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackCustomShape.java +++ /dev/null @@ -1,24 +0,0 @@ -package railcraft.common.api.tracks; - -import net.minecraft.src.AxisAlignedBB; -import net.minecraft.src.MovingObjectPosition; -import net.minecraft.src.Vec3; - -/** - * Used by rails that modify the bounding boxes. - * - * For example, the Gated Rails. - * - * Not very useful since there is no system in place to insert custom render code. - * - * @author CovertJaguar - */ -public interface ITrackCustomShape extends ITrackInstance -{ - - public AxisAlignedBB getCollisionBoundingBoxFromPool(); - - public AxisAlignedBB getSelectedBoundingBoxFromPool(); - - public MovingObjectPosition collisionRayTrace(Vec3 vec3d, Vec3 vec3d1); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackEmitter.java b/src/common/railcraft/common/api/tracks/ITrackEmitter.java deleted file mode 100644 index bec74732..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackEmitter.java +++ /dev/null @@ -1,22 +0,0 @@ -package railcraft.common.api.tracks; - -/** - * Tracks that can emit a redstone signal should implement - * this interface. - * - * For example a detector track. - * - * A track cannot implement both ITrackPowered and ITrackEmitter. - * - * @author CovertJaguar - */ -public interface ITrackEmitter extends ITrackInstance -{ - - /** - * Return true if the track is producing a redstone signal. - * - * @return true if powered - */ - public boolean isTrackPowering(); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackInstance.java b/src/common/railcraft/common/api/tracks/ITrackInstance.java deleted file mode 100644 index 460959fa..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackInstance.java +++ /dev/null @@ -1,123 +0,0 @@ -package railcraft.common.api.tracks; - -import net.minecraft.src.Entity; -import net.minecraft.src.EntityLiving; -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import railcraft.common.api.core.INetworkedObject; - -/** - * This interface defines a track. - * - * Basically all block and tile entity functions for Tracks are delegated to an - * ITrackInstance. - * - * Instead of implementing this interface directly, you should probably - * extend TrackInstanceBase. It will simplify your life. - * - * All packet manipulation is handled by Railcraft's code, - * you just need to implement the functions in INetworkedObject - * to pass data from the server to the client. - * - * @author CovertJaguar - * @see TrackInstanceBase - */ -public interface ITrackInstance extends INetworkedObject -{ - - public TrackSpec getTrackSpec(); - - /** - * Return the rail's metadata (without the power bit if the rail uses one). - * Can be used to make the cart think the rail something other than it is, - * for example when making diamond junctions or switches. - * - * Valid rail metadata is defined as follows: - * 0x0: flat track going North-South - * 0x1: flat track going West-East - * 0x2: track ascending to the East - * 0x3: track ascending to the West - * 0x4: track ascending to the North - * 0x5: track ascending to the South - * 0x6: WestNorth corner (connecting East and South) - * 0x7: EastNorth corner (connecting West and South) - * 0x8: EastSouth corner (connecting West and North) - * 0x9: WestSouth corner (connecting East and North) - * - * @param cart The cart asking for the metadata, null if it is not called by EntityMinecart. - * @return The metadata. - */ - public int getBasicRailMetadata(EntityMinecart cart); - - /** - * This function is called by any minecart that passes over this rail. - * It is called once per update tick that the minecart is on the rail. - * @param cart The cart on the rail. - */ - public void onMinecartPass(EntityMinecart cart); - - /** - * Return the block texture to be used. - * - * @return - */ - public int getTextureIndex(); - - public void writeToNBT(NBTTagCompound data); - - public void readFromNBT(NBTTagCompound data); - - /** - * Return true if this track requires update ticks. - * @return - */ - public boolean canUpdate(); - - public void updateEntity(); - - public boolean blockActivated(EntityPlayer player); - - public void onBlockPlaced(int side); - - public void onBlockPlacedBy(EntityLiving entity); - - public void onNeighborBlockChange(int id); - - /** - * Internal function that sets the Track's TileEntity so it can - * be referenced for position information, etc... - * @param tile - */ - public void setTile(TileEntity tile); - - public int getX(); - - public int getY(); - - public int getZ(); - - public float getExplosionResistance(double srcX, double srcY, double srcZ, Entity exploder); - - /** - * Return true if the rail can make corners. - * Used by placement logic. - * @return true if the rail can make corners. - */ - public boolean isFlexibleRail(); - - /** - * Returns true if the rail can make up and down slopes. - * Used by placement logic. - * @return true if the rail can make slopes. - */ - public boolean canMakeSlopes(); - - /** - * Returns the max speed of the rail. - * @param cart The cart on the rail, may be null. - * @return The max speed of the current rail. - */ - public float getRailMaxSpeed(EntityMinecart cart); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackLockdown.java b/src/common/railcraft/common/api/tracks/ITrackLockdown.java deleted file mode 100644 index c9c287b4..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackLockdown.java +++ /dev/null @@ -1,18 +0,0 @@ -package railcraft.common.api.tracks; - -import net.minecraft.src.EntityMinecart; - -/** - * Any rail tile entity that can completely halt - * all cart movement should implement this interface. - * (Used in collision handling) - * - * @author CovertJaguar - */ -public interface ITrackLockdown extends ITrackInstance -{ - - public boolean isCartLockedDown(EntityMinecart cart); - - public void releaseCart(); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackPowered.java b/src/common/railcraft/common/api/tracks/ITrackPowered.java deleted file mode 100644 index 66a9c434..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackPowered.java +++ /dev/null @@ -1,24 +0,0 @@ -package railcraft.common.api.tracks; - -/** - * Implementing this interface will allow your track to be - * powered via Redstone. - * - * And so long as you inherit from TrackInstanceBase, all the code for updating - * the power state is already in place (including propagation). - * - * @author CovertJaguar - */ -public interface ITrackPowered extends ITrackInstance -{ - - public boolean isPowered(); - - public void setPowered(boolean powered); - - /** - * The distance that a redstone signal will be passed along from track to track. - * @return int - */ - public int getPowerPropagation(); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackReversable.java b/src/common/railcraft/common/api/tracks/ITrackReversable.java deleted file mode 100644 index c44bff8d..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackReversable.java +++ /dev/null @@ -1,17 +0,0 @@ -package railcraft.common.api.tracks; - -/** - * Implementing this interface will allow your track to be direction specific. - * - * And so long as you inherit from TrackInstanceBase it will automatically be - * reversable via the Crowbar. - * - * @author CovertJaguar - */ -public interface ITrackReversable extends ITrackInstance -{ - - public boolean isReversed(); - - public void setReversed(boolean reversed); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackSwitch.java b/src/common/railcraft/common/api/tracks/ITrackSwitch.java deleted file mode 100644 index 0d30ed84..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackSwitch.java +++ /dev/null @@ -1,21 +0,0 @@ -package railcraft.common.api.tracks; - -public interface ITrackSwitch extends ITrackInstance -{ - - enum ArrowDirection - { - - NORTH, SOUTH, EAST, WEST, NORTH_SOUTH, EAST_WEST - }; - - public boolean isSwitched(); - - public void setSwitched(boolean switched); - - public boolean isMirrored(); - - public ArrowDirection getRedSignDirection(); - - public ArrowDirection getWhiteSignDirection(); -} diff --git a/src/common/railcraft/common/api/tracks/ITrackTile.java b/src/common/railcraft/common/api/tracks/ITrackTile.java deleted file mode 100644 index 54140bc9..00000000 --- a/src/common/railcraft/common/api/tracks/ITrackTile.java +++ /dev/null @@ -1,13 +0,0 @@ -package railcraft.common.api.tracks; - -/** - * Don't use this, its an interface that allows other API code - * access to internal functions of the code. - * - * @author CovertJaguar - */ -public interface ITrackTile -{ - - public ITrackInstance getTrackInstance(); -} diff --git a/src/common/railcraft/common/api/tracks/RailTools.java b/src/common/railcraft/common/api/tracks/RailTools.java deleted file mode 100644 index 39353020..00000000 --- a/src/common/railcraft/common/api/tracks/RailTools.java +++ /dev/null @@ -1,175 +0,0 @@ -package railcraft.common.api.tracks; - -import railcraft.common.api.core.items.ITrackItem; -import net.minecraft.src.Block; -import net.minecraft.src.BlockRail; -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -/** - * A number of utility functions related to rails. - * @author CovertJaguar - */ -public abstract class RailTools -{ - - /** - * Attempts to place a rail of the type provided. - * There is no need to verify that the ItemStack contains a valid rail - * prior to calling this function. - * - * The function takes care of that and will return false if the ItemStack - * is not a valid ITrackItem or an ItemBlock who's id - * will return true when passed to BlockRail.isRailBlock(itemID). - * - * That means this function can place any Railcraft or vanilla rail - * and has at least a decent chance of being able to place - * most third party rails. - * - * @param stack The ItemStack containing the rail - * @param world The World object - * @param i x-Coord - * @param j y-Coord - * @param k z-Coord - * @return true if successful - * @see ITrackItem - */ - public static boolean placeRailAt(ItemStack stack, World world, int i, int j, int k) - { - if(stack == null) { - return false; - } - if(stack.getItem() instanceof ITrackItem) { - return ((ITrackItem)stack.getItem()).placeTrack(stack.copy(), world, i, j, k); - } - if(stack.getItem() instanceof ItemBlock && stack.itemID < Block.blocksList.length && BlockRail.isRailBlock(stack.itemID)) { - boolean success = world.setBlockWithNotify(i, j, k, stack.itemID); - if(success) { - world.playSoundEffect((float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F, Block.rail.stepSound.getStepSound(), (Block.rail.stepSound.getVolume() + 1.0F) / 2.0F, Block.rail.stepSound.getPitch() * 0.8F); - } - return success; - } - return false; - } - - /** - * Returns true if the ItemStack contains a valid Railcraft Track item. - * - * Will return false is passed a vanilla rail. - * - * @param stack The ItemStack to test - * @return true if rail - * @see ITrackItem - */ - public static boolean isTrackItem(ItemStack stack) - { - return stack != null && stack.getItem() instanceof ITrackItem; - } - - /** - * Checks to see if a cart is being held by a ITrackLockdown. - * @param cart The cart to check - * @return True if being held - */ - public static boolean isCartLockedDown(EntityMinecart cart) - { - int x = MathHelper.floor_double(cart.posX); - int y = MathHelper.floor_double(cart.posY); - int z = MathHelper.floor_double(cart.posZ); - - if(BlockRail.isRailBlockAt(cart.worldObj, x, y - 1, z)) { - y--; - } - - TileEntity tile = cart.worldObj.getBlockTileEntity(x, y, z); - if(tile instanceof ITrackTile) { - ITrackInstance track = ((ITrackTile)tile).getTrackInstance(); - return track instanceof ITrackLockdown && ((ITrackLockdown)track).isCartLockedDown(cart); - } - return false; - } - - /** - * Verifies that two rails are connected to each other - * along a straight line with no gaps or wanderings. - * @param world The World object - * @param i1 x-Coord of Rail #1 - * @param j1 y-Coord of Rail #1 - * @param k1 z-Coord of Rail #1 - * @param i2 x-Coord of Rail #2 - * @param j2 y-Coord of Rail #2 - * @param k2 z-Coord of Rail #2 - * @return true if they are connected - */ - public static boolean areDistantRailsConnectedAlongAxis(World world, int i1, int j1, int k1, int i2, int j2, int k2) - { - if(j1 < 0 || j2 < 0) { - return false; - } - if(i1 != i2 && k1 != k2) { - return false; - } - if(i1 != i2) { - int min = 0; - int max = 0; - int jj = 0; - if(i1 < i2) { - min = i1; - max = i2; - jj = j1; - } else { - min = i2; - max = i1; - jj = j2; - } - for(int ii = min; ii <= max; ii++) { - if(world.blockExists(ii, jj, k1)) { - if(BlockRail.isRailBlockAt(world, ii, jj, k1)) { - continue; - } else if(BlockRail.isRailBlockAt(world, ii, jj - 1, k1)) { - jj--; - continue; - } else if(BlockRail.isRailBlockAt(world, ii, jj + 1, k1)) { - jj++; - continue; - } else { - return false; - } - } - } - } else if(k1 != k2) { - int min = 0; - int max = 0; - int jj = 0; - if(k1 < k2) { - min = k1; - max = k2; - jj = j1; - } else { - min = k2; - max = k1; - jj = j2; - } - for(int kk = min; kk <= max; kk++) { - if(world.blockExists(i1, jj, kk)) { - if(BlockRail.isRailBlockAt(world, i1, jj, kk)) { - continue; - } else if(BlockRail.isRailBlockAt(world, i1, jj - 1, kk)) { - jj--; - continue; - } else if(BlockRail.isRailBlockAt(world, i1, jj + 1, kk)) { - jj++; - continue; - } else { - return false; - } - } - } - } - return true; - } -} diff --git a/src/common/railcraft/common/api/tracks/TrackInstanceBase.java b/src/common/railcraft/common/api/tracks/TrackInstanceBase.java deleted file mode 100644 index 35d04573..00000000 --- a/src/common/railcraft/common/api/tracks/TrackInstanceBase.java +++ /dev/null @@ -1,385 +0,0 @@ -package railcraft.common.api.tracks; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import net.minecraft.src.Block; -import net.minecraft.src.BlockRail; -import net.minecraft.src.Entity; -import net.minecraft.src.EntityLiving; -import net.minecraft.src.EntityMinecart; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.RailLogic; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; -import railcraft.common.api.core.items.ICrowbar; - -/** - * All ITrackInstances should extend this class. It contains a number of - * default functions and standard behavior for Tracks that should - * greatly simplify implementing new Tracks when using this API. - * - * @author CovertJaguar - * @see ITrackInstance - * @see TrackRegistry - * @see TrackSpec - */ -public abstract class TrackInstanceBase implements ITrackInstance -{ - - private Block block; - public TileEntity tileEntity; - - private Block getBlock() - { - if(block == null) { - int id = getWorld().getBlockId(getX(), getY(), getZ()); - block = Block.blocksList[id]; - } - return block; - } - - @Override - public void setTile(TileEntity tile) - { - tileEntity = tile; - } - - @Override - public int getBasicRailMetadata(EntityMinecart cart) - { - return tileEntity.getBlockMetadata(); - } - - @Override - public void onMinecartPass(EntityMinecart cart) - { - } - - @Override - public boolean blockActivated(EntityPlayer player) - { - if(this instanceof ITrackReversable) { - ItemStack current = player.getCurrentEquippedItem(); - if(current != null && current.getItem() instanceof ICrowbar) { - ITrackReversable track = (ITrackReversable)this; - track.setReversed(!track.isReversed()); - markBlockNeedsUpdate(); - if(current.isItemStackDamageable()) { - current.damageItem(1, player); - } - return true; - } - } - return false; - } - - @Override - public void onBlockPlaced(int side) - { - switchTrack(true); - testPower(); - markBlockNeedsUpdate(); - } - - @Override - public void onBlockPlacedBy(EntityLiving entityliving) - { - if(entityliving == null) { - return; - } - if(this instanceof ITrackReversable) { - int dir = MathHelper.floor_double((double)((entityliving.rotationYaw * 4F) / 360F) + 0.5D) & 3; - ((ITrackReversable)this).setReversed(dir == 0 || dir == 1); - } - markBlockNeedsUpdate(); - } - - public void markBlockNeedsUpdate() - { - getWorld().markBlockNeedsUpdate(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - } - - protected boolean isRailValid(World world, int i, int j, int k, int meta) - { - boolean valid = true; - if(!world.isBlockSolidOnSide(i, j - 1, k, ForgeDirection.UP)) { - valid = false; - } - if(meta == 2 && !world.isBlockSolidOnSide(i + 1, j, k, ForgeDirection.UP)) { - valid = false; - } else if(meta == 3 && !world.isBlockSolidOnSide(i - 1, j, k, ForgeDirection.UP)) { - valid = false; - } else if(meta == 4 && !world.isBlockSolidOnSide(i, j, k - 1, ForgeDirection.UP)) { - valid = false; - } else if(meta == 5 && !world.isBlockSolidOnSide(i, j, k + 1, ForgeDirection.UP)) { - valid = false; - } - return valid; - } - - @Override - public void onNeighborBlockChange(int id) - { - int meta = tileEntity.getBlockMetadata(); - boolean valid = isRailValid(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, meta); - if(!valid) { - Block blockTrack = getBlock(); - blockTrack.dropBlockAsItem(getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0, 0); - getWorld().setBlockWithNotify(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0); - return; - } - - BlockRail blockTrack = (BlockRail)getBlock(); - if(id > 0 && Block.blocksList[id].canProvidePower() && isFlexibleRail() && RailLogic.getAdjacentTracks(new RailLogic(blockTrack, getWorld(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)) == 3) { - switchTrack(false); - } - testPower(); - } - - protected void switchTrack(boolean flag) - { - int i = tileEntity.xCoord; - int j = tileEntity.yCoord; - int k = tileEntity.zCoord; - BlockRail blockTrack = (BlockRail)getBlock(); - (new RailLogic(blockTrack, getWorld(), i, j, k)).refreshTrackShape(getWorld().isBlockIndirectlyGettingPowered(i, j, k), flag); - } - - protected void testPower() - { - if(!(this instanceof ITrackPowered)) { - return; - } - int i = tileEntity.xCoord; - int j = tileEntity.yCoord; - int k = tileEntity.zCoord; - ITrackPowered r = (ITrackPowered)this; - int meta = tileEntity.getBlockMetadata(); - boolean powered = getWorld().isBlockIndirectlyGettingPowered(i, j, k) || getWorld().isBlockIndirectlyGettingPowered(i, j + 1, k) || testPowerPropagation(getWorld(), i, j, k, getTrackSpec(), meta, r.getPowerPropagation()); - if(powered != r.isPowered()) { - r.setPowered(powered); - Block blockTrack = getBlock(); - getWorld().notifyBlocksOfNeighborChange(i, j, k, blockTrack.blockID); - getWorld().notifyBlocksOfNeighborChange(i, j - 1, k, blockTrack.blockID); - if(meta == 2 || meta == 3 || meta == 4 || meta == 5) { - getWorld().notifyBlocksOfNeighborChange(i, j + 1, k, blockTrack.blockID); - } - markBlockNeedsUpdate(); - // System.out.println("Setting power [" + i + ", " + j + ", " + k + "]"); - } - } - - protected boolean testPowerPropagation(World world, int i, int j, int k, TrackSpec spec, int meta, int maxDist) - { - return isConnectedRailPowered(world, i, j, k, spec, meta, true, 0, maxDist) || isConnectedRailPowered(world, i, j, k, spec, meta, false, 0, maxDist); - } - - protected boolean isConnectedRailPowered(World world, int i, int j, int k, TrackSpec spec, int meta, boolean dir, int dist, int maxDist) - { - if(dist >= maxDist) { - return false; - } - boolean powered = true; - switch (meta) { - case 0: // '\0' - if(dir) { - k++; - } else { - k--; - } - break; - - case 1: // '\001' - if(dir) { - i--; - } else { - i++; - } - break; - - case 2: // '\002' - if(dir) { - i--; - } else { - i++; - j++; - powered = false; - } - meta = 1; - break; - - case 3: // '\003' - if(dir) { - i--; - j++; - powered = false; - } else { - i++; - } - meta = 1; - break; - - case 4: // '\004' - if(dir) { - k++; - } else { - k--; - j++; - powered = false; - } - meta = 0; - break; - - case 5: // '\005' - if(dir) { - k++; - j++; - powered = false; - } else { - k--; - } - meta = 0; - break; - } - if(testPowered(world, i, j, k, spec, dir, dist, maxDist, meta)) { - return true; - } - return powered && testPowered(world, i, j - 1, k, spec, dir, dist, maxDist, meta); - } - - protected boolean testPowered(World world, int i, int j, int k, TrackSpec spec, boolean dir, int dist, int maxDist, int orientation) - { - // System.out.println("Testing Power at <" + i + ", " + j + ", " + k + ">"); - int id = world.getBlockId(i, j, k); - Block blockTrack = getBlock(); - if(id == blockTrack.blockID) { - int meta = world.getBlockMetadata(i, j, k); - TileEntity tile = world.getBlockTileEntity(i, j, k); - if(tile instanceof ITrackTile) { - ITrackInstance track = ((ITrackTile)tile).getTrackInstance(); - if(!(track instanceof ITrackPowered) || track.getTrackSpec() != spec) { - return false; - } - if(orientation == 1 && (meta == 0 || meta == 4 || meta == 5)) { - return false; - } - if(orientation == 0 && (meta == 1 || meta == 2 || meta == 3)) { - return false; - } - if(((ITrackPowered)track).isPowered()) { - if(world.isBlockIndirectlyGettingPowered(i, j, k) || world.isBlockIndirectlyGettingPowered(i, j + 1, k)) { - return true; - } else { - return isConnectedRailPowered(world, i, j, k, spec, meta, dir, dist + 1, maxDist); - } - } - } - } - return false; - } - - @Override - public int getTextureIndex() - { - return getTrackSpec().getTextureIndex(); - } - - @Override - public void writeToNBT(NBTTagCompound data) - { - } - - @Override - public void readFromNBT(NBTTagCompound data) - { - } - - @Override - public boolean canUpdate() - { - return false; - } - - @Override - public void updateEntity() - { - } - - @Override - public float getExplosionResistance(double srcX, double srcY, double srcZ, Entity exploder) - { - return 3.5f; - } - - @Override - public void writePacketData(DataOutputStream data) throws IOException - { - } - - @Override - public void readPacketData(DataInputStream data) throws IOException - { - } - - @Override - public World getWorld() - { - return tileEntity.worldObj; - } - - @Override - public int getX() - { - return tileEntity.xCoord; - } - - @Override - public int getY() - { - return tileEntity.yCoord; - } - - @Override - public int getZ() - { - return tileEntity.zCoord; - } - - /** - * Return true if the rail can make corners. - * Used by placement logic. - * @return true if the rail can make corners. - */ - @Override - public boolean isFlexibleRail() - { - return false; - } - - /** - * Returns true if the rail can make up and down slopes. - * Used by placement logic. - * @return true if the rail can make slopes. - */ - @Override - public boolean canMakeSlopes() - { - return true; - } - - /** - * Returns the max speed of the rail. - * @param cart The cart on the rail, may be null. - * @return The max speed of the current rail. - */ - @Override - public float getRailMaxSpeed(EntityMinecart cart) - { - return 0.4f; - } -} diff --git a/src/common/railcraft/common/api/tracks/TrackRegistry.java b/src/common/railcraft/common/api/tracks/TrackRegistry.java deleted file mode 100644 index 017dd31f..00000000 --- a/src/common/railcraft/common/api/tracks/TrackRegistry.java +++ /dev/null @@ -1,62 +0,0 @@ -package railcraft.common.api.tracks; - -import cpw.mods.fml.common.FMLCommonHandler; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; - -/** - * The TrackRegistry is part of a system that allows 3rd party addons to simply, - * quickly, and easily define new Tracks with unique behaviors without requiring - * that any additional block ids be used. - * - * All the tracks in RailcraftProxy are implemented using this system 100% - * (except for Gated Tracks and Switch Tracks which have some custom render code). - * - * To define a new track, you need to define a TrackSpec and create a ITrackInstance. - * - * The TrackSpec contains basic constant information about the Track, while the TrackInstace - * controls how an individual Track block interact with the world. - * - * @author CovertJaguar - * @see TrackSpec - * @see ITrackInstance - * @see TrackInstanceBase - */ -public class TrackRegistry -{ - - private static Map trackSpecs = new HashMap(); - - public static void registerTrackSpec(TrackSpec trackSpec) - { - if(trackSpecs.put(trackSpec.getTrackId(), trackSpec) != null) { - throw new RuntimeException("TrackId conflict detected, please adjust your config or contact the author of the " + trackSpec.getTrackTag()); - } - } - - /** - * Returns a cached copy of a TrackSpec object. - * - * @param trackId - * @return - */ - public static TrackSpec getTrackSpec(int trackId) - { - TrackSpec spec = trackSpecs.get((short)trackId); - if(spec == null) { - FMLCommonHandler.instance().getFMLLogger().log(Level.WARNING, "[Railcraft] Unknown Track Spec ID({0}), reverting to normal track", trackId); - spec = trackSpecs.get(-1); - } - return spec; - } - - /** - * Returns all Registered TrackSpecs. - * @return list of TrackSpecs - */ - public static Map getTrackSpecs() - { - return trackSpecs; - } -} diff --git a/src/common/railcraft/common/api/tracks/TrackSpec.java b/src/common/railcraft/common/api/tracks/TrackSpec.java deleted file mode 100644 index 68608a63..00000000 --- a/src/common/railcraft/common/api/tracks/TrackSpec.java +++ /dev/null @@ -1,86 +0,0 @@ -package railcraft.common.api.tracks; - -import net.minecraft.src.ItemStack; -import railcraft.common.api.core.items.ItemRegistry; - -/** - * Each type of Track has a single instance of TrackSpec - * that corresponds with it. - * - * Each Track block in the world has a ITrackInstance that - * corresponds with it. - * - * Take note of the difference (similar to block classes and tile entities classes). - * - * TrackSpecs must be registered with the TrackRegistry. - * - * Track Items can be acquired with the ItemRegistry. - * - * @see TrackRegistry - * @see ITrackInstance - * - * @author CovertJaguar - */ -public final class TrackSpec -{ - - public static int blockID = 0; - private final String tag; - private final String textureFile; - private final short trackId; - private final int textureId; - private final Class instanceClass; - - /** - * Defines a new track spec. - * - * @param trackId A unique identifier for the track type. 0-512 are reserved for Railcraft. Capped at Short.MAX_VALUE - * @param tag A unique internal string identifier (ex. "track.speed.transition") - * @param textureFile See ITextureProvider - * @param textureId The texture index used by the track's item - * @param instanceClass The ITrackInstance class that corresponds to this TrackSpec - * @see ITextureProvider - */ - public TrackSpec(short trackId, String tag, String textureFile, int textureId, Class instanceClass) { - this.trackId = trackId; - this.tag = tag; - this.textureFile = textureFile; - this.textureId = textureId; - this.instanceClass = instanceClass; - } - - public String getTrackTag() { - return tag; - } - - public short getTrackId() { - return trackId; - } - - public ItemStack getItem() { - return getItem(1); - } - - public ItemStack getItem(int qty) { - if(blockID <= 0) { - return null; - } - return new ItemStack(blockID, qty, getTrackId()); - } - - public ITrackInstance createInstanceFromSpec() { - try { - return (ITrackInstance)instanceClass.newInstance(); - } catch (Exception ex) { - throw new RuntimeException("Improper Track Instance Constructor"); - } - } - - public String getTextureFile() { - return textureFile; - } - - public int getTextureIndex() { - return textureId; - } -} diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index b49597bc..8d8edf19 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -102,18 +102,18 @@ public class SteamPowerMain{ '@',new ItemStack(BasicComponents.itemSteelPlate), 'O',new ItemStack(BasicComponents.itemCircuit,1,0), 'V',new ItemStack(BasicComponents.itemMotor)}); - GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"@T@", "OVO", "@T@", + GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"TT", "VV", "TT", 'T',new ItemStack(BasicPipesMain.parts, 1,6), - '@',new ItemStack(BasicComponents.itemSteelPlate), - 'O',new ItemStack(BasicPipesMain.parts, 1,0), 'V',new ItemStack(BasicPipesMain.parts, 1,7)}); GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", 'F',Block.stoneOvenIdle, '@',new ItemStack(BasicComponents.itemSteelPlate)}); - GameRegistry.addRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"@T@", "PMP", "@T@", - 'T',new ItemStack(BasicPipesMain.parts, 1,0), + GameRegistry.addRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"GGG", "VPV", "@T@", + 'T',new ItemStack(BasicPipesMain.parts, 1,1), + 'G',BasicPipesMain.rod, '@',new ItemStack(BasicComponents.itemSteelPlate), 'P',Block.pistonBase, + 'V',new ItemStack(BasicPipesMain.parts, 1,7), 'M',new ItemStack(BasicComponents.itemMotor)});} catch(Exception e) { From a9fe90b3ca9ce9c2b2572873cac340834d6fdd1a Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 29 Oct 2012 10:08:06 -0400 Subject: [PATCH 103/115] Updated to 1.4.2 and UE 1.0.0 I baddly need to clean this mod up but for now it should be fully updated. The recipes are not tested yet with the ore Directory changes i made to them but i'll test shortly. --- .metadata/.lock | 0 .metadata/.mylyn/.taskListIndex/segments.gen | Bin 0 -> 20 bytes .metadata/.mylyn/.taskListIndex/segments_1 | Bin 0 -> 32 bytes .metadata/.mylyn/repositories.xml.zip | Bin 0 -> 442 bytes .metadata/.mylyn/tasks.xml.zip | Bin 0 -> 250 bytes .../.root/.indexes/history.version | 1 + .../.root/.indexes/properties.index | Bin 0 -> 57 bytes .../.root/.indexes/properties.version | 1 + .../org.eclipse.core.resources/.root/1.tree | Bin 0 -> 124 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 364 bytes .../.settings/jd.ide.eclipse.prefs | 2 + .../org.eclipse.core.resources.prefs | 2 + .../org.eclipse.epp.usagedata.recording.prefs | 2 + .../.settings/org.eclipse.jdt.ui.prefs | 13 + .../.settings/org.eclipse.m2e.discovery.prefs | 2 + .../org.eclipse.mylyn.context.core.prefs | 2 + .../org.eclipse.mylyn.monitor.ui.prefs | 2 + .../.settings/org.eclipse.team.cvs.ui.prefs | 2 + .../.settings/org.eclipse.team.ui.prefs | 2 + .../.settings/org.eclipse.ui.ide.prefs | 5 + .../.settings/org.eclipse.ui.prefs | 2 + .../.settings/org.eclipse.ui.workbench.prefs | 5 + .../usagedata.csv | 119 +++++++++ .../org.eclipse.jdt.core/invalidArchivesCache | Bin 0 -> 4 bytes .../org.eclipse.jdt.core/nonChainingJarsCache | Bin 0 -> 4 bytes .../variablesAndContainers.dat | Bin 0 -> 110 bytes .../org.eclipse.jdt.ui/OpenTypeHistory.xml | 2 + .../QualifiedTypeNameHistory.xml | 2 + .../org.eclipse.jdt.ui/dialog_settings.xml | 10 + .../0.log | 0 .../logback.1.0.200.20111228-1245.xml | 41 +++ .../org.eclipse.ui.ide/dialog_settings.xml | 11 + .../dialog_settings.xml | 3 + .../org.eclipse.ui.workbench/workbench.xml | 245 ++++++++++++++++++ .../org.eclipse.ui.workbench/workingsets.xml | 4 + .../toolkit_ercp.png | Bin 0 -> 4060 bytes .../toolkit_gwt.png | Bin 0 -> 3892 bytes .../toolkit_swing.png | Bin 0 -> 3675 bytes .../toolkit_swt.png | Bin 0 -> 3894 bytes .../toolkit_xwt.png | Bin 0 -> 4007 bytes .../toolkits.xml | 145 +++++++++++ .metadata/version.ini | 1 + src/common/basicpipes/BasicPipesMain.java | 45 +--- .../basicpipes/LTanks/TileEntityLTank.java | 28 +- .../basicpipes/conductors/BlockRod.java | 2 +- .../basicpipes/conductors/TileEntityPipe.java | 10 +- .../basicpipes/conductors/TileEntityRod.java | 10 +- .../basicpipes/machines/BlockMachine.java | 4 +- .../basicpipes/machines/BlockValve.java | 12 +- src/common/mcpmod.info | 17 ++ src/common/steampower/BlockMachine.java | 2 +- src/common/steampower/SteamPowerMain.java | 49 ++-- src/common/steampower/TileEntityMachine.java | 5 +- .../steampower/boiler/TileEntityBoiler.java | 14 +- .../steampower/burner/TileEntityFireBox.java | 6 +- src/common/steampower/turbine/ItemEngine.java | 111 +++++--- .../steampower/turbine/TileEntityGen.java | 9 +- .../turbine/TileEntitySteamPiston.java | 13 +- src/minecraft/basicpipes/ModelLargePipe.java | 25 +- src/minecraft/basicpipes/ModelPipe.java | 7 +- src/minecraft/basicpipes/ModelPump.java | 8 +- .../renderTank/ModelLiquidTank.java | 5 - .../renderTank/ModelLiquidTankCorner.java | 5 - src/minecraft/mcp.png | Bin 0 -> 6940 bytes src/minecraft/steampower/ModelCenterTank.java | 8 +- src/minecraft/steampower/ModelCornerTank.java | 7 +- src/minecraft/steampower/ModelEngine.java | 8 +- src/minecraft/steampower/ModelFurnace.java | 7 +- src/minecraft/steampower/ModelGenerator.java | 7 +- src/minecraft/steampower/ModelTank.java | 8 +- .../steampower/geared/ModelGearPiston.java | 5 - 71 files changed, 816 insertions(+), 247 deletions(-) create mode 100644 .metadata/.lock create mode 100644 .metadata/.mylyn/.taskListIndex/segments.gen create mode 100644 .metadata/.mylyn/.taskListIndex/segments_1 create mode 100644 .metadata/.mylyn/repositories.xml.zip create mode 100644 .metadata/.mylyn/tasks.xml.zip create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/1.tree create mode 100644 .metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs create mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs create mode 100644 .metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache create mode 100644 .metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml create mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml create mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log create mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml create mode 100644 .metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml create mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml create mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/workbench.xml create mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png create mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml create mode 100644 .metadata/version.ini create mode 100644 src/common/mcpmod.info create mode 100644 src/minecraft/mcp.png diff --git a/.metadata/.lock b/.metadata/.lock new file mode 100644 index 00000000..e69de29b diff --git a/.metadata/.mylyn/.taskListIndex/segments.gen b/.metadata/.mylyn/.taskListIndex/segments.gen new file mode 100644 index 0000000000000000000000000000000000000000..63a7ec9a3ce3e4c844ffb7c8dd88e6eb3ff32ef5 GIT binary patch literal 20 QcmezW|NlP*2w;TK07=6G{r~^~ literal 0 HcmV?d00001 diff --git a/.metadata/.mylyn/.taskListIndex/segments_1 b/.metadata/.mylyn/.taskListIndex/segments_1 new file mode 100644 index 0000000000000000000000000000000000000000..5cefa8859c47b027a4acf915ddd0455e95070aea GIT binary patch literal 32 acmezW|NnOe21cuu>7So4paHHZuH68^HV8lf literal 0 HcmV?d00001 diff --git a/.metadata/.mylyn/repositories.xml.zip b/.metadata/.mylyn/repositories.xml.zip new file mode 100644 index 0000000000000000000000000000000000000000..d84442417efcd5124149b7780ceadfe85a5d4f94 GIT binary patch literal 442 zcmWIWW@Zs#;Nak3STiBUkpT$^0NF*U1^LC9CHX~}sl|E~xjAn`e7%_s1^#L)mT&G- zQ1b0&x9#i-J2=^=eEIDQH&s$5ZMz+xpS6EUXvWu9xieDY?(O;RvD`e{!^dDlVc2Qo zQZ3e7mqL$Si`w@k-(N3v{q2{`{qrwan_XmW){zVPqPZ{c*^_f~!+LtxZjo71mDl0W zCE{^9uxH--E~V{}iJr%dwZvbYZ@cr!B3%5pjf)BIxw)>o>!o>?wLFqr{ytx?XXyzA z=>yA_URyQe=Y)qV4v9ZH#crM*nzW{XqjS+TLlv8vd5KN^2W(0gT9uV;v|VEHOZY@l z<9h)Pwi%}TZl0>L(29}}NL!&OAb(IT=`p9$I?E|L*KPhA^-g)s`74)lW;nEbn6sxm zG1vK{bI*yX4y$?AzRFGeKl#(?C3keE+ML*YRCv#a10tM})e_1n?sGR z7zYG-ob^8EfAWm?_E0X~!pmC&f;99z&v<*DIeFfDYv`%d;hVN^=JeD#_wA&PULZ&F zOB1G7EgjbC)0QlIE*`2?!BF~?VQb4XRp%C?)j`2iME(dB8?tFG|--P0q(jX;3k{Kkz002QT7dQX_ literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources new file mode 100644 index 0000000000000000000000000000000000000000..03c85b57de306eeac17d333a881f6c2e6d8d1dbb GIT binary patch literal 364 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsg@^UE$m*y$>CzmJ~StuA!l{=WEK>s>Sd*r=q2YDrP>-A zn;M#!8Cn{d8W>sda_Q@p6r}=1dASZm{QeBKJMeQ)_3rXx4s>@*a!zVukqgKZ*qxr1 fm{SZ41suw9D|0II^hy$ovy1ggGi{-Yar+MdGA4Xu literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs new file mode 100644 index 00000000..5f8e5901 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +jd.ide.eclipse.prefs.Setup=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000..dffc6b51 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +version=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs new file mode 100644 index 00000000..32cbabee --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.epp.usagedata.recording.last-upload=1351461895073 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 00000000..c8fd235a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,13 @@ +content_assist_proposals_background=255,255,255 +content_assist_proposals_foreground=0,0,0 +eclipse.preferences.version=1 +fontPropagated=true +org.eclipse.jdt.ui.editor.tab.width= +org.eclipse.jdt.ui.formatterprofiles.version=12 +org.eclipse.jdt.ui.javadoclocations.migrated=true +org.eclipse.jface.textfont=1|Consolas|10.0|0|WINDOWS|1|0|0|0|0|0|0|0|0|1|0|0|0|0|Consolas; +proposalOrderMigrated=true +spelling_locale_initialized=true +tabWidthPropagated=true +useAnnotationsPrefPage=true +useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs new file mode 100644 index 00000000..67b1d96c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.m2e.discovery.pref.projects= diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs new file mode 100644 index 00000000..43e97e40 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +mylyn.attention.migrated=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs new file mode 100644 index 00000000..8d462a6c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs new file mode 100644 index 00000000..f9e585ba --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +pref_first_startup=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs new file mode 100644 index 00000000..56cd496f --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.team.ui.first_time=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs new file mode 100644 index 00000000..05c0b05a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs @@ -0,0 +1,5 @@ +PROBLEMS_FILTERS_MIGRATE=true +eclipse.preferences.version=1 +platformState=1341384697020 +quickStart=false +tipsAndTricks=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs new file mode 100644 index 00000000..08076f23 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +showIntro=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs new file mode 100644 index 00000000..4676c7fd --- /dev/null +++ b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs @@ -0,0 +1,5 @@ +ENABLED_DECORATORS=org.eclipse.m2e.core.mavenVersionDecorator\:false,org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator\:true,org.eclipse.jdt.ui.override.decorator\:true,org.eclipse.jdt.ui.interface.decorator\:false,org.eclipse.jdt.ui.buildpath.decorator\:true,org.eclipse.m2e.core.maven2decorator\:true,org.eclipse.mylyn.context.ui.decorator.interest\:true,org.eclipse.mylyn.tasks.ui.decorators.task\:true,org.eclipse.mylyn.team.ui.changeset.decorator\:true,org.eclipse.team.cvs.ui.decorator\:true,org.eclipse.ui.LinkedResourceDecorator\:true,org.eclipse.ui.VirtualResourceDecorator\:true,org.eclipse.ui.ContentTypeDecorator\:true,org.eclipse.ui.ResourceFilterDecorator\:false, +PLUGINS_NOT_ACTIVATED_ON_STARTUP=org.eclipse.m2e.discovery; +eclipse.preferences.version=1 +editors=\r\n\r\n\r\n\r\n\r\n\r\n\r\n +resourcetypes=\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n diff --git a/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv b/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv new file mode 100644 index 00000000..e5b7a6bb --- /dev/null +++ b/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv @@ -0,0 +1,119 @@ +what,kind,bundleId,bundleVersion,description,time +activated,perspective,org.eclipse.jdt.ui,,"org.eclipse.jdt.ui.JavaPerspective",1351461893792 +started,bundle,org.eclipse.osgi,3.7.2.v20120110-1415,"org.eclipse.osgi",1351461893793 +started,bundle,org.eclipse.core.contenttype,3.4.100.v20110423-0524,"org.eclipse.core.contenttype",1351461893794 +started,bundle,org.eclipse.core.databinding.observable,1.4.0.I20110222-0800,"org.eclipse.core.databinding.observable",1351461893795 +started,bundle,org.eclipse.core.expressions,3.4.300.v20110228,"org.eclipse.core.expressions",1351461893795 +started,bundle,org.eclipse.core.net,1.2.100.I20110511-0800,"org.eclipse.core.net",1351461893796 +started,bundle,org.eclipse.core.runtime,3.7.0.v20110110,"org.eclipse.core.runtime",1351461893797 +started,bundle,org.eclipse.core.runtime.compatibility,3.2.100.v20100505,"org.eclipse.core.runtime.compatibility",1351461893797 +started,bundle,org.eclipse.core.runtime.compatibility.auth,3.2.200.v20110110,"org.eclipse.core.runtime.compatibility.auth",1351461893798 +started,bundle,org.eclipse.epp.usagedata.gathering,1.3.1.R201106061540,"org.eclipse.epp.usagedata.gathering",1351461893798 +started,bundle,org.eclipse.epp.usagedata.recording,1.3.1.R201106061540,"org.eclipse.epp.usagedata.recording",1351461893799 +started,bundle,org.eclipse.equinox.app,1.3.100.v20110321,"org.eclipse.equinox.app",1351461893799 +started,bundle,org.eclipse.equinox.common,3.6.0.v20110523,"org.eclipse.equinox.common",1351461893800 +started,bundle,org.eclipse.equinox.event,1.2.100.v20110502,"org.eclipse.equinox.event",1351461893800 +started,bundle,org.eclipse.equinox.util,1.0.300.v20110502,"org.eclipse.equinox.util",1351461893801 +started,bundle,org.eclipse.help,3.5.100.v20110426,"org.eclipse.help",1351461893813 +started,bundle,org.eclipse.team.core,3.6.0.I20110525-0800,"org.eclipse.team.core",1351461893814 +started,bundle,org.eclipse.ui.intro,3.4.100.v20110425,"org.eclipse.ui.intro",1351461893815 +started,bundle,org.eclipse.ui.intro.universal,3.2.500.v20110510,"org.eclipse.ui.intro.universal",1351461893815 +started,bundle,org.eclipse.update.configurator,3.3.100.v20100512,"org.eclipse.update.configurator",1351461893816 +started,bundle,org.eclipse.update.core,3.2.500.v20110330,"org.eclipse.update.core",1351461893854 +started,bundle,org.eclipse.update.scheduler,3.2.300.v20100512,"org.eclipse.update.scheduler",1351461893855 +started,bundle,jd.ide.eclipse,0.1.3,"jd.ide.eclipse",1351461893856 +started,bundle,org.eclipse.equinox.simpleconfigurator,1.0.200.v20110815-1438,"org.eclipse.equinox.simpleconfigurator",1351461893857 +started,bundle,com.ibm.icu,4.4.2.v20110823,"com.ibm.icu",1351461893857 +started,bundle,org.eclipse.core.filebuffers,3.5.200.v20110928-1504,"org.eclipse.core.filebuffers",1351461893858 +started,bundle,org.eclipse.core.jobs,3.5.101.v20120113-1953,"org.eclipse.core.jobs",1351461893859 +started,bundle,org.eclipse.core.resources,3.7.101.v20120125-1505,"org.eclipse.core.resources",1351461893860 +started,bundle,org.eclipse.epp.mpc.ui,1.1.1.I20110907-0947,"org.eclipse.epp.mpc.ui",1351461893860 +started,bundle,org.eclipse.equinox.ds,1.3.1.R37x_v20110701,"org.eclipse.equinox.ds",1351461893861 +started,bundle,org.eclipse.equinox.p2.core,2.1.1.v20120113-1346,"org.eclipse.equinox.p2.core",1351461893862 +started,bundle,org.eclipse.equinox.p2.directorywatcher,1.0.300.v20110815-1419,"org.eclipse.equinox.p2.directorywatcher",1351461893862 +started,bundle,org.eclipse.equinox.p2.operations,2.1.1.R37x_v20111111,"org.eclipse.equinox.p2.operations",1351461893863 +started,bundle,org.eclipse.equinox.p2.reconciler.dropins,1.1.100.v20110815-1419,"org.eclipse.equinox.p2.reconciler.dropins",1351461893864 +started,bundle,org.eclipse.equinox.preferences,3.4.2.v20120111-2020,"org.eclipse.equinox.preferences",1351461893865 +started,bundle,org.eclipse.equinox.registry,3.5.101.R37x_v20110810-1611,"org.eclipse.equinox.registry",1351461893865 +started,bundle,org.eclipse.equinox.security,1.1.1.R37x_v20110822-1018,"org.eclipse.equinox.security",1351461893882 +started,bundle,org.eclipse.jdt.core,3.7.3.v20120119-1537,"org.eclipse.jdt.core",1351461893883 +started,bundle,org.eclipse.jdt.core.manipulation,1.4.0.v20110928-1453,"org.eclipse.jdt.core.manipulation",1351461893883 +started,bundle,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui",1351461893888 +started,bundle,org.eclipse.jface,3.7.0.v20110928-1505,"org.eclipse.jface",1351461893889 +started,bundle,org.eclipse.m2e.logback.configuration,1.0.200.20111228-1245,"org.eclipse.m2e.logback.configuration",1351461893889 +started,bundle,org.eclipse.mylyn.bugzilla.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.bugzilla.core",1351461893901 +started,bundle,org.eclipse.mylyn.bugzilla.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.bugzilla.ui",1351461893902 +started,bundle,org.eclipse.mylyn.commons.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.core",1351461893902 +started,bundle,org.eclipse.mylyn.commons.net,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.net",1351461893902 +started,bundle,org.eclipse.mylyn.commons.notifications.core,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.core",1351461893902 +started,bundle,org.eclipse.mylyn.commons.notifications.feed,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.feed",1351461893903 +started,bundle,org.eclipse.mylyn.commons.notifications.ui,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.ui",1351461893903 +started,bundle,org.eclipse.mylyn.commons.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.ui",1351461893904 +started,bundle,org.eclipse.mylyn.commons.workbench,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.workbench",1351461893904 +started,bundle,org.eclipse.mylyn.context.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.context.core",1351461893904 +started,bundle,org.eclipse.mylyn.context.tasks.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.context.tasks.ui",1351461893905 +started,bundle,org.eclipse.mylyn.monitor.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.monitor.ui",1351461893905 +started,bundle,org.eclipse.mylyn.tasks.index.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.tasks.index.core",1351461893906 +started,bundle,org.eclipse.mylyn.tasks.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.tasks.ui",1351461893907 +started,bundle,org.eclipse.search,3.7.0.v20110928-1504,"org.eclipse.search",1351461893927 +started,bundle,org.eclipse.ui,3.7.0.v20110928-1505,"org.eclipse.ui",1351461893943 +started,bundle,org.eclipse.ui.editors,3.7.0.v20110928-1504,"org.eclipse.ui.editors",1351461893944 +started,bundle,org.eclipse.ui.forms,3.5.101.v20111011-1919,"org.eclipse.ui.forms",1351461893944 +started,bundle,org.eclipse.ui.ide,3.7.0.v20110928-1505,"org.eclipse.ui.ide",1351461893945 +started,bundle,org.eclipse.ui.net,1.2.100.v20111208-1155,"org.eclipse.ui.net",1351461893946 +started,bundle,org.eclipse.ui.views,3.6.0.v20110928-1505,"org.eclipse.ui.views",1351461893946 +started,bundle,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"org.eclipse.ui.workbench",1351461893947 +started,bundle,org.eclipse.ui.workbench.texteditor,3.7.0.v20110928-1504,"org.eclipse.ui.workbench.texteditor",1351461893965 +os,sysinfo,,,"win32",1351461893968 +arch,sysinfo,,,"x86",1351461893968 +ws,sysinfo,,,"win32",1351461893968 +locale,sysinfo,,,"en_US",1351461893968 +processors,sysinfo,,,"4",1351461893968 +java.runtime.name,sysinfo,,,"Java(TM) SE Runtime Environment",1351461893968 +java.runtime.version,sysinfo,,,"1.7.0_07-b10",1351461893969 +java.specification.name,sysinfo,,,"Java Platform API Specification",1351461893969 +java.specification.vendor,sysinfo,,,"Oracle Corporation",1351461893969 +java.specification.version,sysinfo,,,"1.7",1351461893969 +java.vendor,sysinfo,,,"Oracle Corporation",1351461893969 +java.version,sysinfo,,,"1.7.0_07",1351461893969 +java.vm.info,sysinfo,,,"mixed mode, sharing",1351461893969 +java.vm.name,sysinfo,,,"Java HotSpot(TM) Client VM",1351461893969 +java.vm.specification.name,sysinfo,,,"Java Virtual Machine Specification",1351461893969 +java.vm.specification.vendor,sysinfo,,,"Oracle Corporation",1351461893969 +java.vm.specification.version,sysinfo,,,"1.7",1351461893969 +java.vm.vendor,sysinfo,,,"Oracle Corporation",1351461893969 +java.vm.version,sysinfo,,,"23.3-b01",1351461893969 +started,bundle,org.eclipse.equinox.p2.repository,2.1.1.v20120113-1346,"org.eclipse.equinox.p2.repository",1351461893994 +started,bundle,org.eclipse.m2e.usagedata,1.0.200.20111228-1245,"org.eclipse.m2e.usagedata",1351461893996 +started,bundle,org.eclipse.equinox.p2.metadata.repository,1.2.0.v20110815-1419,"org.eclipse.equinox.p2.metadata.repository",1351461894009 +started,bundle,org.eclipse.equinox.p2.ui.sdk.scheduler,1.0.100.v20110815-1419,"org.eclipse.equinox.p2.ui.sdk.scheduler",1351461894041 +started,bundle,org.eclipse.equinox.p2.updatechecker,1.1.200.v20110815-1419,"org.eclipse.equinox.p2.updatechecker",1351461894059 +started,bundle,org.eclipse.m2e.discovery,1.0.200.20111228-1245,"org.eclipse.m2e.discovery",1351461894081 +started,bundle,org.eclipse.mylyn.team.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.team.ui",1351461894094 +started,bundle,org.eclipse.wb.discovery.core,1.3.0.r37x201202052340,"org.eclipse.wb.discovery.core",1351461894163 +started,bundle,org.eclipse.jsch.core,1.1.300.I20110514-0800,"org.eclipse.jsch.core",1351461894266 +started,bundle,org.eclipse.team.cvs.core,3.3.400.I20110510-0800,"org.eclipse.team.cvs.core",1351461894280 +started,bundle,org.eclipse.team.ui,3.6.101.R37x_v20111109-0800,"org.eclipse.team.ui",1351461894298 +started,bundle,org.eclipse.ui.console,3.5.100.v20111007_r372,"org.eclipse.ui.console",1351461894313 +started,bundle,org.eclipse.team.cvs.ui,3.3.401.v20120126-1227,"org.eclipse.team.cvs.ui",1351461894437 +activated,view,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui.PackageExplorer",1351461894607 +activated,view,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui.PackageExplorer",1351461894647 +closed,view,org.eclipse.ui,3.7.0.v20110928-1505,"org.eclipse.ui.internal.introview",1351461894690 +started,bundle,org.eclipse.wb.discovery.ui,1.3.0.r37x201202052340,"org.eclipse.wb.discovery.ui",1351461895209 +deactivated,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461904591 +activated,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461924702 +closed,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461924783 +started,bundle,org.eclipse.core.filesystem,1.3.100.v20110423-0524,"org.eclipse.core.filesystem",1351461925042 +started,bundle,org.eclipse.compare.core,3.5.200.I20110208-0800,"org.eclipse.compare.core",1351461925263 +started,bundle,org.eclipse.compare,3.5.202.R37x_v20111109-0800,"org.eclipse.compare",1351461925294 +stopped,bundle,org.eclipse.ui.cheatsheets,3.4.100.v20110425,"org.eclipse.ui.cheatsheets",1351461925606 +stopped,bundle,org.eclipse.epp.usagedata.ui,1.3.1.R201106061540,"org.eclipse.epp.usagedata.ui",1351461925607 +stopped,bundle,org.eclipse.epp.mpc.ui,1.1.1.I20110907-0947,"org.eclipse.epp.mpc.ui",1351461925607 +stopped,bundle,org.eclipse.ui.intro.universal,3.2.500.v20110510,"org.eclipse.ui.intro.universal",1351461925607 +stopped,bundle,org.eclipse.ui.intro,3.4.100.v20110425,"org.eclipse.ui.intro",1351461925607 +stopped,bundle,jd.ide.eclipse,0.1.3,"jd.ide.eclipse",1351461925607 +stopped,bundle,org.eclipse.help.ui,3.5.101.r37_20110819,"org.eclipse.help.ui",1351461925610 +stopped,bundle,org.eclipse.help.webapp,3.6.1.r37_20110929,"org.eclipse.help.webapp",1351461925640 +stopped,bundle,org.eclipse.help.base,3.6.2.v201202080800,"org.eclipse.help.base",1351461925640 +stopped,bundle,org.eclipse.equinox.http.jetty,2.0.100.v20110502,"org.eclipse.equinox.http.jetty",1351461925662 +stopped,bundle,org.eclipse.m2e.discovery,1.0.200.20111228-1245,"org.eclipse.m2e.discovery",1351461925662 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache b/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache new file mode 100644 index 0000000000000000000000000000000000000000..593f4708db84ac8fd0f5cc47c634f38c013fe9e4 GIT binary patch literal 4 LcmZQzU|;|M00aO5 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache new file mode 100644 index 0000000000000000000000000000000000000000..593f4708db84ac8fd0f5cc47c634f38c013fe9e4 GIT binary patch literal 4 LcmZQzU|;|M00aO5 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat new file mode 100644 index 0000000000000000000000000000000000000000..53dd38e2daf019473d0b90168bb2db166051c355 GIT binary patch literal 110 zcmZQzU|?c^05&ki?iJ)39~|V&2;?y`u=^Ut2e}6LgLq5~TwbAmo+0rb{=Tjt0cHkn esNx`h{}7M}3j + diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml new file mode 100644 index 00000000..9e390f50 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml @@ -0,0 +1,2 @@ + + diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml new file mode 100644 index 00000000..0b856dc6 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml @@ -0,0 +1,10 @@ + +
+
+ + + + + +
+
diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log new file mode 100644 index 00000000..e69de29b diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml new file mode 100644 index 00000000..e0de5155 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml @@ -0,0 +1,41 @@ + + + + %date [%thread] %-5level %logger{35} - %msg%n + + + + + + ${org.eclipse.m2e.log.dir}/0.log + + ${org.eclipse.m2e.log.dir}/%i.log + 1 + 10 + + + 100MB + + + %date [%thread] %-5level %logger{35} - %msg%n + + + + + + WARN + + + + + + + + + + + + + + + diff --git a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml new file mode 100644 index 00000000..9a98d7e8 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -0,0 +1,11 @@ + +
+
+ + +
+
+ + +
+
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml new file mode 100644 index 00000000..5ca0b776 --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -0,0 +1,3 @@ + +
+
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml new file mode 100644 index 00000000..e08b313a --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml new file mode 100644 index 00000000..f213774b --- /dev/null +++ b/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png new file mode 100644 index 0000000000000000000000000000000000000000..1d364a6301c57140488f01f9ebc02d744417fb4e GIT binary patch literal 4060 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 O0000 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png new file mode 100644 index 0000000000000000000000000000000000000000..8f33b6b47f5eb6233215e56b1cd92b3116c71738 GIT binary patch literal 3892 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 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png new file mode 100644 index 0000000000000000000000000000000000000000..897496a555c115c3f6826dcc8703d999725be298 GIT binary patch literal 3894 zcmV-656SR}P)EX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!Bzpitf?Ii*br$j0ysY8X?grQY?NOgB>}X21g-&G z1NgrKsHy|o+uJ0QN%Hypv5HrZyk0MTeSK%@0XQ5EdU|^Bcsw=VFE1|xaQpV{ivw6% zTB56~i@SI4qA1F#9~X;778e(J_wF6xaQMvjw^%Ha&1M-K9IUAmi^V7wi{}DRl|rhj za_7z+WLd_ttW#N*WyZ$FD3wZhJf2foQ55`sKbB?Hbq2tzSFhOG+WN3P;C8#QZ5!LR znVz1mIaaum4zett$(@~@bq$F|qda=_h@qh&qS5H#{Km!xb8~a&18~&K75U_NQl}9B zvMitKO+`_dn3y0IiyhA8ayb?k7taUasD~@^$?>F))9Gx8Ytj7t{NW}J27{DJC1SA{ zs;VN(GNDk2R4R3~5%>^VUS2-7aqr*1Pc#}OolXPL*Vk7!3T^cwP)j~J0tg{K$oQ?T zEry1MjsfWD>EYqShpeuyGC4U3z{0`;s;X8U!H#+-LdCle9z3WyR(N-Jw_#&TrP48Z zZEcOGPoI*>WNPZo%*-5~NPfSc=g*&4ttllE2{Af4dN?sVJB!QZVsv!0Zo#Q|es6D& zm6a6?!(eJ^>Qr4#(^y|$$1n`~`};4Y3MZ4v>J$ox!z?W=v9Pev&>|fj9SjT%@aD~% zGj(NIrnk5EYFml!?rz4%$FG~YYXFS`Fin&F{r#3RTvb&})1*yRRo2$l=TK5@u&c6M>Y*NxKQ#qIXsa=9@LiQj&%zEnJZ{P>WM&YjdbP5;tTX!UJ@@vlC| z?Ur%2xzP8W=(-DC_oC|orhl2QGAt5_)Lp#R`$!~m=64qcV3`J%WnmZxqiGu0*1vaO zA*ya_6=N#TAAJ*Rx{6`!BZQ44N!XT+VU{sX6U#C&jB?ci6~iyns}}|^IIQsdOcIyN zjU-7}mWi(GsOlbj#rNC_e^xiQj~ah8O|BZ)u~s7YcadjLW-$%v0Dx^#F7KmhDp2N! zAHO9K^fhlQ(S1|lyYIhba9AOq&r!(l@V>Ci$Sr@<8DBF3E!)f)hS74yYnpaY$b=AV zZf>G!TGcVxtQVS6sYE7|K?s2)gdm+xi&jjbP$(q*124U+|MZaSTL1t607*qoM6N<$ Eg6)rWg8%>k literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png new file mode 100644 index 0000000000000000000000000000000000000000..dc1a68ce930096b79932aa690dae19165c19aa47 GIT binary patch literal 4007 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 literal 0 HcmV?d00001 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml new file mode 100644 index 00000000..1727003c --- /dev/null +++ b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml @@ -0,0 +1,145 @@ + + + + + + + + This WindowBuilder toolkit allows you to build user interfaces with the Standard Widget Toolkit (SWT) from Eclipse. + + + + + + + + + + + + + + This WindowBuilder toolkit allows you to build user interfaces with Java's Swing GUI framework. + + + + + + + + + + + + + + This WindowBuilder toolkit allows you to build user interfaces with Eclipse's embedded Rich Client Platform (eRCP) framework. eRCP targets embedded devices. + + + + + + + + + + + + + + This WindowBuilder toolkit allows you to build user interfaces with the XML Windowing Toolkit (XWT) UI framework. + + + + + + + + + + + + + + The Google Plugin for Eclipse provides support for building projects with the Google Web Toolkit and Google APIs, as well as integration with Google Project Hosting and App Engine. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.metadata/version.ini b/.metadata/version.ini new file mode 100644 index 00000000..c51ff745 --- /dev/null +++ b/.metadata/version.ini @@ -0,0 +1 @@ +org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index e243429f..520bf1c2 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -5,8 +5,7 @@ import net.minecraft.src.Block; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraftforge.common.Configuration; -import universalelectricity.BasicComponents; -import universalelectricity.network.PacketManager; +import universalelectricity.prefab.network.PacketManager; import basicpipes.LTanks.ItemTank; import basicpipes.LTanks.TileEntityLTank; import basicpipes.conductors.BlockPipe; @@ -66,14 +65,14 @@ public class BasicPipesMain{ public static int configurationProperties() { config.load(); - pipeID = Integer.parseInt(config.getOrCreateIntProperty("PipeBlock", Configuration.CATEGORY_BLOCK, 155).value); - machineID = Integer.parseInt(config.getOrCreateIntProperty("machineBlock", Configuration.CATEGORY_BLOCK, 156).value); - valveID = Integer.parseInt(config.getOrCreateIntProperty("ValveBlock", Configuration.CATEGORY_BLOCK, 157).value); - rodID = Integer.parseInt(config.getOrCreateIntProperty("gearBlock", Configuration.CATEGORY_BLOCK, 158).value); - partID = Integer.parseInt(config.getOrCreateIntProperty("parts", Configuration.CATEGORY_ITEM, 23022).value); - ppipeID = Integer.parseInt(config.getOrCreateIntProperty("pipes", Configuration.CATEGORY_ITEM, 23023).value); - toolID = Integer.parseInt(config.getOrCreateIntProperty("ToolID", Configuration.CATEGORY_ITEM, 23024).value); - tankID = Integer.parseInt(config.getOrCreateIntProperty("tankID", Configuration.CATEGORY_ITEM, 23025).value); + pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"PipeBlock", 155).value); + machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"machineBlock", 156).value); + valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"ValveBlock", 157).value); + rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"gearBlock", 158).value); + partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"parts", 23022).value); + ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"pipes", 23023).value); + toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"ToolID", 23024).value); + tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"tankID", 23025).value); config.save(); return pipeID; } @@ -152,32 +151,14 @@ public class BasicPipesMain{ GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,3), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); //fuel GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,4), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - - try{ - GameRegistry.addRecipe(new ItemStack(parts, 2,0), new Object[] { "@@@", '@',BasicComponents.itemBronzeIngot});//bronze tube - //steam - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,0),new ItemStack(parts, 1,4)}); - GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',BasicComponents.itemBronzeIngot});//tank - - //pump - GameRegistry.addRecipe(new ItemStack(machine, 1,0), new Object[] { "@T@","BPB","@M@" - , '@',BasicComponents.itemSteelPlate - , 'M',BasicComponents.itemMotor + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4)}); + GameRegistry.addRecipe(new ItemStack(machine, 1,0), new Object[] { "@T@","BPB","@P@" + , '@',new ItemStack(Item.ingotIron,2) , 'B',new ItemStack(parts, 1,7) , 'P',new ItemStack(Block.pistonBase) - , 'C',BasicComponents.blockCopperWire , 'T',new ItemStack(parts, 1,6) }); - this.ueLoaded = true; - } - catch(Exception e) - { - System.out.print("UE based recipes not loaded"); - //secondary boiler tank - - //steam - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4)}); - } + } } diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/src/common/basicpipes/LTanks/TileEntityLTank.java index a19dd139..328dc94f 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -1,26 +1,22 @@ package basicpipes.LTanks; -import com.google.common.io.ByteArrayDataInput; - -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import universalelectricity.prefab.Vector3; -import basicpipes.BasicPipesMain; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IStorageTank; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; +import net.minecraft.src.INetworkManager; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IStorageTank; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +import com.google.common.io.ByteArrayDataInput; public class TileEntityLTank extends TileEntity implements IStorageTank,ILiquidProducer,IPacketReceiver{ public TileEntity[] cc = {null,null,null,null,null,null}; @@ -193,7 +189,7 @@ public int presureOutput(Liquid type, ForgeDirection side) { @Override -public void handlePacketData(NetworkManager network, int packetType, +public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { try diff --git a/src/common/basicpipes/conductors/BlockRod.java b/src/common/basicpipes/conductors/BlockRod.java index ea4eb87a..6c69a42a 100644 --- a/src/common/basicpipes/conductors/BlockRod.java +++ b/src/common/basicpipes/conductors/BlockRod.java @@ -19,7 +19,7 @@ public class BlockRod extends universalelectricity.prefab.BlockMachine { this.setCreativeTab(CreativeTabs.tabRedstone); } @Override - protected int damageDropped(int metadata) + public int damageDropped(int metadata) { return 0; } diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index 61c4ed00..a50d9293 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -1,14 +1,14 @@ package basicpipes.conductors; import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import universalelectricity.prefab.Vector3; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.Liquid; @@ -166,7 +166,7 @@ public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacke //data //-------------------- @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { try diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/src/common/basicpipes/conductors/TileEntityRod.java index ca588e9e..73d7c485 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/src/common/basicpipes/conductors/TileEntityRod.java @@ -1,15 +1,15 @@ package basicpipes.conductors; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.NetworkManager; +import net.minecraft.src.INetworkManager; import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import steampower.SteamPowerMain; -import universalelectricity.network.IPacketReceiver; -import universalelectricity.network.PacketManager; -import universalelectricity.prefab.Vector3; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; import basicpipes.pipes.api.IMechanical; import com.google.common.io.ByteArrayDataInput; @@ -112,7 +112,7 @@ public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechan } @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { try diff --git a/src/common/basicpipes/machines/BlockMachine.java b/src/common/basicpipes/machines/BlockMachine.java index 729a0eb9..d27395e2 100644 --- a/src/common/basicpipes/machines/BlockMachine.java +++ b/src/common/basicpipes/machines/BlockMachine.java @@ -1,7 +1,5 @@ package basicpipes.machines; -import java.util.Random; - import net.minecraft.src.BlockContainer; import net.minecraft.src.CreativeTabs; import net.minecraft.src.Material; @@ -41,7 +39,7 @@ public class BlockMachine extends BlockContainer { return ItemRenderHelper.renderID; } - protected int damageDropped(int meta) + public int damageDropped(int meta) { if(meta < 4) { diff --git a/src/common/basicpipes/machines/BlockValve.java b/src/common/basicpipes/machines/BlockValve.java index d139ba67..9240a9e1 100644 --- a/src/common/basicpipes/machines/BlockValve.java +++ b/src/common/basicpipes/machines/BlockValve.java @@ -1,12 +1,12 @@ package basicpipes.machines; -import java.util.ArrayList; -import net.minecraft.src.*; - import java.util.Random; -import universalelectricity.UniversalElectricity; - +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import basicpipes.BasicPipesMain; public class BlockValve extends universalelectricity.prefab.BlockMachine @@ -148,7 +148,7 @@ public class BlockValve extends universalelectricity.prefab.BlockMachine { return this.blockID; } - protected int damageDropped(int meta) + public int damageDropped(int meta) { if(meta < 8) { diff --git a/src/common/mcpmod.info b/src/common/mcpmod.info new file mode 100644 index 00000000..4a0d4ac4 --- /dev/null +++ b/src/common/mcpmod.info @@ -0,0 +1,17 @@ +[ +{ + "modid": "mcp", + "name": "Minecraft Coder Pack", + "description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.", + "version": "7.19", + "mcversion": "1.4.2", + "logoFile": "/mcp.png", + "url": "http://mcp.ocean-labs.de/", + "updateUrl": "", + "authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"], + "credits": "Made by the MCP team", + "parent": "", + "screenshots": [], + "dependencies": [] +} +] diff --git a/src/common/steampower/BlockMachine.java b/src/common/steampower/BlockMachine.java index 612810a4..06ea2bda 100644 --- a/src/common/steampower/BlockMachine.java +++ b/src/common/steampower/BlockMachine.java @@ -30,7 +30,7 @@ public class BlockMachine extends universalelectricity.prefab.BlockMachine this.setResistance(3f); } @Override - protected int damageDropped(int metadata) + public int damageDropped(int metadata) { return metadata; } diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 8d8edf19..9200d012 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -2,15 +2,16 @@ package steampower; import java.io.File; import net.minecraft.src.Block; +import net.minecraft.src.CraftingManager; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraftforge.common.Configuration; +import net.minecraftforge.oredict.ShapedOreRecipe; import steampower.turbine.BlockGenerator; import steampower.turbine.BlockSteamPiston; import steampower.turbine.ItemEngine; import steampower.turbine.TileEntitytopGen; -import universalelectricity.BasicComponents; -import universalelectricity.network.PacketManager; +import universalelectricity.prefab.network.PacketManager; import basicpipes.BasicPipesMain; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; @@ -52,14 +53,14 @@ public class SteamPowerMain{ public static int configurationProperties() { config.load(); - BlockID = Integer.parseInt(config.getOrCreateIntProperty("MachinesID", Configuration.CATEGORY_BLOCK, 3030).value); - EngineItemID = Integer.parseInt(config.getOrCreateIntProperty("EngineItem", Configuration.CATEGORY_ITEM, 30308).value); - EngineID = Integer.parseInt(config.getOrCreateIntProperty("SteamEngineID", Configuration.CATEGORY_BLOCK, 3031).value); - genID = Integer.parseInt(config.getOrCreateIntProperty("ElecGenID", Configuration.CATEGORY_BLOCK, 3032).value); - genOutput = Integer.parseInt(config.getOrCreateIntProperty("genOutputWattsmax", Configuration.CATEGORY_GENERAL, 1000).value); - steamOutBoiler = Integer.parseInt(config.getOrCreateIntProperty("steamOutPerCycle", Configuration.CATEGORY_GENERAL, 10).value); - boilerHeat = Integer.parseInt(config.getOrCreateIntProperty("boilerInKJNeed", Configuration.CATEGORY_GENERAL, 4500).value); - fireOutput = Integer.parseInt(config.getOrCreateIntProperty("fireBoxOutKJMax", Configuration.CATEGORY_GENERAL,250).value); + BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"MachinesID", 3030).value); + EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"EngineItem", 30308).value); + EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"SteamEngineID", 3031).value); + genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"ElecGenID", 3032).value); + genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"genOutputWattsmax", 1000).value); + steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"steamOutPerCycle", 10).value); + boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"boilerInKJNeed", 4500).value); + fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"fireBoxOutKJMax", 250).value); config.save(); return BlockID; } @@ -93,28 +94,32 @@ public class SteamPowerMain{ proxy.postInit(); //Crafting try{ + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(gen, 1), new Object [] {"@T@", "OVO", "@T@", + 'T',new ItemStack(BasicPipesMain.rod, 1), + '@',"plateSteel", + 'O',"basicCircuit", + 'V',"motor"})); /** TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata 2-5 */ - GameRegistry.addRecipe(new ItemStack(gen, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(BasicPipesMain.rod, 1), - '@',new ItemStack(BasicComponents.itemSteelPlate), - 'O',new ItemStack(BasicComponents.itemCircuit,1,0), - 'V',new ItemStack(BasicComponents.itemMotor)}); - GameRegistry.addRecipe(new ItemStack(machine, 1, 1), new Object [] {"TT", "VV", "TT", + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe( + new ItemStack(machine, 1, 1), new Object [] {"TT", "VV", "TT", 'T',new ItemStack(BasicPipesMain.parts, 1,6), - 'V',new ItemStack(BasicPipesMain.parts, 1,7)}); - GameRegistry.addRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", + 'V',new ItemStack(BasicPipesMain.parts, 1,7)})); + CraftingManager.getInstance().getRecipeList().add( + new ShapedOreRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", 'F',Block.stoneOvenIdle, - '@',new ItemStack(BasicComponents.itemSteelPlate)}); - GameRegistry.addRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"GGG", "VPV", "@T@", + '@',"plateSteel"})); + CraftingManager.getInstance().getRecipeList().add( + new ShapedOreRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"GGG", "VPV", "@T@", 'T',new ItemStack(BasicPipesMain.parts, 1,1), 'G',BasicPipesMain.rod, - '@',new ItemStack(BasicComponents.itemSteelPlate), + '@',"plateSteel", 'P',Block.pistonBase, 'V',new ItemStack(BasicPipesMain.parts, 1,7), - 'M',new ItemStack(BasicComponents.itemMotor)});} + 'M',"motor"})); + } catch(Exception e) { e.printStackTrace(); diff --git a/src/common/steampower/TileEntityMachine.java b/src/common/steampower/TileEntityMachine.java index cd5d9242..59352751 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/src/common/steampower/TileEntityMachine.java @@ -9,9 +9,8 @@ import net.minecraft.src.Packet; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; -import universalelectricity.network.PacketManager; -import universalelectricity.prefab.TileEntityElectricityReceiver; -import universalelectricity.prefab.Vector3; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.PacketManager; public class TileEntityMachine extends TileEntity implements IInventory, ISidedInventory { public int facing = 0; diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/src/common/steampower/boiler/TileEntityBoiler.java index afabf5d7..6639f660 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/src/common/steampower/boiler/TileEntityBoiler.java @@ -1,22 +1,14 @@ package steampower.boiler; -import java.util.Random; - import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; +import net.minecraft.src.INetworkManager; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import steampower.SteamPowerMain; import steampower.TileEntityMachine; -import universalelectricity.network.IPacketReceiver; -import basicpipes.conductors.TileEntityPipe; +import universalelectricity.prefab.network.IPacketReceiver; import basicpipes.pipes.api.IHeatProducer; -import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.IStorageTank; import basicpipes.pipes.api.Liquid; @@ -219,7 +211,7 @@ public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiv return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; } @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try{ diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/src/common/steampower/burner/TileEntityFireBox.java index 21c299ae..3d0777ac 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/src/common/steampower/burner/TileEntityFireBox.java @@ -2,10 +2,10 @@ package steampower.burner; import net.minecraft.src.EntityPlayer; import net.minecraft.src.IInventory; +import net.minecraft.src.INetworkManager; import net.minecraft.src.Item; import net.minecraft.src.ItemStack; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -13,7 +13,7 @@ import net.minecraftforge.common.ISidedInventory; import steampower.SteamPowerMain; import steampower.TileEntityMachine; import steampower.boiler.TileEntityBoiler; -import universalelectricity.network.IPacketReceiver; +import universalelectricity.prefab.network.IPacketReceiver; import basicpipes.pipes.api.IHeatProducer; import basicpipes.pipes.api.MHelper; @@ -195,7 +195,7 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 7dac120e..8af348f2 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -30,42 +30,87 @@ public class ItemEngine extends Item // TODO Auto-generated method stub return SteamPowerMain.textureFile+"Items.png"; } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, World world, int x, int y, int z, int par7, float par8, float par9, float par10) + + public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, + World world, int x, int y, int z, int par7, float par8, float par9, float par10) { - if (world.isRemote) + int var11 = world.getBlockId(x, y, z); + int BlockID = SteamPowerMain.EngineID; + + if (var11 == Block.snow.blockID) + { + par7 = 1; + } + else if (var11 != Block.vine.blockID && var11 != Block.tallGrass.blockID && var11 != Block.deadBush.blockID + && (Block.blocksList[var11] == null || !Block.blocksList[var11].isBlockReplaceable(world, x, y, z))) + { + if (par7 == 0) + { + --y; + } + + if (par7 == 1) + { + ++y; + } + + if (par7 == 2) + { + --z; + } + + if (par7 == 3) + { + ++z; + } + + if (par7 == 4) + { + --x; + } + + if (par7 == 5) + { + ++x; + } + } + + if (itemStack.stackSize == 0) + { + return false; + } + else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) + { + return false; + } + else if (y == 255 && Block.blocksList[BlockID].blockMaterial.isSolid()) + { + return false; + } + else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, ePlayer)) + { + Block var12 = Block.blocksList[BlockID]; + int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + switch (angle) + { + case 0: world.setBlockAndMetadata(x, y, z, var12.blockID, 0); break; + case 1: world.setBlockAndMetadata(x, y, z, var12.blockID, 1); break; + case 2: world.setBlockAndMetadata(x, y, z, var12.blockID, 2); break; + case 3: world.setBlockAndMetadata(x, y, z, var12.blockID, 3); break; + } + int meta = world.getBlockMetadata(x, y, z); + //ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.setBlockAndMetadataWithNotify(x, y+1, z, var12.blockID, 14); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.editingBlocks = false; + --itemStack.stackSize; + + return true; + } + else { return false; } - - Block var11 = SteamPowerMain.engine; - int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - - if (ePlayer.canPlayerEdit(x, y, z)) - { - ++y; - if (var11.canPlaceBlockAt(world, x, y, z)) - { - world.editingBlocks = true; - - switch (angle) - { - case 0: world.setBlockAndMetadata(x, y, z, var11.blockID, 0); break; - case 1: world.setBlockAndMetadata(x, y, z, var11.blockID, 1); break; - case 2: world.setBlockAndMetadata(x, y, z, var11.blockID, 2); break; - case 3: world.setBlockAndMetadata(x, y, z, var11.blockID, 3); break; - } - int meta = world.getBlockMetadata(x, y, z); - //ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); - world.notifyBlocksOfNeighborChange(x, y, z, var11.blockID); - world.setBlockAndMetadataWithNotify(x, y+1, z, var11.blockID, 14); - world.notifyBlocksOfNeighborChange(x, y, z, var11.blockID); - world.editingBlocks = false; - --itemStack.stackSize; - return true; - } - } - - return false; } } diff --git a/src/common/steampower/turbine/TileEntityGen.java b/src/common/steampower/turbine/TileEntityGen.java index e4565030..96dad40b 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/src/common/steampower/turbine/TileEntityGen.java @@ -1,7 +1,7 @@ package steampower.turbine; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.NetworkManager; +import net.minecraft.src.INetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; @@ -9,8 +9,7 @@ import steampower.TileEntityMachine; import universalelectricity.electricity.ElectricityManager; import universalelectricity.implement.IConductor; import universalelectricity.implement.IElectricityProducer; -import universalelectricity.network.IPacketReceiver; - +import universalelectricity.prefab.network.IPacketReceiver; import basicpipes.pipes.api.IMechanical; import com.google.common.io.ByteArrayDataInput; @@ -71,7 +70,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, if (tileEntity instanceof IConductor) { - if (ElectricityManager.instance.getElectricityRequired( ((IConductor)tileEntity).getConnectionID()) > 0) + if (ElectricityManager.instance.getElectricityRequired(((IConductor)tileEntity).getNetwork()) > 0) { this.wires[i] = (IConductor)tileEntity; wireCount++; @@ -99,7 +98,7 @@ public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, super.updateEntity(); } @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { // TODO Auto-generated method stub diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index f77868a4..79f2be34 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -1,24 +1,17 @@ package steampower.turbine; import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; +import net.minecraft.src.INetworkManager; import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.NetworkManager; import net.minecraft.src.Packet250CustomPayload; import net.minecraft.src.TileEntity; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; import steampower.TileEntityMachine; -import universalelectricity.network.IPacketReceiver; -import basicpipes.conductors.TileEntityRod; +import universalelectricity.prefab.network.IPacketReceiver; import basicpipes.pipes.api.ILiquidConsumer; import basicpipes.pipes.api.ILiquidProducer; import basicpipes.pipes.api.IMechanical; import basicpipes.pipes.api.Liquid; -import basicpipes.conductors.*; import com.google.common.io.ByteArrayDataInput; @@ -276,7 +269,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR return false; } @Override - public void handlePacketData(NetworkManager network, int packetType, + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) { try diff --git a/src/minecraft/basicpipes/ModelLargePipe.java b/src/minecraft/basicpipes/ModelLargePipe.java index c8939584..212b10db 100644 --- a/src/minecraft/basicpipes/ModelLargePipe.java +++ b/src/minecraft/basicpipes/ModelLargePipe.java @@ -165,25 +165,7 @@ public class ModelLargePipe extends ModelBase public void renderRight() { RightPipe.render(0.0625F);RightConnect.render(0.0625F); RightInter.render(0.0625F);} public void renderBack() { BackPipe.render(0.0625F); BackConnect.render(0.0625F);BackInter.render(0.0625F); } public void renderFront() { FrontPipe.render(0.0625F);FrontConnect.render(0.0625F);FrontInter.render(0.0625F);} - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); - - - - - - - - - - - - - - - } + private void setRotation(ModelRenderer model, float x, float y, float z) { @@ -191,10 +173,5 @@ public class ModelLargePipe extends ModelBase model.rotateAngleY = y; model.rotateAngleZ = z; } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } } diff --git a/src/minecraft/basicpipes/ModelPipe.java b/src/minecraft/basicpipes/ModelPipe.java index e1a21d36..b6122956 100644 --- a/src/minecraft/basicpipes/ModelPipe.java +++ b/src/minecraft/basicpipes/ModelPipe.java @@ -65,7 +65,7 @@ public class ModelPipe extends ModelBase public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.renderMiddle(); this.renderBottom(); this.renderTop(); @@ -89,10 +89,5 @@ public class ModelPipe extends ModelBase model.rotateAngleY = y; model.rotateAngleZ = z; } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } } diff --git a/src/minecraft/basicpipes/ModelPump.java b/src/minecraft/basicpipes/ModelPump.java index 4be9d07a..88cb2af9 100644 --- a/src/minecraft/basicpipes/ModelPump.java +++ b/src/minecraft/basicpipes/ModelPump.java @@ -106,7 +106,7 @@ public class ModelPump extends ModelBase public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); } public void renderMain(float f5) { @@ -137,10 +137,4 @@ public class ModelPump extends ModelBase model.rotateAngleY = y; model.rotateAngleZ = z; } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } - } diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java b/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java index 8375b443..e4d217c2 100644 --- a/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java +++ b/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java @@ -418,10 +418,5 @@ public class ModelLiquidTank extends ModelBase model.rotateAngleY = y; model.rotateAngleZ = z; } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } } diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java b/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java index 199fc650..b666d216 100644 --- a/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java +++ b/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java @@ -129,10 +129,5 @@ public class ModelLiquidTankCorner extends ModelBase model.rotateAngleY = y; model.rotateAngleZ = z; } - - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) - { - super.setRotationAngles(f, f1, f2, f3, f4, f5); - } } diff --git a/src/minecraft/mcp.png b/src/minecraft/mcp.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebae880d0244f25a76a984a55729e4c0c9c3cf1 GIT binary patch literal 6940 zcmV+%8{_1OP)N2bPDNB8 zb~7$DE;u(kfL#Cp8ktE%K~#8N?VU}MB*hVhduD_{BQs$bCbSqsW}1bTy2313VXQHh z?AdStZUCp?oUM6P^Yy%ZxJP7G6+^cai?Z&_it_OApBMfUS#|f%zkhoF#iuV%uYbS# z{Pfa2e{r9`|M}NH?)72}_g}qwb+1>BXIwYWnt#cE+27OmzdL}z!J%{R8K@)(&8~g! zHUE2XUh=QOb=lu}v+p+bnZM=xxAwmUChwxG1!fD(W)buPvoV<6xqvclNhJI7i_h-$ z%5j+TVqLKuKCX`_^!6JcSFeRhtdD?It!YyS5Ix+VW}A$Zx}xN!T}{BMEDyXTS?m@P2N zM!^EJV_W z+fGKl`Of4#n=fVb)Hl=9p|uR}_$q;1T$jsNPJtkQ{PD*Vpg5>xHGVdK8oI8f?C-z- z{zTX5rGfF;ufP8Kfd?P&3g>_LJ-UAHf>nIzUh=EYbUb(K_WS%VSyWxPYHT-OcfSh% zHD4vWBRuE1B3(OOKmvUqSxefr^VB$N645I=QH#p~mvA%;l&)Q8f1R02Uz6MM>KAbMf@Az;7 z_O)=IC{Wj37vczwN{8A#XJCTt(&>G7@AyckmwY-t_N)aR&cLLKLiAa;gHDGPn9OwO zvdQ&vjXgXDFcE<0CA;GPH*fCB!Z?0%D!`_(a8daMezg zJGVzAiZ+sN#|PjeUPn$00Qye9XZ=oBavJfG5ng48ZtQ8)6>Z73iX4y9&fQ<1uhuWU zc5AF?bbPq|X$>Q~N7mwWpTDDQVIm55$%3f|Ek1A8R#QuE!fYYqNthoUW z{S|od^6T_d=-vcOBt-3C9`@>*h(v;xLM8mp=-nB8(WxNO)eCTdCZF&40CaqQAIpv= z1Cv2Jua_vZ;sYK=U;-bkGi6FWBJX!{?bcZF*U389uer3ABQ!cb5==x_o5ZEGk(=Zs zn-H(EJ?y1h;}JPYf7plUV&_L_bbS0#VB#Q>z(I5Zu(V)O749+u=^_Tk0Vb|U-{B?f z=g*%#C}7rw@%by-awJj_(bbD+z@3l+7c~$E9-=A6dok<`erJ9?5ABe>IxpjNp)DsN zI&&FxYs~weHek5WMh5Pj)fzpF&$at}fST@gwT&bEtdToU^0NXPv)JHwh-x zwnnsFCgN{ITlCp*0F;V0^6+)LJbW!gCQethD;m;y#~*X~oWCcSbkPS92Xdhz^}*E&M_VVN3)Dv8nZhx#}Nc-LT#g|@LV{zK(!|9G_!|%r*z1T$3 z%=Pl+%aaXY|GrM<(0ZM>s@sFU8TZ#u{(SPmOZ>00Ki{OGnW>5cNag=TC+_RIr}gWz ze*d8Wdo7r_BX~68pyE5cM-?#S&gWsc-*?(52xVq#IwK^nudv>3&T2gxt2r+L6JL*Z zFHfCVeyfm?|GKeY#Cjj2!l`g9z4yy6 zzdRgt%3L{V6Pd`_^h!|5IW=F7JvwI=PrXo%p>}q?psRIw1mQe6P0gjT)J)takfF;!W4-vv82-u* zNlD;AOEQ*=9wCl55u7M%^DAo-ki)uG+)c zh4T#E>@2xH8LzR}U)L=4gek%_Fy9Yrx#DN z=8@I%N-nJ53&4D?;sx;XG@#Q*&hG}&@#2NPj_yeRT8Gnic_m2U^dnwaCu7;o0ev

_~`&Fa@&~$bKKN-Eu);~OF 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 i Date: Fri, 2 Nov 2012 14:04:10 -0400 Subject: [PATCH 104/115] Cleanup Removed Steam piston gui since it had no use, if you need Force output use the pipe guage. Also fixed a bug where pipes would output 2 per update from every produce whether or not there it could actual produce anything. --- .metadata/.lock | 0 .metadata/.mylyn/.taskListIndex/segments.gen | Bin 20 -> 0 bytes .metadata/.mylyn/.taskListIndex/segments_1 | Bin 32 -> 0 bytes .metadata/.mylyn/repositories.xml.zip | Bin 442 -> 0 bytes .metadata/.mylyn/tasks.xml.zip | Bin 250 -> 0 bytes .../.root/.indexes/history.version | 1 - .../.root/.indexes/properties.index | Bin 57 -> 0 bytes .../.root/.indexes/properties.version | 1 - .../org.eclipse.core.resources/.root/1.tree | Bin 124 -> 0 bytes .../.safetable/org.eclipse.core.resources | Bin 364 -> 0 bytes .../.settings/jd.ide.eclipse.prefs | 2 - .../org.eclipse.core.resources.prefs | 2 - .../org.eclipse.epp.usagedata.recording.prefs | 2 - .../.settings/org.eclipse.jdt.ui.prefs | 13 - .../.settings/org.eclipse.m2e.discovery.prefs | 2 - .../org.eclipse.mylyn.context.core.prefs | 2 - .../org.eclipse.mylyn.monitor.ui.prefs | 2 - .../.settings/org.eclipse.team.cvs.ui.prefs | 2 - .../.settings/org.eclipse.team.ui.prefs | 2 - .../.settings/org.eclipse.ui.ide.prefs | 5 - .../.settings/org.eclipse.ui.prefs | 2 - .../.settings/org.eclipse.ui.workbench.prefs | 5 - .../usagedata.csv | 119 -------- .../org.eclipse.jdt.core/invalidArchivesCache | Bin 4 -> 0 bytes .../org.eclipse.jdt.core/nonChainingJarsCache | Bin 4 -> 0 bytes .../variablesAndContainers.dat | Bin 110 -> 0 bytes .../org.eclipse.jdt.ui/OpenTypeHistory.xml | 2 - .../QualifiedTypeNameHistory.xml | 2 - .../org.eclipse.jdt.ui/dialog_settings.xml | 10 - .../0.log | 0 .../logback.1.0.200.20111228-1245.xml | 41 --- .../org.eclipse.ui.ide/dialog_settings.xml | 11 - .../dialog_settings.xml | 3 - .../org.eclipse.ui.workbench/workbench.xml | 245 ---------------- .../org.eclipse.ui.workbench/workingsets.xml | 4 - .../toolkit_ercp.png | Bin 4060 -> 0 bytes .../toolkit_gwt.png | Bin 3892 -> 0 bytes .../toolkit_swing.png | Bin 3675 -> 0 bytes .../toolkit_swt.png | Bin 3894 -> 0 bytes .../toolkit_xwt.png | Bin 4007 -> 0 bytes .../toolkits.xml | 145 ---------- .metadata/version.ini | 1 - src/common/basicpipes/BasicPipesMain.java | 253 ++++++++++------- .../basicpipes/conductors/ItemGuage.java | 1 + .../basicpipes/conductors/TileEntityPipe.java | 267 +++++++++--------- .../basicpipes/machines/TileEntityPump.java | 7 +- src/common/steampower/SteamPowerMain.java | 189 +++++++------ .../steampower/turbine/BlockGenerator.java | 91 +++--- .../steampower/turbine/BlockSteamPiston.java | 217 ++++++-------- src/common/steampower/turbine/ItemEngine.java | 174 ++++++------ 50 files changed, 621 insertions(+), 1204 deletions(-) delete mode 100644 .metadata/.lock delete mode 100644 .metadata/.mylyn/.taskListIndex/segments.gen delete mode 100644 .metadata/.mylyn/.taskListIndex/segments_1 delete mode 100644 .metadata/.mylyn/repositories.xml.zip delete mode 100644 .metadata/.mylyn/tasks.xml.zip delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.root/1.tree delete mode 100644 .metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs delete mode 100644 .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs delete mode 100644 .metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache delete mode 100644 .metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml delete mode 100644 .metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log delete mode 100644 .metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/workbench.xml delete mode 100644 .metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swing.png delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png delete mode 100644 .metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml delete mode 100644 .metadata/version.ini diff --git a/.metadata/.lock b/.metadata/.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/.metadata/.mylyn/.taskListIndex/segments.gen b/.metadata/.mylyn/.taskListIndex/segments.gen deleted file mode 100644 index 63a7ec9a3ce3e4c844ffb7c8dd88e6eb3ff32ef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20 QcmezW|NlP*2w;TK07=6G{r~^~ diff --git a/.metadata/.mylyn/.taskListIndex/segments_1 b/.metadata/.mylyn/.taskListIndex/segments_1 deleted file mode 100644 index 5cefa8859c47b027a4acf915ddd0455e95070aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32 acmezW|NnOe21cuu>7So4paHHZuH68^HV8lf diff --git a/.metadata/.mylyn/repositories.xml.zip b/.metadata/.mylyn/repositories.xml.zip deleted file mode 100644 index d84442417efcd5124149b7780ceadfe85a5d4f94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmWIWW@Zs#;Nak3STiBUkpT$^0NF*U1^LC9CHX~}sl|E~xjAn`e7%_s1^#L)mT&G- zQ1b0&x9#i-J2=^=eEIDQH&s$5ZMz+xpS6EUXvWu9xieDY?(O;RvD`e{!^dDlVc2Qo zQZ3e7mqL$Si`w@k-(N3v{q2{`{qrwan_XmW){zVPqPZ{c*^_f~!+LtxZjo71mDl0W zCE{^9uxH--E~V{}iJr%dwZvbYZ@cr!B3%5pjf)BIxw)>o>!o>?wLFqr{ytx?XXyzA z=>yA_URyQe=Y)qV4v9ZH#crM*nzW{XqjS+TLlv8vd5KN^2W(0gT9uV;v|VEHOZY@l z<9h)Pwi%}TZl0>L(29}}NL!&OAb(IT=`p9$I?E|L*KPhA^-g)s`74)lW;nEbn6sxm zG1vK{bI*yX4y$?AzRFGeKl#(?C3keE+ML*YRCv#a10tM})e_1n?sGR z7zYG-ob^8EfAWm?_E0X~!pmC&f;99z&v<*DIeFfDYv`%d;hVN^=JeD#_wA&PULZ&F zOB1G7EgjbC)0QlIE*`2?!BF~?VQb4XRp%C?)j`2iME(dB8?tFG|--P0q(jX;3k{Kkz002QT7dQX_ diff --git a/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources deleted file mode 100644 index 03c85b57de306eeac17d333a881f6c2e6d8d1dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmZ?R*xjhShe1S2b=vdAllRFf=Oz}Hq!uZZBqrsg@^UE$m*y$>CzmJ~StuA!l{=WEK>s>Sd*r=q2YDrP>-A zn;M#!8Cn{d8W>sda_Q@p6r}=1dASZm{QeBKJMeQ)_3rXx4s>@*a!zVukqgKZ*qxr1 fm{SZ41suw9D|0II^hy$ovy1ggGi{-Yar+MdGA4Xu diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs deleted file mode 100644 index 5f8e5901..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/jd.ide.eclipse.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -jd.ide.eclipse.prefs.Setup=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index dffc6b51..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -version=1 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs deleted file mode 100644 index 32cbabee..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.usagedata.recording.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.epp.usagedata.recording.last-upload=1351461895073 diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index c8fd235a..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,13 +0,0 @@ -content_assist_proposals_background=255,255,255 -content_assist_proposals_foreground=0,0,0 -eclipse.preferences.version=1 -fontPropagated=true -org.eclipse.jdt.ui.editor.tab.width= -org.eclipse.jdt.ui.formatterprofiles.version=12 -org.eclipse.jdt.ui.javadoclocations.migrated=true -org.eclipse.jface.textfont=1|Consolas|10.0|0|WINDOWS|1|0|0|0|0|0|0|0|0|1|0|0|0|0|Consolas; -proposalOrderMigrated=true -spelling_locale_initialized=true -tabWidthPropagated=true -useAnnotationsPrefPage=true -useQuickDiffPrefPage=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs deleted file mode 100644 index 67b1d96c..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.m2e.discovery.pref.projects= diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs deleted file mode 100644 index 43e97e40..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -mylyn.attention.migrated=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs deleted file mode 100644 index 8d462a6c..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs deleted file mode 100644 index f9e585ba..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.cvs.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -pref_first_startup=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs deleted file mode 100644 index 56cd496f..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.team.ui.first_time=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs deleted file mode 100644 index 05c0b05a..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs +++ /dev/null @@ -1,5 +0,0 @@ -PROBLEMS_FILTERS_MIGRATE=true -eclipse.preferences.version=1 -platformState=1341384697020 -quickStart=false -tipsAndTricks=true diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs deleted file mode 100644 index 08076f23..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -showIntro=false diff --git a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs deleted file mode 100644 index 4676c7fd..00000000 --- a/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs +++ /dev/null @@ -1,5 +0,0 @@ -ENABLED_DECORATORS=org.eclipse.m2e.core.mavenVersionDecorator\:false,org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator\:true,org.eclipse.jdt.ui.override.decorator\:true,org.eclipse.jdt.ui.interface.decorator\:false,org.eclipse.jdt.ui.buildpath.decorator\:true,org.eclipse.m2e.core.maven2decorator\:true,org.eclipse.mylyn.context.ui.decorator.interest\:true,org.eclipse.mylyn.tasks.ui.decorators.task\:true,org.eclipse.mylyn.team.ui.changeset.decorator\:true,org.eclipse.team.cvs.ui.decorator\:true,org.eclipse.ui.LinkedResourceDecorator\:true,org.eclipse.ui.VirtualResourceDecorator\:true,org.eclipse.ui.ContentTypeDecorator\:true,org.eclipse.ui.ResourceFilterDecorator\:false, -PLUGINS_NOT_ACTIVATED_ON_STARTUP=org.eclipse.m2e.discovery; -eclipse.preferences.version=1 -editors=\r\n\r\n\r\n\r\n\r\n\r\n\r\n -resourcetypes=\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n diff --git a/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv b/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv deleted file mode 100644 index e5b7a6bb..00000000 --- a/.metadata/.plugins/org.eclipse.epp.usagedata.recording/usagedata.csv +++ /dev/null @@ -1,119 +0,0 @@ -what,kind,bundleId,bundleVersion,description,time -activated,perspective,org.eclipse.jdt.ui,,"org.eclipse.jdt.ui.JavaPerspective",1351461893792 -started,bundle,org.eclipse.osgi,3.7.2.v20120110-1415,"org.eclipse.osgi",1351461893793 -started,bundle,org.eclipse.core.contenttype,3.4.100.v20110423-0524,"org.eclipse.core.contenttype",1351461893794 -started,bundle,org.eclipse.core.databinding.observable,1.4.0.I20110222-0800,"org.eclipse.core.databinding.observable",1351461893795 -started,bundle,org.eclipse.core.expressions,3.4.300.v20110228,"org.eclipse.core.expressions",1351461893795 -started,bundle,org.eclipse.core.net,1.2.100.I20110511-0800,"org.eclipse.core.net",1351461893796 -started,bundle,org.eclipse.core.runtime,3.7.0.v20110110,"org.eclipse.core.runtime",1351461893797 -started,bundle,org.eclipse.core.runtime.compatibility,3.2.100.v20100505,"org.eclipse.core.runtime.compatibility",1351461893797 -started,bundle,org.eclipse.core.runtime.compatibility.auth,3.2.200.v20110110,"org.eclipse.core.runtime.compatibility.auth",1351461893798 -started,bundle,org.eclipse.epp.usagedata.gathering,1.3.1.R201106061540,"org.eclipse.epp.usagedata.gathering",1351461893798 -started,bundle,org.eclipse.epp.usagedata.recording,1.3.1.R201106061540,"org.eclipse.epp.usagedata.recording",1351461893799 -started,bundle,org.eclipse.equinox.app,1.3.100.v20110321,"org.eclipse.equinox.app",1351461893799 -started,bundle,org.eclipse.equinox.common,3.6.0.v20110523,"org.eclipse.equinox.common",1351461893800 -started,bundle,org.eclipse.equinox.event,1.2.100.v20110502,"org.eclipse.equinox.event",1351461893800 -started,bundle,org.eclipse.equinox.util,1.0.300.v20110502,"org.eclipse.equinox.util",1351461893801 -started,bundle,org.eclipse.help,3.5.100.v20110426,"org.eclipse.help",1351461893813 -started,bundle,org.eclipse.team.core,3.6.0.I20110525-0800,"org.eclipse.team.core",1351461893814 -started,bundle,org.eclipse.ui.intro,3.4.100.v20110425,"org.eclipse.ui.intro",1351461893815 -started,bundle,org.eclipse.ui.intro.universal,3.2.500.v20110510,"org.eclipse.ui.intro.universal",1351461893815 -started,bundle,org.eclipse.update.configurator,3.3.100.v20100512,"org.eclipse.update.configurator",1351461893816 -started,bundle,org.eclipse.update.core,3.2.500.v20110330,"org.eclipse.update.core",1351461893854 -started,bundle,org.eclipse.update.scheduler,3.2.300.v20100512,"org.eclipse.update.scheduler",1351461893855 -started,bundle,jd.ide.eclipse,0.1.3,"jd.ide.eclipse",1351461893856 -started,bundle,org.eclipse.equinox.simpleconfigurator,1.0.200.v20110815-1438,"org.eclipse.equinox.simpleconfigurator",1351461893857 -started,bundle,com.ibm.icu,4.4.2.v20110823,"com.ibm.icu",1351461893857 -started,bundle,org.eclipse.core.filebuffers,3.5.200.v20110928-1504,"org.eclipse.core.filebuffers",1351461893858 -started,bundle,org.eclipse.core.jobs,3.5.101.v20120113-1953,"org.eclipse.core.jobs",1351461893859 -started,bundle,org.eclipse.core.resources,3.7.101.v20120125-1505,"org.eclipse.core.resources",1351461893860 -started,bundle,org.eclipse.epp.mpc.ui,1.1.1.I20110907-0947,"org.eclipse.epp.mpc.ui",1351461893860 -started,bundle,org.eclipse.equinox.ds,1.3.1.R37x_v20110701,"org.eclipse.equinox.ds",1351461893861 -started,bundle,org.eclipse.equinox.p2.core,2.1.1.v20120113-1346,"org.eclipse.equinox.p2.core",1351461893862 -started,bundle,org.eclipse.equinox.p2.directorywatcher,1.0.300.v20110815-1419,"org.eclipse.equinox.p2.directorywatcher",1351461893862 -started,bundle,org.eclipse.equinox.p2.operations,2.1.1.R37x_v20111111,"org.eclipse.equinox.p2.operations",1351461893863 -started,bundle,org.eclipse.equinox.p2.reconciler.dropins,1.1.100.v20110815-1419,"org.eclipse.equinox.p2.reconciler.dropins",1351461893864 -started,bundle,org.eclipse.equinox.preferences,3.4.2.v20120111-2020,"org.eclipse.equinox.preferences",1351461893865 -started,bundle,org.eclipse.equinox.registry,3.5.101.R37x_v20110810-1611,"org.eclipse.equinox.registry",1351461893865 -started,bundle,org.eclipse.equinox.security,1.1.1.R37x_v20110822-1018,"org.eclipse.equinox.security",1351461893882 -started,bundle,org.eclipse.jdt.core,3.7.3.v20120119-1537,"org.eclipse.jdt.core",1351461893883 -started,bundle,org.eclipse.jdt.core.manipulation,1.4.0.v20110928-1453,"org.eclipse.jdt.core.manipulation",1351461893883 -started,bundle,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui",1351461893888 -started,bundle,org.eclipse.jface,3.7.0.v20110928-1505,"org.eclipse.jface",1351461893889 -started,bundle,org.eclipse.m2e.logback.configuration,1.0.200.20111228-1245,"org.eclipse.m2e.logback.configuration",1351461893889 -started,bundle,org.eclipse.mylyn.bugzilla.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.bugzilla.core",1351461893901 -started,bundle,org.eclipse.mylyn.bugzilla.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.bugzilla.ui",1351461893902 -started,bundle,org.eclipse.mylyn.commons.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.core",1351461893902 -started,bundle,org.eclipse.mylyn.commons.net,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.net",1351461893902 -started,bundle,org.eclipse.mylyn.commons.notifications.core,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.core",1351461893902 -started,bundle,org.eclipse.mylyn.commons.notifications.feed,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.feed",1351461893903 -started,bundle,org.eclipse.mylyn.commons.notifications.ui,0.9.1.v20120425-0100,"org.eclipse.mylyn.commons.notifications.ui",1351461893903 -started,bundle,org.eclipse.mylyn.commons.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.ui",1351461893904 -started,bundle,org.eclipse.mylyn.commons.workbench,3.7.1.v20120425-0100,"org.eclipse.mylyn.commons.workbench",1351461893904 -started,bundle,org.eclipse.mylyn.context.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.context.core",1351461893904 -started,bundle,org.eclipse.mylyn.context.tasks.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.context.tasks.ui",1351461893905 -started,bundle,org.eclipse.mylyn.monitor.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.monitor.ui",1351461893905 -started,bundle,org.eclipse.mylyn.tasks.index.core,3.7.1.v20120425-0100,"org.eclipse.mylyn.tasks.index.core",1351461893906 -started,bundle,org.eclipse.mylyn.tasks.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.tasks.ui",1351461893907 -started,bundle,org.eclipse.search,3.7.0.v20110928-1504,"org.eclipse.search",1351461893927 -started,bundle,org.eclipse.ui,3.7.0.v20110928-1505,"org.eclipse.ui",1351461893943 -started,bundle,org.eclipse.ui.editors,3.7.0.v20110928-1504,"org.eclipse.ui.editors",1351461893944 -started,bundle,org.eclipse.ui.forms,3.5.101.v20111011-1919,"org.eclipse.ui.forms",1351461893944 -started,bundle,org.eclipse.ui.ide,3.7.0.v20110928-1505,"org.eclipse.ui.ide",1351461893945 -started,bundle,org.eclipse.ui.net,1.2.100.v20111208-1155,"org.eclipse.ui.net",1351461893946 -started,bundle,org.eclipse.ui.views,3.6.0.v20110928-1505,"org.eclipse.ui.views",1351461893946 -started,bundle,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"org.eclipse.ui.workbench",1351461893947 -started,bundle,org.eclipse.ui.workbench.texteditor,3.7.0.v20110928-1504,"org.eclipse.ui.workbench.texteditor",1351461893965 -os,sysinfo,,,"win32",1351461893968 -arch,sysinfo,,,"x86",1351461893968 -ws,sysinfo,,,"win32",1351461893968 -locale,sysinfo,,,"en_US",1351461893968 -processors,sysinfo,,,"4",1351461893968 -java.runtime.name,sysinfo,,,"Java(TM) SE Runtime Environment",1351461893968 -java.runtime.version,sysinfo,,,"1.7.0_07-b10",1351461893969 -java.specification.name,sysinfo,,,"Java Platform API Specification",1351461893969 -java.specification.vendor,sysinfo,,,"Oracle Corporation",1351461893969 -java.specification.version,sysinfo,,,"1.7",1351461893969 -java.vendor,sysinfo,,,"Oracle Corporation",1351461893969 -java.version,sysinfo,,,"1.7.0_07",1351461893969 -java.vm.info,sysinfo,,,"mixed mode, sharing",1351461893969 -java.vm.name,sysinfo,,,"Java HotSpot(TM) Client VM",1351461893969 -java.vm.specification.name,sysinfo,,,"Java Virtual Machine Specification",1351461893969 -java.vm.specification.vendor,sysinfo,,,"Oracle Corporation",1351461893969 -java.vm.specification.version,sysinfo,,,"1.7",1351461893969 -java.vm.vendor,sysinfo,,,"Oracle Corporation",1351461893969 -java.vm.version,sysinfo,,,"23.3-b01",1351461893969 -started,bundle,org.eclipse.equinox.p2.repository,2.1.1.v20120113-1346,"org.eclipse.equinox.p2.repository",1351461893994 -started,bundle,org.eclipse.m2e.usagedata,1.0.200.20111228-1245,"org.eclipse.m2e.usagedata",1351461893996 -started,bundle,org.eclipse.equinox.p2.metadata.repository,1.2.0.v20110815-1419,"org.eclipse.equinox.p2.metadata.repository",1351461894009 -started,bundle,org.eclipse.equinox.p2.ui.sdk.scheduler,1.0.100.v20110815-1419,"org.eclipse.equinox.p2.ui.sdk.scheduler",1351461894041 -started,bundle,org.eclipse.equinox.p2.updatechecker,1.1.200.v20110815-1419,"org.eclipse.equinox.p2.updatechecker",1351461894059 -started,bundle,org.eclipse.m2e.discovery,1.0.200.20111228-1245,"org.eclipse.m2e.discovery",1351461894081 -started,bundle,org.eclipse.mylyn.team.ui,3.7.1.v20120425-0100,"org.eclipse.mylyn.team.ui",1351461894094 -started,bundle,org.eclipse.wb.discovery.core,1.3.0.r37x201202052340,"org.eclipse.wb.discovery.core",1351461894163 -started,bundle,org.eclipse.jsch.core,1.1.300.I20110514-0800,"org.eclipse.jsch.core",1351461894266 -started,bundle,org.eclipse.team.cvs.core,3.3.400.I20110510-0800,"org.eclipse.team.cvs.core",1351461894280 -started,bundle,org.eclipse.team.ui,3.6.101.R37x_v20111109-0800,"org.eclipse.team.ui",1351461894298 -started,bundle,org.eclipse.ui.console,3.5.100.v20111007_r372,"org.eclipse.ui.console",1351461894313 -started,bundle,org.eclipse.team.cvs.ui,3.3.401.v20120126-1227,"org.eclipse.team.cvs.ui",1351461894437 -activated,view,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui.PackageExplorer",1351461894607 -activated,view,org.eclipse.jdt.ui,3.7.2.v20120109-1427,"org.eclipse.jdt.ui.PackageExplorer",1351461894647 -closed,view,org.eclipse.ui,3.7.0.v20110928-1505,"org.eclipse.ui.internal.introview",1351461894690 -started,bundle,org.eclipse.wb.discovery.ui,1.3.0.r37x201202052340,"org.eclipse.wb.discovery.ui",1351461895209 -deactivated,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461904591 -activated,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461924702 -closed,workbench,org.eclipse.ui.workbench,3.7.1.v20120104-1859,"",1351461924783 -started,bundle,org.eclipse.core.filesystem,1.3.100.v20110423-0524,"org.eclipse.core.filesystem",1351461925042 -started,bundle,org.eclipse.compare.core,3.5.200.I20110208-0800,"org.eclipse.compare.core",1351461925263 -started,bundle,org.eclipse.compare,3.5.202.R37x_v20111109-0800,"org.eclipse.compare",1351461925294 -stopped,bundle,org.eclipse.ui.cheatsheets,3.4.100.v20110425,"org.eclipse.ui.cheatsheets",1351461925606 -stopped,bundle,org.eclipse.epp.usagedata.ui,1.3.1.R201106061540,"org.eclipse.epp.usagedata.ui",1351461925607 -stopped,bundle,org.eclipse.epp.mpc.ui,1.1.1.I20110907-0947,"org.eclipse.epp.mpc.ui",1351461925607 -stopped,bundle,org.eclipse.ui.intro.universal,3.2.500.v20110510,"org.eclipse.ui.intro.universal",1351461925607 -stopped,bundle,org.eclipse.ui.intro,3.4.100.v20110425,"org.eclipse.ui.intro",1351461925607 -stopped,bundle,jd.ide.eclipse,0.1.3,"jd.ide.eclipse",1351461925607 -stopped,bundle,org.eclipse.help.ui,3.5.101.r37_20110819,"org.eclipse.help.ui",1351461925610 -stopped,bundle,org.eclipse.help.webapp,3.6.1.r37_20110929,"org.eclipse.help.webapp",1351461925640 -stopped,bundle,org.eclipse.help.base,3.6.2.v201202080800,"org.eclipse.help.base",1351461925640 -stopped,bundle,org.eclipse.equinox.http.jetty,2.0.100.v20110502,"org.eclipse.equinox.http.jetty",1351461925662 -stopped,bundle,org.eclipse.m2e.discovery,1.0.200.20111228-1245,"org.eclipse.m2e.discovery",1351461925662 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache b/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache deleted file mode 100644 index 593f4708db84ac8fd0f5cc47c634f38c013fe9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQzU|;|M00aO5 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache deleted file mode 100644 index 593f4708db84ac8fd0f5cc47c634f38c013fe9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQzU|;|M00aO5 diff --git a/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat deleted file mode 100644 index 53dd38e2daf019473d0b90168bb2db166051c355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmZQzU|?c^05&ki?iJ)39~|V&2;?y`u=^Ut2e}6LgLq5~TwbAmo+0rb{=Tjt0cHkn esNx`h{}7M}3j - diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml deleted file mode 100644 index 9e390f50..00000000 --- a/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml deleted file mode 100644 index 0b856dc6..00000000 --- a/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml +++ /dev/null @@ -1,10 +0,0 @@ - -

-
- - - - - -
-
diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log deleted file mode 100644 index e69de29b..00000000 diff --git a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml b/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml deleted file mode 100644 index e0de5155..00000000 --- a/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.200.20111228-1245.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - %date [%thread] %-5level %logger{35} - %msg%n - - - - - - ${org.eclipse.m2e.log.dir}/0.log - - ${org.eclipse.m2e.log.dir}/%i.log - 1 - 10 - - - 100MB - - - %date [%thread] %-5level %logger{35} - %msg%n - - - - - - WARN - - - - - - - - - - - - - - - diff --git a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml deleted file mode 100644 index 9a98d7e8..00000000 --- a/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml +++ /dev/null @@ -1,11 +0,0 @@ - -
-
- - -
-
- - -
-
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml deleted file mode 100644 index 5ca0b776..00000000 --- a/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - -
-
diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml deleted file mode 100644 index e08b313a..00000000 --- a/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml deleted file mode 100644 index f213774b..00000000 --- a/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_ercp.png deleted file mode 100644 index 1d364a6301c57140488f01f9ebc02d744417fb4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4060 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 O0000 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_gwt.png deleted file mode 100644 index 8f33b6b47f5eb6233215e56b1cd92b3116c71738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3892 zcmV-456ke0P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP- z6b&v;(6!$H01mWCL_t(&-tC%skX*%m$3NZgy*YMgPwg$O?$v>Wkig=S!QvDFL}h zAoyJosFRS;C*C&+m}x(j(@^Smq%%9Qncr0&3ij};E-%{5Dn1~wN+7OHrKJR zrGdrG_0&hg;CkdTdB##1;;9S+iE$3OK80MCvAoBqfwTnAg3B_n+=Yp$B#@O*5Jeen zvGEQCT>YNUoB!)DdTEGTs^Lqunu}CGMK}s`r#Eu;qS-8+)k14c45yb?7h>s`f z8A%XNWf)B78OY{|7hF<-!Wd|-aF|hZE#kYqO zJZThF0vrjB09!!Vz^+xZ8D850u3@&Z_{qCa8L^mAT}flu!B&Q@{vq}q8%23Ovm=$9 z8Hy0jyfdvljNUA` ze%{;}PyfwVZ$=g~04c!|*tX3B=`7C~MXdnavM|va!uc_5357_A=&Bh+hc)>s z7!Xi>Mk6ad2eje2?YsH!&ch@;A4@=m09!g_A`P4sjqs2S#u&gL4D?FLx8}{mGKL@s z*tLBdR?ernu8M`p^b_yGve9BJfMqcEjE3sB9)0*eOLgxP0tvoC_&#_6j;HwZ{oTBn z&QWJU80b9jkBBc`L*3|M>f9tj#KJpwCdn!f5wo~(=1RtUde~GE@Iofe>zlf0F9bAM zHcM##fds;b>JA(O3-2aj>L>P>59fTtfM5!?JYx zhFyk#5ylvCn-HnLe&Ej7Tryw;##cz!Lu3j>@*aP@aR-~m(?moO{GJuJP_gJdqK-p% zQnPsPORPA&foIn&q;X9v1E~xM8)_`bd*CT(jnS~Khqf1ckRiw`_{+I%+&!%pKb^mtIov?m_o=q)h% z$c-09=G4~+;VFdca_bvg*`LZ%A;FRma-rhhM`@h1fYISN>yId0C24D_M}(^A@7vGv z)i1N%_Nm%E#O`mt&CF@d5Du~9&~DCu@Nx=Q%_aVVhsk;5a|Pm~Nobjl`?udG);@!l ziZJ}gzo8CvAp%4C!(AlzAI7Da?4@kjEnu6^%Re(_tqo8G`Dm11vYC!3?vg4tD3+A6~=nLmd|>_sHD_3^~D&0Nu*;K?qBJ&7!#Sc2NR-3&*7Y=)Qb zeTw$Bc6Qu*EA?0Y9%tTs7q2e=BCC)7oM)uPtay^aWSZK`)^PS$?xUvr0L~NtMEb3b zWJVHbK$Z3Yy0l7L0;UJBISjq6IQ_5IHfx5o&Y4EaKs)=(`Mueb=;^Ju-}9(MiN zm)P?3ztbBSs>yO}_A)v;rn7MIQYz*x z*=P-r1mXez{6^M&==^K1W^-pJJ-tKZ+&qD&kOES69f1m{H%TfgD`^Qw5Dm?Q4_ko2 zAn|QOt&DNBe~5#9M~L^wIW~PB?aggmTV2h4oi?dg_wfF@@6Z^Ekjtb{*&Ke^j!RDh zu1cgtse1xsDTT5rfd{Y!`!Zt*uBp^qchB9(iWtWV9@~5SS^xIiSYDhNvs+kw!5oYM zOG-r4;@RsSWmES~zWJa3NYE6}5~`&8wdYyTdze)lH>0-fB$wJi9vBp$oDhsB$VQ^% z^95WWkm7i*9Fzf{@Pe2`t|Xk3_XAOfeZ$Etel~~y!A7h_XHn~WToyH4arGA{X!v?l zCrLe@z^>s~GDRveOg#mDKL}Ve=K|Vxc2V8cN#Yx~TqcWbHJB=V7#>He@rash+;k6f=Vyg$>(C_4cqY z1kDDTH5hd=5H(596W1*h*Q!WlvTRP(6rcpU6jhNY*EGmFlJ3E=6gFU#hI|1tI)d>$ zgzKRS9y6jLmNiz>6tYo5k`_>}ph*`2`r~E z|5%!kF-WD6+CU+X$mhWK!S~RfhhHdQd>@55KA~R*N=*V6OuAO5xIfW9YNs_pK$eEe zQw(^cH<1KwAW#q}M4%y;$9Nw20eC*X=YujQS-Kpse;VNaM-Wk;V1KRv4^+A|d`eZ~ z!+?$RlNs;>jM7C*h@w4&_CSbY+8YGuAUHm`J89vW9LrC29ZVW$K0%eCw8(jrApPAAkCQj4=rb_5c8!r=( zh^Mo~Jwc!leyIlv;RlEyKm>}w3kZZb=|MeJ_fMnu;3J}qDf5T~d;tT_@zvTrtp`Rl z%n}TBkEWVuM54lolPzOPe?*`O)Cmvx;siKTCJFTso|r5dQ)X2GxB`;0_}g~L4Lu=n z%6Ly9(4%0XOT!l0oQ`K1!Khw!JrWy?ARA@|K@-F zxYa#QEuqO)Hx#X^OO{PppheNMo+y$S2F64&k|#A?8vbEe^V$ZVUVsG_>{lOA+})|z zGSBx(yB>}KTS~NSLaj%0G#iDJ>f)Oy|24OU$4Db7f#||jg z?+h56u=b!SlKZvJ$R^6z7dU)wf#ms^BWJCst>g=pF{-7cN?IK9T&n9E=;;|F86RZK zfmXj*oK2T1%!s1($1NBWm=uVt1{V%n@XF?ZAMOoKM3n!xL%y5BJYNAfEUpTRi({26 zx5FG!KCO+d?CBdJJvc}_RFa1&dLm&%N*1k{&=?y;27bQPEX>4Tx0C?J+Q+HUC_ZB|i_hk=OLfG)Jmu!ImA|tE_$Pihg5Rw34gb)%y#f69p zRumNxoJdu~g4GI0orvO~D7a@qiilc^Ra`jkAKa(4eR}Wh?fcjJyyu+f{LXpL4}cL8 zCXwc%Y5+M>g*-agACFH+#L2yY0u@N$1RxOR%fe>`#Q*^C19^CUbg)1C0k3ZW0swH; zE+i7i;s1lWP$pLZAdvvzA`<5d0gzGv$SzdK6adH=0I*ZDWC{S3003-xd_p1ssto|_ z^hrJi0NAOM+!p}Yq8zCR0F40vnJ7mj0zkU}U{!%qECRs70HCZuA}$2Lt^t5qwlYTo zfV~9(c8*w(4?ti5fSE!p%m5%b0suoE6U_r4Oaq`W(!b!TUvP!ENC5!A%azTSOVTqG zxRuZvck=My;vwR~Y_URN7by^C3FIQ2mzyIKNaq7g&I|wm8u`(|{y0C7=jP<$=4R(? z@ASo@{%i1WB0eGU-~POe0t5gMPS5Y!U*+Z218~Oyuywy{sapWrRsd+<`CT*H37}dE z(0cicc{uz)9-g64$UGe!3JVMEC1RnyFyo6p|1;rl;ER6t{6HT5+j{T-ahgDxt-zy$ z{c&M#cCJ#6=gR~_F>d$gBmT#QfBlXr(c(0*Tr3re@mPttP$EsodAU-NL?OwQ;u7h9 zGVvdl{RxwI4FIf$Pry#L2er#=z<%xl0*ek<(slqqe)BDi8VivC5N9+pdG`PSlfU_o zKq~;2Moa!tiTSO!5zH77Xo1hL_iEAz&sE_ z2IPPo3ZWR5K^auQI@koYumc*P5t`u;w81er4d>tzT!HIw7Y1M$p28Tsh6w~g$Osc* zAv%Z=Vvg7%&IlKojszlMNHmgwq#)^t6j36@$a16tsX}UzT}UJHEpik&ja)$bklV;0 zGK&0)yhkyVfwEBp)B<%txu_o+ipHRG(R4HqU4WLNYtb6C9zB4zqNmYI=yh}eeTt4_ zfYC7yW{lZkT#ScBV2M~7CdU?I?5=ix(HVZgM=}{CnA%mPqZa^68Xe5gFH?u96Et<2 zCC!@_L(8Nsqt(!wX=iEoXfNq>x(VHb9z~bXm(pwK2kGbOgYq4YG!XMxcgB zqf}$J#u<$v7REAV@mNCEa#jQDENhreVq3EL>`ZnA`x|yIdrVV9bE;;nW|3x{=5fsd z4#u(I@HyF>O3oq94bFQl11&!-vDRv>X03j$H`;pIzS?5#a_tuF>)P*iaGgM%ES>c_ zZ94aL3A#4AQM!e?+jYlFJ5+DSzi0S9#6BJCZ5(XZOGfi zTj0IRdtf>~J!SgN=>tB-J_4V5pNGDtz9Qc}z9W9tewls;{GR(e`pf-~_`l(K@)q$< z1z-We0p$U`ff|9c18V~x1epY-2Q>wa1-k|>3_cY?3<(WcA99m#z!&lx`C~KOXDpi0 z70L*m6G6C?@k ziR8rC#65}Qa{}jVnlqf_npBo_W3J`gqPZ95>CVfZcRX1&S&)1jiOPpx423?lIEROmG(H@JAFg?XogQlb;dIZPf{y+kr|S? zBlAsGMAqJ{&)IR=Ejg5&l$@hd4QZCNE7vf$D7Q~$D=U)?Nn}(WA6du22pZOfRS_cv~1-c(_QtNLti0-)8>m`6CO07JR*suu!$(^sg%jf zZm#rNxnmV!m1I@#YM0epR(~oNm0zrItf;Q|utvD%;#W>z)qM4NZQ9!2O1H}G>qzUQ z>u#*~S--DJy=p<#(1!30tsC);y-IHSJr>wyfLop*ExT zdYyk=%U1oZtGB+{Cfe4&-FJKQ4uc&PJKpb5^_C@dOYIJXG+^@gCvI%WcHjN%gI&kHifN$EH?V5MBa9S!3!a?Q1 zC*P)gd*e{(q0YnH!_D8Bf4B7r>qvPk(mKC&tSzH$pgp0z@92!9ogH2sN4~fJe(y2k zV|B+hk5`_cohUu=`Q(C=R&z?UQbnZ;IU-!xL z-sg{9@Vs#JBKKn3CAUkhJ+3`ResKNaNUvLO>t*-L?N>ambo5Q@JJIjcfBI^`)pOVQ z*DhV3dA;w(>>IakCfyvkCA#(acJ}QTcM9%I++BK)c(44v+WqPW`VZ=VwEnSWz-{38 zV8CF{!&wjS4he^z{*?dIhvCvk%tzHDMk9@nogW_?4H~`jWX_Y}r?RIL&&qyQ|9R_k ztLNYS;`>X_Sp3-V3;B!BzpiAqodZF$8#QjaAD4mdp+MhXYM@?p_JnG_Le#v4%i8*sv-~w5R%Dc==Ah7 zJRT3m#>Q+Be6!g^rBZ<;NpJ#y$K%24>#MCYFgrU7Ns{0IV4I!S!{u@T0EVXU)9EzQ z>GZ%dA!N7+{1nb%31nkq<6CkY|4#@vRGeVhuiJ8EcjZjhMSukWV2apZ*TW6p~b~T5JEsH{W5a79P;@* z4h{~wHh{7$!|(TlVHhZiV%cCA27y2T^?H5qRzg+PFR~;_I6XbZ?(VME33kK8#Dq3C znM`W>ot+)+xtl(jOm_I_<;ls(!CzuUQE+v2g{P+{Z5NJ?jl8EC!zEyV{Kv(X)h9RmJA!CYsGA_V@Qe2m!}&aJgKj3+c)05sgLx z0I5_;dp7e`6a~>}6sc6It9@Vs?TK4kTVNOllv21{u7MUb5b|oi@ zqUi~g&*$Ou`AkoZ?}Ac_YPE_&p`dL{PXf!!%P5sfra|icj0gsU$mMdlzP`4+WpKOQ z2!%o&dXmXxsL$uKWg~Zge?Mxc|2=_LtA&q`58DMU%Q9N67M!vyLli~K&(C9geB9C& z_-}wxiud<-l*?tvvJ4^!0xc8@u;bV1m6es>1iW6aE$hEnERIg05rGkb|B^r=k4(f>26PEEcI9%g5{Wl3!^q0_qfsX+;14002ovPDHLkV1g3}{&fHV diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_swt.png deleted file mode 100644 index 897496a555c115c3f6826dcc8703d999725be298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3894 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 Eg6)rWg8%>k diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkit_xwt.png deleted file mode 100644 index dc1a68ce930096b79932aa690dae19165c19aa47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4007 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 diff --git a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml b/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml deleted file mode 100644 index 1727003c..00000000 --- a/.metadata/.plugins/org.eclipse.wb.discovery.core/toolkits.xml +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - This WindowBuilder toolkit allows you to build user interfaces with the Standard Widget Toolkit (SWT) from Eclipse. - - - - - - - - - - - - - - This WindowBuilder toolkit allows you to build user interfaces with Java's Swing GUI framework. - - - - - - - - - - - - - - This WindowBuilder toolkit allows you to build user interfaces with Eclipse's embedded Rich Client Platform (eRCP) framework. eRCP targets embedded devices. - - - - - - - - - - - - - - This WindowBuilder toolkit allows you to build user interfaces with the XML Windowing Toolkit (XWT) UI framework. - - - - - - - - - - - - - - The Google Plugin for Eclipse provides support for building projects with the Google Web Toolkit and Google APIs, as well as integration with Google Project Hosting and App Engine. - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.metadata/version.ini b/.metadata/version.ini deleted file mode 100644 index c51ff745..00000000 --- a/.metadata/version.ini +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/src/common/basicpipes/BasicPipesMain.java b/src/common/basicpipes/BasicPipesMain.java index 520bf1c2..e1b903af 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/src/common/basicpipes/BasicPipesMain.java @@ -1,4 +1,5 @@ package basicpipes; + import java.io.File; import net.minecraft.src.Block; @@ -30,16 +31,18 @@ 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 = "basicPipes", name = "Basic Pipes", version = "1.9",dependencies = "after:UniversalElectricity") -@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class BasicPipesMain{ - - public BasicPipesMain instance; - - @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") +@Mod(modid = "basicPipes", name = "Basic Pipes", version = "1.9", dependencies = "after:UniversalElectricity") +@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class BasicPipesMain { + + public BasicPipesMain instance; + + @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") public static PipeProxy proxy; - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/BasicPipes.cfg"))); + static Configuration config = new Configuration((new File( + cpw.mods.fml.common.Loader.instance().getConfigDir(), + "/UniversalElectricity/BasicPipes.cfg"))); public static int pipeID = configurationProperties(); private static int partID; private static int ppipeID; @@ -49,7 +52,8 @@ public class BasicPipesMain{ public static int valveID; public static int rodID; public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); - public static Block machine = new BlockMachine(machineID).setBlockName("pump"); + public static Block machine = new BlockMachine(machineID) + .setBlockName("pump"); public static Block valve = new BlockValve(valveID).setBlockName("valve"); public static Block rod = new BlockRod(rodID); public static Item parts = new ItemParts(partID); @@ -60,105 +64,158 @@ public class BasicPipesMain{ public static String channel = "Pipes"; public static String textureFile = "/textures"; public static boolean ueLoaded = false; - - - public static int configurationProperties() - { - config.load(); - pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"PipeBlock", 155).value); - machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"machineBlock", 156).value); - valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"ValveBlock", 157).value); - rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"gearBlock", 158).value); - partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"parts", 23022).value); - ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"pipes", 23023).value); - toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"ToolID", 23024).value); - tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"tankID", 23025).value); - config.save(); - return pipeID; - } - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - proxy.preInit(); - GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(rod); - GameRegistry.registerBlock(machine,basicpipes.machines.ItemMachine.class); + + public static int configurationProperties() { + config.load(); + pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "PipeBlock", 155).value); + machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "machineBlock", 156).value); + valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "ValveBlock", 157).value); + rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "gearBlock", 158).value); + partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "parts", 23022).value); + ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "pipes", 23023).value); + toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "ToolID", 23024).value); + tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "tankID", 23025).value); + config.save(); + return pipeID; } + + @PreInit + public void preInit(FMLPreInitializationEvent event) { + proxy.preInit(); + GameRegistry.registerBlock(pipe); + GameRegistry.registerBlock(rod); + GameRegistry.registerBlock(machine, + basicpipes.machines.ItemMachine.class); + } + @Init - public void load(FMLInitializationEvent evt) - { - //register + public void load(FMLInitializationEvent evt) { + // register proxy.init(); GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); GameRegistry.registerTileEntity(TileEntityLTank.class, "ltank"); - //Names and lang stuff - //Pipe Names - for(int i =0; i < Liquid.values().length;i++) - { - LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), Liquid.getLiquid(i).lName+" Pipe"); - } - for(int i =0; i < Liquid.values().length;i++) - { - LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), Liquid.getLiquid(i).lName+" Tank"); - } - //Pump - LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); - LanguageRegistry.addName((new ItemStack(machine, 1, 4)), "WaterCondensor"); - LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); - //Tools - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); - //Parts - LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); - LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); + // Names and lang stuff + // Pipe Names + for (int i = 0; i < Liquid.values().length; i++) { + LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), + Liquid.getLiquid(i).lName + " Pipe"); + } + for (int i = 0; i < Liquid.values().length; i++) { + LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), + Liquid.getLiquid(i).lName + " Tank"); + } + // Pump + LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); + LanguageRegistry.addName((new ItemStack(machine, 1, 4)), + "WaterCondensor"); + LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); + // Tools + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); + // Parts + LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); + LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); } + @PostInit - public void postInit(FMLPostInitializationEvent event) - { + public void postInit(FMLPostInitializationEvent event) { proxy.postInit(); - GameRegistry.addRecipe(new ItemStack(parts, 2,1), new Object[] { "@@@", '@',Item.ingotIron});//iron tube - GameRegistry.addRecipe(new ItemStack(parts, 2,2), new Object[] { "@@@", '@',Block.obsidian});//obby Tube - GameRegistry.addRecipe(new ItemStack(parts, 2,3), new Object[] { "N@N", 'N',Block.netherrack,'@',new ItemStack(parts, 2,2)});//nether tube - GameRegistry.addRecipe(new ItemStack(parts, 2,4), new Object[] { "@@","@@", '@',Item.leather});//seal - GameRegistry.addShapelessRecipe(new ItemStack(parts, 1,5), new Object[] { new ItemStack(parts, 1,4),new ItemStack(Item.slimeBall, 1)});//stick seal - //crafting pipes - //{"black", "red", "green", "brown", "blue", "purple", "cyan", - //"silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; - GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", 'I',Item.ingotIron,'@',new ItemStack(parts, 1,1)}); - //water - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,1), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); - //lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,2), new Object[] { new ItemStack(parts, 1,2),new ItemStack(Item.dyePowder, 1,1)}); - //oil - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,3), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); - //fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,4), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - GameRegistry.addRecipe(new ItemStack(parts, 1,7), new Object[] { "T@T", 'T',new ItemStack(parts,1,1),'@',Block.lever});//valve - - GameRegistry.addRecipe(new ItemStack(parts, 1,6), new Object[] { " @ ","@ @"," @ ", '@',Item.ingotIron});//tank - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,0), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,15)}); - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,1), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,4)}); - //lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,2), new Object[] { new ItemStack(parts, 1,6),Block.obsidian,Block.obsidian,Block.obsidian,Block.obsidian}); - //oil - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,3), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,0)}); - //fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1,4), new Object[] { new ItemStack(parts, 1,6),new ItemStack(parts, 1,4),new ItemStack(Item.dyePowder, 1,11)}); - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1,0), new Object[] { new ItemStack(parts, 1,1),new ItemStack(parts, 1,4)}); - GameRegistry.addRecipe(new ItemStack(machine, 1,0), new Object[] { "@T@","BPB","@P@" - , '@',new ItemStack(Item.ingotIron,2) - , 'B',new ItemStack(parts, 1,7) - , 'P',new ItemStack(Block.pistonBase) - , 'T',new ItemStack(parts, 1,6) - }); - + GameRegistry.addRecipe(new ItemStack(this.gauge, 1, 0), new Object[] { + "TVT"," T ", 'V', new ItemStack(parts,1,7), 'T',new ItemStack(parts,1,1) }); + //iron tube + GameRegistry.addRecipe(new ItemStack(parts, 2, 1), new Object[] { + "@@@", '@', Item.ingotIron }); + //obby tube + GameRegistry.addRecipe(new ItemStack(parts, 2, 2), new Object[] { + "@@@", '@', Block.obsidian }); + //nether tube + GameRegistry + .addRecipe(new ItemStack(parts, 2, 3), + new Object[] { "N@N", 'N', Block.netherrack, '@', + new ItemStack(parts, 2, 2) }); + //seal + GameRegistry.addRecipe(new ItemStack(parts, 2, 4), new Object[] { "@@", + "@@", '@', Item.leather }); + //slime steal + GameRegistry.addShapelessRecipe(new ItemStack(parts, 1, 5), + new Object[] { new ItemStack(parts, 1, 4), + new ItemStack(Item.slimeBall, 1) });// stick seal + // crafting pipes + // {"black", "red", "green", "brown", "blue", "purple", "cyan", + // "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", + // "orange", "white"}; + GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", + 'I', Item.ingotIron, '@', new ItemStack(parts, 1, 1) }); + // water + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 1), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 4) }); + // lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 2), + new Object[] { new ItemStack(parts, 1, 2), + new ItemStack(Item.dyePowder, 1, 1) }); + // oil + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 3), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 0) }); + // fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 4), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 11) }); + GameRegistry.addRecipe(new ItemStack(parts, 1, 7), new Object[] { + "T@T", 'T', new ItemStack(parts, 1, 1), '@', Block.lever });// valve + + GameRegistry.addRecipe(new ItemStack(parts, 1, 6), new Object[] { + " @ ", "@ @", " @ ", '@', Item.ingotIron });// tank + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 0), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 15) }); + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 1), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 4) }); + // lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 2), + new Object[] { new ItemStack(parts, 1, 6), Block.obsidian, + Block.obsidian, Block.obsidian, Block.obsidian }); + // oil + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 3), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 0) }); + // fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 4), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 11) }); + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 0), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4) }); + GameRegistry.addRecipe(new ItemStack(machine, 1, 0), new Object[] { + "@T@", "BPB", "@P@", '@', new ItemStack(Item.ingotIron, 2), + 'B', new ItemStack(parts, 1, 7), 'P', + new ItemStack(Block.pistonBase), 'T', + new ItemStack(parts, 1, 6) }); + } } diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index 564facd5..c1984a6f 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -25,6 +25,7 @@ public class ItemGuage extends Item this.setIconIndex(10); this.setItemName("guage"); this.setCreativeTab(CreativeTabs.tabTools); + this.setMaxStackSize(1); } @Override public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/src/common/basicpipes/conductors/TileEntityPipe.java index a50d9293..a1dad79d 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/src/common/basicpipes/conductors/TileEntityPipe.java @@ -1,4 +1,5 @@ package basicpipes.conductors; + import net.minecraft.src.EntityPlayer; import net.minecraft.src.INetworkManager; import net.minecraft.src.NBTTagCompound; @@ -15,193 +16,195 @@ import basicpipes.pipes.api.Liquid; import basicpipes.pipes.api.MHelper; import com.google.common.io.ByteArrayDataInput; -public class TileEntityPipe extends TileEntity implements ILiquidConsumer,IPacketReceiver -{ + +public class TileEntityPipe extends TileEntity implements ILiquidConsumer, + IPacketReceiver { protected Liquid type = Liquid.DEFUALT; - public int capacity = 2; + public int capacity = 2; public int presure = 0; public int connectedUnits = 0; public int liquidStored = 0; private int count = 0; - private int count2 =0; - + private int count2 = 0; + protected boolean firstUpdate = true; - - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - public int getPressure() - { + + public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; + + public int getPressure() { return this.presure; } - + @Override - public void updateEntity() - { + public void updateEntity() { int highestPressure = 0; - if(++count >= 5) - { - this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - for(int i =0; i < 6; i++) - { - - - if(connectedBlocks[i] instanceof ILiquidConsumer && ((ILiquidConsumer) connectedBlocks[i]).canRecieveLiquid(this.type, ForgeDirection.getOrientation(i).getOpposite())) - { - this.connectedUnits++; - if(connectedBlocks[i] instanceof TileEntityPipe) - { - if(((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) - { - highestPressure = ((TileEntityPipe) connectedBlocks[i]).getPressure(); + if (++count >= 5) { + this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, + yCoord, zCoord); + for (int i = 0; i < 6; i++) { + + if (connectedBlocks[i] instanceof ILiquidConsumer + && ((ILiquidConsumer) connectedBlocks[i]) + .canRecieveLiquid(this.type, ForgeDirection + .getOrientation(i).getOpposite())) { + this.connectedUnits++; + if (connectedBlocks[i] instanceof TileEntityPipe) { + if (((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) { + highestPressure = ((TileEntityPipe) connectedBlocks[i]) + .getPressure(); } } - } - else - if(connectedBlocks[i] instanceof ILiquidProducer && ((ILiquidProducer) connectedBlocks[i]).canProduceLiquid(this.type, ForgeDirection.getOrientation(i).getOpposite())) - { - this.connectedUnits++; - if(((ILiquidProducer) connectedBlocks[i]).canProducePresure(this.type, ForgeDirection.getOrientation(i)) && ((ILiquidProducer) connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i).getOpposite()) > highestPressure) - { - highestPressure = ((ILiquidProducer) connectedBlocks[i]).presureOutput(this.type,ForgeDirection.getOrientation(i)); - } - } - else - { + } else if (connectedBlocks[i] instanceof ILiquidProducer + && ((ILiquidProducer) connectedBlocks[i]) + .canProduceLiquid(this.type, ForgeDirection + .getOrientation(i).getOpposite())) { + this.connectedUnits++; + if (((ILiquidProducer) connectedBlocks[i]) + .canProducePresure(this.type, + ForgeDirection.getOrientation(i)) + && ((ILiquidProducer) connectedBlocks[i]) + .presureOutput(this.type, ForgeDirection + .getOrientation(i).getOpposite()) > highestPressure) { + highestPressure = ((ILiquidProducer) connectedBlocks[i]) + .presureOutput(this.type, + ForgeDirection.getOrientation(i)); + } + } else { connectedBlocks[i] = null; } } - if(!worldObj.isRemote) - { - if(firstUpdate || count2++ >= 10) - { count2= 0; + if (!worldObj.isRemote) { + if (firstUpdate || count2++ >= 10) { + count2 = 0; firstUpdate = false; - Packet packet = PacketManager.getPacket("Pipes",this, new Object[]{this.type.ordinal()}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 60); + Packet packet = PacketManager.getPacket("Pipes", this, + new Object[] { this.type.ordinal() }); + PacketManager.sendPacketToClients(packet, worldObj, + Vector3.get(this), 60); } - this.presure = highestPressure -1; - for(int i =0; i < 6; i++) - { - if(connectedBlocks[i] instanceof ILiquidProducer) - { - int vol = ((ILiquidProducer)connectedBlocks[i]).onProduceLiquid(this.type, this.capacity - this.liquidStored, ForgeDirection.getOrientation(i).getOpposite()); - this.liquidStored = Math.max(this.liquidStored + vol,this.capacity); + this.presure = highestPressure - 1; + for (int i = 0; i < 6; i++) { + if (connectedBlocks[i] instanceof ILiquidProducer) { + int vol = ((ILiquidProducer) connectedBlocks[i]) + .onProduceLiquid(this.type, this.capacity + - this.liquidStored, ForgeDirection + .getOrientation(i).getOpposite()); + this.liquidStored = Math.min(this.liquidStored + vol, + this.capacity); } - if(connectedBlocks[i] instanceof ILiquidConsumer && this.liquidStored > 0 && this.presure > 0) - { - if(connectedBlocks[i] instanceof TileEntityPipe) - { + if (connectedBlocks[i] instanceof ILiquidConsumer + && this.liquidStored > 0 && this.presure > 0) { + if (connectedBlocks[i] instanceof TileEntityPipe) { this.liquidStored--; - int vol = ((ILiquidConsumer)connectedBlocks[i]).onReceiveLiquid(this.type, Math.max(this.liquidStored,1), ForgeDirection.getOrientation(i).getOpposite()); + int vol = ((ILiquidConsumer) connectedBlocks[i]) + .onReceiveLiquid(this.type, Math.max( + this.liquidStored, 1), + ForgeDirection.getOrientation(i) + .getOpposite()); this.liquidStored += vol; - }else - { - this.liquidStored = ((ILiquidConsumer)connectedBlocks[i]).onReceiveLiquid(this.type, this.liquidStored, ForgeDirection.getOrientation(i).getOpposite()); + } else { + this.liquidStored = ((ILiquidConsumer) connectedBlocks[i]) + .onReceiveLiquid(this.type, + this.liquidStored, ForgeDirection + .getOrientation(i) + .getOpposite()); } } } } } } - - //--------------- - //liquid stuff - //--------------- + + // --------------- + // liquid stuff + // --------------- @Override - public int onReceiveLiquid(Liquid type,int vol, ForgeDirection side) - { - if(type == this.type) - { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.capacity, 0); - this.liquidStored = Math.min(Math.max((liquidStored + vol - rejectedVolume),0),this.capacity); + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if (type == this.type) { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) + - this.capacity, 0); + this.liquidStored = Math.min( + Math.max((liquidStored + vol - rejectedVolume), 0), + this.capacity); return rejectedVolume; } return vol; } + /** * @return Return the stored volume in this pipe. */ - @Override - public int getStoredLiquid(Liquid type) - { - if(type == this.type) - { - return this.liquidStored; - } + @Override + public int getStoredLiquid(Liquid type) { + if (type == this.type) { + return this.liquidStored; + } return 0; - } - - - @Override - public int getLiquidCapacity(Liquid type) - { - if(type == this.type) - { - return this.capacity; - } - return 0; - } - -//find wether or not this side of X block can recieve X liquid type. Also use to determine connection of a pipe + } + + @Override + public int getLiquidCapacity(Liquid type) { + if (type == this.type) { + return this.capacity; + } + return 0; + } + + // find wether or not this side of X block can recieve X liquid type. Also + // use to determine connection of a pipe @Override public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if(type == this.type) - { + if (type == this.type) { return true; } return false; } - //returns liquid type - public Liquid getType() { + + // returns liquid type + public Liquid getType() { return this.type; } - //used by the item to set the liquid type on spawn + // used by the item to set the liquid type on spawn public void setType(Liquid rType) { this.type = rType; - + } - - //--------------------- - //data - //-------------------- + // --------------------- + // data + // -------------------- @Override public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput data) { - try - { - int type = data.readInt(); - if(worldObj.isRemote) - { - this.type = Liquid.getLiquid(type); + try { + int type = data.readInt(); + if (worldObj.isRemote) { + this.type = Liquid.getLiquid(type); + } + } catch (Exception e) { + e.printStackTrace(); } - } - catch(Exception e) - { - e.printStackTrace(); - } - - + } + /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); - } + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); + } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type.ordinal()); - } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type.ordinal()); + } } - diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java index d752f27c..fc0fdf5c 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -48,7 +48,7 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi if(!worldObj.isRemote) { - if(bBlock == type.Still && this.eStored > 200 && this.lStored < this.wMax) + if(bBlock == type.Still && this.eStored >= 200 && this.lStored < this.wMax) { eStored -= 200; lStored += 1; @@ -71,9 +71,8 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { if(type == this.type && lStored > 0) { - int tradeW = Math.min(maxVol, lStored); - lStored -= tradeW; - return tradeW; + lStored -= 1; + return 1; } return 0; } diff --git a/src/common/steampower/SteamPowerMain.java b/src/common/steampower/SteamPowerMain.java index 9200d012..f3e43eae 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/src/common/steampower/SteamPowerMain.java @@ -1,4 +1,5 @@ package steampower; + import java.io.File; import net.minecraft.src.Block; @@ -25,12 +26,14 @@ import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; -@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9",dependencies = "after:basicPipes") -@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPowerMain{ - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/SteamPower.cfg"))); - private static int BlockID= configurationProperties(); +@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") +@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class SteamPowerMain { + static Configuration config = new Configuration((new File( + cpw.mods.fml.common.Loader.instance().getConfigDir(), + "/UniversalElectricity/SteamPower.cfg"))); + private static int BlockID = configurationProperties(); public static int EngineItemID; public static int EngineID; public static int genID; @@ -40,91 +43,111 @@ public class SteamPowerMain{ public static int boilerHeat; public static int fireOutput; public static final String channel = "SPpack"; - public static Block machine = new BlockMachine(BlockID).setBlockName("machine"); - public static Block engine = new BlockSteamPiston(EngineID).setBlockName("SteamEngien"); + public static Block machine = new BlockMachine(BlockID) + .setBlockName("machine"); + public static Block engine = new BlockSteamPiston(EngineID) + .setBlockName("SteamEngien"); public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); - public static Item itemEngine = new ItemEngine(EngineItemID).setItemName("SteamEngine"); - - public static SteamPowerMain instance; - - @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") - public static SteamProxy proxy; + public static Item itemEngine = new ItemEngine(EngineItemID) + .setItemName("SteamEngine"); + + public static SteamPowerMain instance; + + @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") + public static SteamProxy proxy; public static String textureFile = "/textures/"; - public static int configurationProperties() - { - config.load(); - BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"MachinesID", 3030).value); - EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM,"EngineItem", 30308).value); - EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"SteamEngineID", 3031).value); - genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK,"ElecGenID", 3032).value); - genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"genOutputWattsmax", 1000).value); - steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"steamOutPerCycle", 10).value); - boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"boilerInKJNeed", 4500).value); - fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL,"fireBoxOutKJMax", 250).value); - config.save(); - return BlockID; - } - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - instance = this; - NetworkRegistry.instance().registerGuiHandler(this, this.proxy); - proxy.preInit(); - GameRegistry.registerBlock(machine, ItemMachine.class); - GameRegistry.registerBlock(engine); - GameRegistry.registerBlock(gen); - } - @Init - public void load(FMLInitializationEvent evt) - { - proxy.init(); - GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); - //Names............... + + public static int configurationProperties() { + config.load(); + BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "MachinesID", 3030).value); + EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "EngineItem", 30308).value); + EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "SteamEngineID", 3031).value); + genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "ElecGenID", 3032).value); + genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, + "genOutputWattsmax", 1000).value); + steamOutBoiler = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); + boilerHeat = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); + fireOutput = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); + config.save(); + return BlockID; + } + + @PreInit + public void preInit(FMLPreInitializationEvent event) { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); + GameRegistry.registerBlock(machine, ItemMachine.class); + GameRegistry.registerBlock(engine); + GameRegistry.registerBlock(gen); + } + + @Init + public void load(FMLInitializationEvent evt) { + proxy.init(); + GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); + // Names............... LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); - - + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), + "SteamPiston"); + } - @PostInit - public void postInit(FMLPostInitializationEvent event) - { - - proxy.postInit(); - //Crafting - try{ - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(gen, 1), new Object [] {"@T@", "OVO", "@T@", - 'T',new ItemStack(BasicPipesMain.rod, 1), - '@',"plateSteel", - 'O',"basicCircuit", - 'V',"motor"})); + + @PostInit + public void postInit(FMLPostInitializationEvent event) { + + proxy.postInit(); + // Crafting + try { + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(gen, 1), + new Object[] { "@T@", "OVO", "@T@", 'T', + new ItemStack(BasicPipesMain.rod, 1), '@', + "plateSteel", 'O', "basicCircuit", 'V', + "motor" })); /** - TileEntityBoiler();<- metadata 1 - TileEntityFireBox();<-metadata 2-5 - */ - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe( - new ItemStack(machine, 1, 1), new Object [] {"TT", "VV", "TT", - 'T',new ItemStack(BasicPipesMain.parts, 1,6), - 'V',new ItemStack(BasicPipesMain.parts, 1,7)})); - CraftingManager.getInstance().getRecipeList().add( - new ShapedOreRecipe(new ItemStack(machine, 1, 2), new Object [] { "@", "F", - 'F',Block.stoneOvenIdle, - '@',"plateSteel"})); - CraftingManager.getInstance().getRecipeList().add( - new ShapedOreRecipe(new ItemStack(itemEngine, 1,0), new Object [] {"GGG", "VPV", "@T@", - 'T',new ItemStack(BasicPipesMain.parts, 1,1), - 'G',BasicPipesMain.rod, - '@',"plateSteel", - 'P',Block.pistonBase, - 'V',new ItemStack(BasicPipesMain.parts, 1,7), - 'M',"motor"})); - } - catch(Exception e) - { - e.printStackTrace(); - System.out.print("UE based recipes not loaded"); - } + * TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata + * 2-5 + */ + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(machine, 1, 1), + new Object[] { "TT", "VV", "TT", 'T', + new ItemStack(BasicPipesMain.parts, 1, 6), + 'V', + new ItemStack(BasicPipesMain.parts, 1, 7) })); + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(machine, 1, 2), + new Object[] { "@", "F", 'F', Block.stoneOvenIdle, + '@', "plateSteel" })); + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), + new Object[] { "GGG", "VPV", "@T@", 'T', + new ItemStack(BasicPipesMain.parts, 1, 1), + 'G', BasicPipesMain.rod, '@', "plateSteel", + 'P', Block.pistonBase, 'V', + new ItemStack(BasicPipesMain.parts, 1, 7), + 'M', "motor" })); + } catch (Exception e) { + e.printStackTrace(); + System.out.print("UE based recipes not loaded"); } + } } diff --git a/src/common/steampower/turbine/BlockGenerator.java b/src/common/steampower/turbine/BlockGenerator.java index 4d512832..8be43d01 100644 --- a/src/common/steampower/turbine/BlockGenerator.java +++ b/src/common/steampower/turbine/BlockGenerator.java @@ -2,9 +2,6 @@ package steampower.turbine; import java.util.ArrayList; -import steampower.ItemRenderHelperS; -import steampower.TileEntityMachine; - import net.minecraft.src.CreativeTabs; import net.minecraft.src.EntityLiving; import net.minecraft.src.EntityPlayer; @@ -13,6 +10,7 @@ import net.minecraft.src.Material; import net.minecraft.src.MathHelper; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import steampower.ItemRenderHelperS; public class BlockGenerator extends universalelectricity.prefab.BlockMachine { @@ -20,50 +18,51 @@ public class BlockGenerator extends universalelectricity.prefab.BlockMachine { super("Generator", id, Material.iron); this.setCreativeTab(CreativeTabs.tabBlock); } + @Override - public void addCreativeItems(ArrayList itemList) - { - itemList.add(new ItemStack(this, 1,0)); - } - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving par5EntityLiving) - { - int angle = MathHelper.floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); - } + public void addCreativeItems(ArrayList itemList) { + itemList.add(new ItemStack(this, 1, 0)); + } + @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if(metadata < 3) - { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata+angle); - } - else - { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - @Override - public TileEntity createNewTileEntity(World world) - { - return new TileEntityGen(); + public void onBlockPlacedBy(World world, int x, int y, int z, + EntityLiving par5EntityLiving) { + int angle = MathHelper + .floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); + } + + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + int angle = MathHelper + .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); + } else { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); } + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return ItemRenderHelperS.renderID; + } + + @Override + public TileEntity createNewTileEntity(World world) { + return new TileEntityGen(); + } } diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/src/common/steampower/turbine/BlockSteamPiston.java index 5411682f..40759920 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/src/common/steampower/turbine/BlockSteamPiston.java @@ -2,148 +2,113 @@ package steampower.turbine; import java.util.Random; -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; import steampower.SteamPowerMain; -import steampower.TileEntityMachine; -public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine{ +public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine { public BlockSteamPiston(int par1) { super("SteamEngine", par1, Material.iron); + + } + + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + return false; } - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntitySteamPiston) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y, z); - } - if(blockEntity instanceof TileEntitytopGen) - { - par5EntityPlayer.openGui(SteamPowerMain.instance, 2, par1World, x, y-1, z); - } - } - return true; - } - } @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if(metadata < 3) - { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata+angle); - } - else - { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - public TileEntity createNewTileEntity(World var1) - { - return null; - } - public void breakBlock(World world, int x, int y, int z,int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - if(world.getBlockId(x, y+1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)> 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - else - if(meta > 4) - { - if(world.getBlockId(x, y-1, z) == this.blockID) - { - if(world.getBlockMetadata(x, y, z)< 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; + public boolean onUseWrench(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + int angle = MathHelper + .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); + } else { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); } - @Override - public int getRenderType() - { - return -1; - } - @Override - public TileEntity createNewTileEntity(World world, int metadata) - { - if(metadata >= 0 && metadata < 4) - { - return new TileEntitySteamPiston(); + return true; + } + + public TileEntity createNewTileEntity(World var1) { + return null; + } + + public void breakBlock(World world, int x, int y, int z, int par5, int par6) { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if (meta < 4) { + if (world.getBlockId(x, y + 1, z) == this.blockID) { + if (world.getBlockMetadata(x, y, z) > 4) { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } } - if(metadata == 14) - { - return new TileEntitytopGen(); + } else if (meta > 4) { + if (world.getBlockId(x, y - 1, z) == this.blockID) { + if (world.getBlockMetadata(x, y, z) < 4) { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } } - return null; } - public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5) - { - int meta = par1World.getBlockMetadata(par2, par3, par4); - if (meta < 4) - { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - else - { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - } - @Override - public int idDropped(int par1, Random par2Random, int par3) - { - return SteamPowerMain.itemEngine.shiftedIndex; - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3+1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); - } + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) { + if (metadata >= 0 && metadata < 4) { + return new TileEntitySteamPiston(); + } + if (metadata == 14) { + return new TileEntitytopGen(); + } + return null; + } + + public void onNeighborBlockChange(World par1World, int par2, int par3, + int par4, int par5) { + int meta = par1World.getBlockMetadata(par2, par3, par4); + if (meta < 4) { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } else { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + } + + @Override + public int idDropped(int par1, Random par2Random, int par3) { + return SteamPowerMain.itemEngine.shiftedIndex; + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3 + 1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) + && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); + } } diff --git a/src/common/steampower/turbine/ItemEngine.java b/src/common/steampower/turbine/ItemEngine.java index 8af348f2..3cb43c29 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/src/common/steampower/turbine/ItemEngine.java @@ -1,4 +1,5 @@ package steampower.turbine; + import java.util.List; import net.minecraft.src.Block; @@ -11,106 +12,101 @@ import net.minecraft.src.World; import steampower.SteamPowerMain; import steampower.TileEntityMachine; -public class ItemEngine extends Item -{ - public ItemEngine(int par1) - { - super(par1); - this.maxStackSize = 5; - this.setCreativeTab(CreativeTabs.tabBlock); - this.setIconIndex(21); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { +public class ItemEngine extends Item { + public ItemEngine(int par1) { + super(par1); + this.maxStackSize = 5; + this.setCreativeTab(CreativeTabs.tabBlock); + this.setIconIndex(21); + } + + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, + List par3List) { par3List.add(new ItemStack(this, 1, 0)); - } - @Override + } + + @Override public String getTextureFile() { // TODO Auto-generated method stub - return SteamPowerMain.textureFile+"Items.png"; + return SteamPowerMain.textureFile + "Items.png"; } - + public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, - World world, int x, int y, int z, int par7, float par8, float par9, float par10) - { - int var11 = world.getBlockId(x, y, z); - int BlockID = SteamPowerMain.EngineID; + World world, int x, int y, int z, int par7, float par8, float par9, + float par10) { + int var11 = world.getBlockId(x, y, z); + int BlockID = SteamPowerMain.EngineID; - if (var11 == Block.snow.blockID) - { - par7 = 1; - } - else if (var11 != Block.vine.blockID && var11 != Block.tallGrass.blockID && var11 != Block.deadBush.blockID - && (Block.blocksList[var11] == null || !Block.blocksList[var11].isBlockReplaceable(world, x, y, z))) - { - if (par7 == 0) - { - --y; - } + if (var11 == Block.snow.blockID) { + par7 = 1; + } else if (var11 != Block.vine.blockID + && var11 != Block.tallGrass.blockID + && var11 != Block.deadBush.blockID + && (Block.blocksList[var11] == null || !Block.blocksList[var11] + .isBlockReplaceable(world, x, y, z))) { + if (par7 == 0) { + --y; + } - if (par7 == 1) - { - ++y; - } + if (par7 == 1) { + ++y; + } - if (par7 == 2) - { - --z; - } + if (par7 == 2) { + --z; + } - if (par7 == 3) - { - ++z; - } + if (par7 == 3) { + ++z; + } - if (par7 == 4) - { - --x; - } + if (par7 == 4) { + --x; + } - if (par7 == 5) - { - ++x; - } - } + if (par7 == 5) { + ++x; + } + } - if (itemStack.stackSize == 0) - { - return false; - } - else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) - { - return false; - } - else if (y == 255 && Block.blocksList[BlockID].blockMaterial.isSolid()) - { - return false; - } - else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, ePlayer)) - { - Block var12 = Block.blocksList[BlockID]; - int angle = MathHelper.floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - switch (angle) - { - case 0: world.setBlockAndMetadata(x, y, z, var12.blockID, 0); break; - case 1: world.setBlockAndMetadata(x, y, z, var12.blockID, 1); break; - case 2: world.setBlockAndMetadata(x, y, z, var12.blockID, 2); break; - case 3: world.setBlockAndMetadata(x, y, z, var12.blockID, 3); break; - } - int meta = world.getBlockMetadata(x, y, z); - //ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.setBlockAndMetadataWithNotify(x, y+1, z, var12.blockID, 14); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.editingBlocks = false; - --itemStack.stackSize; + if (itemStack.stackSize == 0) { + return false; + } else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) { + return false; + } else if (y == 255 + && Block.blocksList[BlockID].blockMaterial.isSolid()) { + return false; + } else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, + ePlayer)) { + Block var12 = Block.blocksList[BlockID]; + int angle = MathHelper + .floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + switch (angle) { + case 0: + world.setBlockAndMetadata(x, y, z, var12.blockID, 0); + break; + case 1: + world.setBlockAndMetadata(x, y, z, var12.blockID, 1); + break; + case 2: + world.setBlockAndMetadata(x, y, z, var12.blockID, 2); + break; + case 3: + world.setBlockAndMetadata(x, y, z, var12.blockID, 3); + break; + } + int meta = world.getBlockMetadata(x, y, z); + // ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.setBlockAndMetadataWithNotify(x, y + 1, z, var12.blockID, 14); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.editingBlocks = false; + --itemStack.stackSize; - return true; - } - else - { - return false; - } - } + return true; + } else { + return false; + } + } } From d96e10e63ea1e946872a124972763c3380598eab Mon Sep 17 00:00:00 2001 From: Rseifert Date: Mon, 12 Nov 2012 15:48:50 -0500 Subject: [PATCH 105/115] Cleanup removed IC2, computer Craft and railcraft api. Wasn't using them anyways so no point keeping them especial when i can't have IC2 uploaded like that anyways --- .../basicpipes/conductors/ItemGuage.java | 13 - .../basicpipes/machines/TileEntityPump.java | 2 +- .../dan200/computer/api/IComputerAccess.java | 131 ----- .../dan200/computer/api/IPeripheral.java | 103 ---- src/common/ic2/api/BaseSeed.java | 56 --- src/common/ic2/api/CropCard.java | 475 ------------------ src/common/ic2/api/Crops.java | 47 -- src/common/ic2/api/Direction.java | 106 ---- src/common/ic2/api/ElectricItem.java | 128 ----- src/common/ic2/api/EnergyNet.java | 119 ----- src/common/ic2/api/ExplosionWhitelist.java | 46 -- src/common/ic2/api/IBoxable.java | 18 - src/common/ic2/api/IElectricItem.java | 52 -- src/common/ic2/api/IEnergyAcceptor.java | 20 - src/common/ic2/api/IEnergyConductor.java | 51 -- src/common/ic2/api/IEnergyEmitter.java | 21 - src/common/ic2/api/IEnergySink.java | 23 - src/common/ic2/api/IEnergySource.java | 15 - src/common/ic2/api/IEnergyStorage.java | 27 - src/common/ic2/api/IEnergyTile.java | 18 - src/common/ic2/api/IMetalArmor.java | 20 - ...INetworkClientTileEntityEventListener.java | 17 - src/common/ic2/api/INetworkDataProvider.java | 18 - .../ic2/api/INetworkItemEventListener.java | 18 - .../api/INetworkTileEntityEventListener.java | 14 - .../ic2/api/INetworkUpdateListener.java | 14 - src/common/ic2/api/IPaintableBlock.java | 21 - src/common/ic2/api/IReactor.java | 134 ----- src/common/ic2/api/IReactorChamber.java | 13 - src/common/ic2/api/IReactorComponent.java | 97 ---- src/common/ic2/api/ITerraformingBP.java | 35 -- src/common/ic2/api/IWrenchable.java | 50 -- src/common/ic2/api/Ic2Recipes.java | 358 ------------- src/common/ic2/api/Items.java | 401 --------------- src/common/ic2/api/NetworkHelper.java | 236 --------- src/common/ic2/api/TECrop.java | 161 ------ .../common/api/core/items/ICrowbar.java | 14 - .../turbine/TileEntitySteamPiston.java | 2 +- 38 files changed, 2 insertions(+), 3092 deletions(-) delete mode 100644 src/common/dan200/computer/api/IComputerAccess.java delete mode 100644 src/common/dan200/computer/api/IPeripheral.java delete mode 100644 src/common/ic2/api/BaseSeed.java delete mode 100644 src/common/ic2/api/CropCard.java delete mode 100644 src/common/ic2/api/Crops.java delete mode 100644 src/common/ic2/api/Direction.java delete mode 100644 src/common/ic2/api/ElectricItem.java delete mode 100644 src/common/ic2/api/EnergyNet.java delete mode 100644 src/common/ic2/api/ExplosionWhitelist.java delete mode 100644 src/common/ic2/api/IBoxable.java delete mode 100644 src/common/ic2/api/IElectricItem.java delete mode 100644 src/common/ic2/api/IEnergyAcceptor.java delete mode 100644 src/common/ic2/api/IEnergyConductor.java delete mode 100644 src/common/ic2/api/IEnergyEmitter.java delete mode 100644 src/common/ic2/api/IEnergySink.java delete mode 100644 src/common/ic2/api/IEnergySource.java delete mode 100644 src/common/ic2/api/IEnergyStorage.java delete mode 100644 src/common/ic2/api/IEnergyTile.java delete mode 100644 src/common/ic2/api/IMetalArmor.java delete mode 100644 src/common/ic2/api/INetworkClientTileEntityEventListener.java delete mode 100644 src/common/ic2/api/INetworkDataProvider.java delete mode 100644 src/common/ic2/api/INetworkItemEventListener.java delete mode 100644 src/common/ic2/api/INetworkTileEntityEventListener.java delete mode 100644 src/common/ic2/api/INetworkUpdateListener.java delete mode 100644 src/common/ic2/api/IPaintableBlock.java delete mode 100644 src/common/ic2/api/IReactor.java delete mode 100644 src/common/ic2/api/IReactorChamber.java delete mode 100644 src/common/ic2/api/IReactorComponent.java delete mode 100644 src/common/ic2/api/ITerraformingBP.java delete mode 100644 src/common/ic2/api/IWrenchable.java delete mode 100644 src/common/ic2/api/Ic2Recipes.java delete mode 100644 src/common/ic2/api/Items.java delete mode 100644 src/common/ic2/api/NetworkHelper.java delete mode 100644 src/common/ic2/api/TECrop.java delete mode 100644 src/common/railcraft/common/api/core/items/ICrowbar.java diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/src/common/basicpipes/conductors/ItemGuage.java index c1984a6f..dd14d18f 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/src/common/basicpipes/conductors/ItemGuage.java @@ -101,19 +101,6 @@ public class ItemGuage extends Item } return false; - } - public String getType(int type) - { - switch(type) - { - case 0: return "Steam"; - case 1: return "Water"; - case 2: return "Lava"; - case 3: return "Oil"; - case 4: return "Fuel"; - case 5: return "Air"; - default: return "???"; - } } public String getItemNameIS(ItemStack par1ItemStack) { diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/src/common/basicpipes/machines/TileEntityPump.java index fc0fdf5c..11f095ce 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/src/common/basicpipes/machines/TileEntityPump.java @@ -45,7 +45,7 @@ public class TileEntityPump extends TileEntityElectricityReceiver implements ILi { this.type = bellow; } - + //eStored+=200; if(!worldObj.isRemote) { if(bBlock == type.Still && this.eStored >= 200 && this.lStored < this.wMax) diff --git a/src/common/dan200/computer/api/IComputerAccess.java b/src/common/dan200/computer/api/IComputerAccess.java deleted file mode 100644 index 52a034e2..00000000 --- a/src/common/dan200/computer/api/IComputerAccess.java +++ /dev/null @@ -1,131 +0,0 @@ - -package dan200.computer.api; - -/** - * The interface passed to peripherals by computers or turtles, providing methods - * that they can call. This should not be implemented by your classes. Do not interact - * with computers except via this interface. - */ -public interface IComputerAccess -{ - /** - * Creates a new numbered directory in a subPath of the users game save, and return that number. To be used with mountSaveDir.
- * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new - * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. - * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory - * structure, and the value n could be saved out and used again in future to give the peripheral - * persistant storage. - * @param subPath A relative file path from the users world save, where the directory should be located. - * @return The numeric represenation of the name of the folder created. Will be positive. - * @see #mountSaveDir(String, String, int, boolean, long) - */ - public int createNewSaveDir( String subPath ); - - /** - * Equivalent to mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ) with no space limit. - * Mounts created with this method will have unlimited capacity. - * @see #mountSaveDir(String, String, int, boolean, long) - */ - public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly ); - - /** - * Mounts a directory into the computers file system, from a real directory a subPath of the users game save, - * with a numerical name. To be used with createNewSaveDir.
- * For example: n = createNewSaveDir( "computer/cdrom" ), will create a new - * numbered folder in the "computer/cdrom" subdirectory of the users save file, and return that number. - * mountSaveDir( "computer/rom", n ) could then be used to mount that folder onto the computers directory - * structure, and the value n can be saved out by the peripheral and used again, to give the peripheral - * persistant storage.
- * When a directory is mounted, it will appear in the computers file system, and the user will be - * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed). - * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. - * If this location already exists, a number will be appended until a free name is found, and the - * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to - * mount "cdrom", or a "cdrom" folder already exists. - * @param subPath The real relative file path from the users world save, where the directory to mount can be located. - * @param id The numerical name of the folder to mount from the subPath: ex: mountSaveDir( "cdrom", "computer/cdrom", 7 ) - * will mount the directory "computer/cdrom/7". Use createNewSaveDir to obtain a unique directory id. - * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. - * @param spaceLimit The size limit of the mount, in bytes. - * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the - * return value should be kept track of so the folder can be unmounted later. - * @see #createNewSaveDir(String) - * @see #mountFixedDir(String, String, boolean, long) - * @see #unmount(String) - */ - public String mountSaveDir( String desiredLocation, String subPath, int id, boolean readOnly, long spaceLimit ); - - /** - * Equivalent to mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ) with no space limit. - * Mounts created with this method will have unlimited capacity. - * @see #mountFixedDir(String, String, boolean, long) - */ - public String mountFixedDir( String desiredLocation, String path, boolean readOnly ); - - /** - * Mounts a directory into the computers file system, from a real directory in the Minecraft install folder.
- * For example: mountFixedDir( "stuff", "mods/mymod/lua/stuff", true ), will mount the "lua/stuff" folder from - * your mod's directory into the computers filesystem at the location "stuff", with readonly permission, giving the - * computer access to those files.
- * When a directory is mounted, it will appear in the computers file system, and the user will be - * able to use file operation to read from and write to the directory (unless readOnly, then only writes will be allowed).
- * mountFixedDir can also be used to mount files, for example: mountFixedDir( "rom/apis/myapi", "mods/mymod/lua/myapi.lua", true ) can - * be used to have the peripheral install an API onto the computer it attaches to. - * @param desiredLocation The desired location in the computers file system where you would like the directory to appear. - * If this location already exists, a number will be appended until a free name is found, and the - * actual location will be returned. eg: "cdrom" can become "cdrom2" if two peripherals attempt to - * mount "cdrom", or a "cdrom" folder already exists. - * @param subPath The real relative file path from the minecraft install root, where the directory to mount can be located. - * @param readOnly Whether the computer will be disallowed from making changes to the mounted directory and modifing or creating files therin. - * @param spaceLimit The size limit of the mount, in bytes. - * @return The location in the computers file system where the directory was mounted. This may differ from "desiredLocation", so the - * return value should be kept track of so the folder can be unmounted later. - * @see #mountSaveDir(String, String, int, boolean, long) - * @see #unmount(String) - */ - public String mountFixedDir( String desiredLocation, String path, boolean readOnly, long spaceLimit ); - - /** - * Unmounts a directory previously mounted onto the computers file system by mountSaveDir or mountFixedDir.
- * When a directory is unmounted, it will disappear from the computers file system, and the user will no longer be able to - * access it. All directories mounted by a mountFixedDir or mountSaveDir are automatically unmounted when the peripheral - * is attached if they have not been explicitly unmounted. - * @param location The desired location in the computers file system of the directory to unmount. - * This must be the location of a directory previously mounted by mountFixedDir() or mountSaveDir(), as - * indicated by their return value. - * @see #mountSaveDir(String, String, int, boolean, long) - * @see #mountFixedDir(String, String, boolean, long) - */ - public void unmount( String location ); - - /** - * Returns the numerical ID of this computer.
- * This is the same number obtained by calling os.getComputerID() or running the "id" program from lua, - * and is guarunteed unique. This number will be positive. - * @return The identifier. - */ - public int getID(); - - /** - * Equivalent to queueEvent( String event, Object[] arguments ) with an empty arguments array. - * @see #queueEvent(String, Object[]) - */ - public void queueEvent( String event ); - - /** - * Causes an event to be raised on this computer, which the computer can respond to by calling - * os.pullEvent(). This can be used to notify the computer when things happen in the world or to - * this peripheral. - * @param event A string identifying the type of event that has occurred, this will be - * returned as the first value from os.pullEvent(). It is recommended that you - * you choose a name that is unique, and recognisable as originating from your - * peripheral. eg: If your peripheral type is "button", a suitable event would be - * "button_pressed". - * @param arguments In addition to a name, you may pass an array of extra arguments to the event, that will - * be supplied as extra return values to os.pullEvent(). Objects in the array will be converted - * to lua data types in the same fashion as the return values of IPeripheral.callMethod().
- * You may supply null to indicate that no arguments are to be supplied. - * @see IPeripheral#callMethod - */ - public void queueEvent( String event, Object[] arguments ); -} diff --git a/src/common/dan200/computer/api/IPeripheral.java b/src/common/dan200/computer/api/IPeripheral.java deleted file mode 100644 index 8dfeb8dc..00000000 --- a/src/common/dan200/computer/api/IPeripheral.java +++ /dev/null @@ -1,103 +0,0 @@ - -package dan200.computer.api; - -/** - * The interface that defines a peripheral. This should be implemented by the - * TileEntity of any block that you wish to be interacted with by - * computer or turtle. - */ -public interface IPeripheral -{ - /** - * Should return a string that uniquely identifies this type of peripheral. - * This can be queried from lua by calling peripheral.getType() - * @return A string identifying the type of peripheral. - */ - public String getType(); - - /** - * Should return an array of strings that identify the methods that this - * peripheral exposes to Lua. This will be called once before each attachment, - * and should not change when called multiple times. - * @return An array of strings representing method names. - * @see #callMethod - */ - public String[] getMethodNames(); - - /** - * This is called when a lua program on an attached computer calls peripheral.call() with - * one of the methods exposed by getMethodNames().
- *
- * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe - * when interacting with minecraft objects. - * @param computer The interface to the computer that is making the call. Remember that multiple - * computers can be attached to a peripheral at once. - * @param method An integer identifying which of the methods from getMethodNames() the computer - * wishes to call. The integer indicates the index into the getMethodNames() table - * that corresponds to the string passed into peripheral.call() - * @param arguments An array of objects, representing the arguments passed into peripheral.call().
- * Lua values of type "string" will be represented by Object type String.
- * Lua values of type "number" will be represented by Object type Double.
- * Lua values of type "boolean" will be represented by Object type Boolean.
- * Lua values of any other type will be represented by a null object.
- * This array will be empty if no arguments are passed. - * @return An array of objects, representing values you wish to return to the lua program.
- * Integers, Doubles, Floats, Strings, Booleans and null be converted to their corresponding lua type.
- * All other types will be converted to nil.
- * You may return null to indicate no values should be returned. - * @throws Exception If you throw any exception from this function, a lua error will be raised with the - * same message as your exception. Use this to throw appropriate errors if the wrong - * arguments are supplied to your method. - * @see #getMethodNames - */ - public Object[] callMethod( IComputerAccess computer, int method, Object[] arguments ) throws Exception; - - /** - * Is called before the computer attempts to attach to the peripheral, and should return whether to allow - * the attachment. Use this to restrict the number of computers that can attach, or to limit attachments to - * certain world directions.
- * If true is returned, attach() will be called shortly afterwards, and the computer will be able to make method calls. - * If false is returned, attach() will not be called, and the peripheral will be invisible to the computer. - * @param side The world direction (0=bottom, 1=top, etc) that the computer lies relative to the peripheral. - * @return Whether to allow the attachment, as a boolean. - * @see #attach - */ - public boolean canAttachToSide( int side ); - - /** - * Is called when canAttachToSide has returned true, and a computer is attaching to the peripheral. - * This will occur when a peripheral is placed next to an active computer, when a computer is turned on next to a peripheral, - * or when a turtle travels into a square next to a peripheral. - * Between calls to attach() and detach(), the attached computer can make method calls on the peripheral using peripheral.call(). - * This method can be used to keep track of which computers are attached to the peripheral, or to take action when attachment - * occurs.
- *
- * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe - * when interacting with minecraft objects. - * @param computer The interface to the computer that is being attached. Remember that multiple - * computers can be attached to a peripheral at once. - * @param computerSide A string indicating which "side" of the computer the peripheral is attaching, - * relative to the computers orientation. This value will be one of "top", "bottom", - * "left", "right", "front" or "back". This can be used to uniquely identify the - * peripheral when raising events or returning values to the computer. - * @see #canAttachToSide - * @see #detach - */ - public void attach( IComputerAccess computer, String computerSide ); - - /** - * Is called when a computer is detaching from the peripheral. - * This will occur when a computer shuts down, when the peripheral is removed while attached to computers, - * or when a turtle moves away from a square attached to a peripheral. - * This method can be used to keep track of which computers are attached to the peripheral, or to take action when detachment - * occurs.
- *
- * Be aware that this will be called from the ComputerCraft Lua thread, and must be thread-safe - * when interacting with minecraft objects. - * @param computer The interface to the computer that is being detached. Remember that multiple - * computers can be attached to a peripheral at once. - * @see #canAttachToSide - * @see #detach - */ - public void detach( IComputerAccess computer ); -} diff --git a/src/common/ic2/api/BaseSeed.java b/src/common/ic2/api/BaseSeed.java deleted file mode 100644 index 6f4e57a5..00000000 --- a/src/common/ic2/api/BaseSeed.java +++ /dev/null @@ -1,56 +0,0 @@ -package ic2.api; - -/** - * Base agriculture seed. Used to determine the state of a plant once it is planted from an item. - */ -public class BaseSeed { - /** - * Plant ID. - */ - public int id; - - /** - * Plant size. - */ - public int size; - - /** - * Plant growth stat. - */ - public int statGrowth; - - /** - * Plant gain stat. - */ - public int statGain; - - /** - * Plant resistance stat. - */ - public int statResistance; - - /** - * For internal usage only. - */ - public int stackSize; - - /** - * Create a BaseSeed object. - * - * @param id plant ID - * @param size plant size - * @param statGrowth plant growth stat - * @param statGain plant gain stat - * @param statResistance plant resistance stat - * @param stackSize for internal usage only - */ - public BaseSeed(int id, int size, int statGrowth, int statGain, int statResistance, int stackSize) { - super(); - this.id = id; - this.size = size; - this.statGrowth = statGrowth; - this.statGain = statGain; - this.statResistance = statResistance; - this.stackSize = stackSize; - } -} diff --git a/src/common/ic2/api/CropCard.java b/src/common/ic2/api/CropCard.java deleted file mode 100644 index 79d1f3d8..00000000 --- a/src/common/ic2/api/CropCard.java +++ /dev/null @@ -1,475 +0,0 @@ -package ic2.api; - -import java.util.HashMap; - -import net.minecraft.src.Entity; -import net.minecraft.src.EntityLiving; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; - -/** - * Base agriculture crop. - * - * Any crop extending this can be registered using registerCrop to be added into the game. - */ -public abstract class CropCard -{ - /** - * Plant name. Will be displayed to the player. - * - * @return Plant name - */ - public abstract String name(); - - /** - * Your name here, will be shown in "Discovered by:" when analyzing seeds. - * - * @return Your name - */ - public String discoveredBy() {return "Alblaka";} - - /** - * Description of your plant. Keep it short, a few characters per line for up to two lines. - * Default is showing attributes of your plant, 2 per line. - * - * @param i line to get, starting from 0 - * @return The line - */ - public String desc(int i) - { - String[] att = attributes(); - if (att == null || att.length==0) return ""; - if (i == 0) - { - String s = att[0]; - if (att.length >= 2) - { - s+=", "+att[1]; - if (att.length >= 3) s+=","; - } - return s; - } - else - { - if (att.length < 3) return ""; - String s = att[2]; - if (att.length >= 4) s+=", "+att[3]; - return s; - } - } - - /** - * Tier of the plant. Ranges from 1 to 16, 0 is Weed. - * Valuable and powerful crops have higher tiers, useless and weak ones have lower tiers. - * - * @return Tier - */ - public abstract int tier(); - - /** - * Describe the plant through a set of stats, influencing breeding. - * Plants sharing stats and attributes will tend to cross-breed more often. - * - * Stats: - * - 0: Chemistry (Industrial uses based on chemical plant components) - * - 1: Consumable (Food, potion ingredients, stuff meant to be eaten or similarly used) - * - 2: Defensive (Plants with defense capabilities (damaging, explosive, chemical) or special abilities in general) - * - 3: Colorful (How colorful/aesthetically/beautiful is the plant, like dye-plants or plants without actual effects) - * - 4: Weed (Is this plant weed-like and rather unwanted/quick-spreading? Rare super-breed plants should have low values here) - * - * @param n index of the requested stat - * @return The requested value of the stats - */ - public abstract int stat(int n); - - /** - * Additional attributes of the plant, also influencing breeding. - * Plants sharing stats and attributes will tend to cross-breed more often. - * - * @return Attributes as an array of strings - */ - public abstract String[] attributes(); - - /** - * Sprite index the crop is meant to be rendered with. - * - * @param crop reference to TECrop - * @return 0-255, representing the sprite index on the crop's spritesheet. - */ - public abstract int getSpriteIndex(TECrop crop); - - /** - * Get the crop's spritesheet. - * Per default crops_0.png of ic2-sprites - * @return Texture file path - */ - public String getTextureFile() { - return "/ic2/sprites/crops_0.png"; - } - - /** - * Amount of growth points needed to increase the plant's size. - * Default is 200 * tier. - */ - public int growthDuration(TECrop crop) - { - return tier()*200; - } - - /** - * Check whether the plant can grow further. - * - * Consider: - * - Humidity, nutrients and air quality - * - Current size - * - Light level - * - Special biomes or conditions, accessible through crop.worldObj - * - * This method will be called upon empty upgraded crops to check whether a neighboring plant can cross onto it! Don't check if the size is greater than 0 and if the ID is real. - * - * @param crop reference to TECrop - * @return Whether the crop can grow - */ - public abstract boolean canGrow(TECrop crop); - - /** - * Calculate the influence for the plant to grow based on humidity, nutrients and air. - * Normal behavior is rating the three stats "normal", with each of them ranging from 0-30. - * Basic rule: Assume everything returns 10. All together must equal 30. Add the factors to your likings, for example (humidity*0.7)+(nutrients*0.9)+(air*1.4) - * - * Default is humidity + nutrients + air (no factors). - * - * @param crop reference to TECrop - * @param humidity ground humidity, influenced by hydration - * @param nutrients nutrient quality in ground, based on fertilizers - * @param air air quality, influences by open gardens and less crops surrounding this one - * @return 0-30 - */ - public int weightInfluences(TECrop crop, float humidity, float nutrients, float air) - { - return (int) (humidity+nutrients+air); - } - - /** - * Used to determine whether the plant can crossbreed with another crop. - * Default is allow crossbreeding if the size is greater or equal than 3. - * - * @param crop crop to crossbreed with - */ - public boolean canCross(TECrop crop) - { - return crop.size >= 3; - } - - - /** - * Called when the plant is rightclicked by a player. - * Default action is harvesting. - * - * @param crop reference to TECrop - * @param player player rightclicking the crop - * @return Whether the plant has changed - */ - public boolean rightclick(TECrop crop, EntityPlayer player) - { - return crop.harvest(true); - } - - /** - * Check whether the crop can be harvested. - * - * @param crop reference to TECrop - * @return Whether the crop can be harvested in its current state. - */ - public abstract boolean canBeHarvested(TECrop crop); - - /** - * Base chance for dropping the plant's gains, specify values greater than 1 for multiple drops. - * Default is 0.95^tier. - * - * @return Chance to drop the gains - */ - public float dropGainChance() - { - float base = 1F; - for (int i = 0; i < tier(); i++) {base*=0.95;} - return base; - } - - /** - * Item obtained from harvesting the plant. - * - * @param crop reference to TECrop - * @return Item obtained - */ - public abstract ItemStack getGain(TECrop crop); - - /** - * Get the size of the plant after harvesting. - * Default is 1. - * - * @param crop reference to TECrop - * @return Plant size after harvesting - */ - public byte getSizeAfterHarvest(TECrop crop) {return 1;} - - - /** - * Called when the plant is leftclicked by a player. - * Default action is picking the plant. - * - * @param crop reference to TECrop - * @param player player leftclicked the crop - * @return Whether the plant has changed - */ - public boolean leftclick(TECrop crop, EntityPlayer player) - { - return crop.pick(true); - } - - /** - * Base chance for dropping seeds when the plant is picked. - * Default is 0.5*0.8^tier with a bigger chance for sizes greater than 2 and absolutely no chance for size 0. - * - * @param crop reference to TECrop - * @return Chance to drop the seeds - */ - public float dropSeedChance(TECrop crop) - { - if (crop.size == 1) return 0; - float base = 0.5F; - if (crop.size == 2) base/=2F; - for (int i = 0; i < tier(); i++) {base*=0.8;} - return base; - } - - /** - * Obtain seeds dropped when the plant is picked. - * Multiple drops of the returned ItemStack can occur. - * Default action is generating a seed from this crop. - * - * @param crop reference to TECrop - * @return Seeds - */ - public ItemStack getSeeds(TECrop crop) - { - return crop.generateSeeds(crop.id, crop.statGrowth, crop.statGain, crop.statResistance, crop.scanLevel); - } - - /** - * Called when a neighbor block to the crop has changed. - * - * @param crop reference to TECrop - */ - public void onNeighbourChange(TECrop crop){} - - /** - * Check if the crop should emit redstone. - * - * @return Whether the crop should emit redstone - */ - public boolean emitRedstone(TECrop crop){return false;} - - /** - * Called when the crop is destroyed. - * - * @param crop reference to TECrop - */ - public void onBlockDestroyed(TECrop crop){} - - /** - * Get the light value emitted by the plant. - * - * @param crop reference to TECrop - * @return Light value emitted - */ - public int getEmittedLight(TECrop crop) {return 0;} - - /** - * Default is true if the entity is an EntityLiving in jumping or sprinting state. - * - * @param crop reference to TECrop - * @param entity entity colliding - * @return Whether trampling calculation should happen, return false if the plant is no longer valid. - */ - public boolean onEntityCollision(TECrop crop, Entity entity) - { - if (entity instanceof EntityLiving) - { - return ((EntityLiving)entity).isSprinting(); - } - return false; - } - - - /** - * Called every time the crop ticks. - * Should be called every 256 ticks or around 13 seconds. - * - * @param crop reference to TECrop - */ - public void tick(TECrop crop) {} - - /** - * Check whether this plant spreads weed to surrounding tiles. - * Default is true if the plant has a high growth stat (or is weeds) and size greater or equal than 2. - * - * @param crop reference to TECrop - * @return Whether the plant spreads weed - */ - public boolean isWeed(TECrop crop) - { - return crop.size>=2 && (crop.id==0 || crop.statGrowth>=24); - } - - - /** - * Get this plant's ID. - * - * @return ID of this CropCard or -1 if it's not registered - */ - public final int getId() - { - for (int i = 0; i < cropCardList.length; i++) - { - if (this == cropCardList[i]) - { - return i; - } - } - return -1; - } - - private static final CropCard[] cropCardList = new CropCard[256]; - - /** - * Get the size of the plant list. - * - * @return Plant list size - */ - public static int cropCardListLength() {return cropCardList.length;} - - /** - * Return the CropCard assigned to the given ID. - * If the ID is out of bounds, weed should be returned. If the ID is not registered, weed should be returned and a console print will notify. - * - * @param id plant ID - * @return Plant class - */ - public static final CropCard getCrop(int id) - { - if (id < 0 || id >= cropCardList.length) - {// Out of bounds - return cropCardList[0]; - } - if (cropCardList[id]==null) - {// Out of bounds - System.out.println("[IndustrialCraft] Something tried to access non-existant cropID #"+id+"!!!"); - return cropCardList[0]; - } - - return cropCardList[id]; - } - - /** - * Check whether the specified plant ID is already assigned. - * @param id ID to be checked - * @return true if the the given id is inbounds and the registered slot is not null - */ - public static final boolean idExists(int id) - { - return !(id < 0 || id >= cropCardList.length || cropCardList[id]==null); - } - - /** - * Auto-assign an ID to a plant and register it. - * Usage of this method is not recommended! Other plants could take your IDs and cause your plants to turn into other plants. - * - * @param crop plant to register - * @return The ID assigned to the plant - */ - public static final short registerCrop(CropCard crop) - { - for (short x = 0; x < cropCardList.length; x++) - {// Iterate through list - if (cropCardList[x]==null) - {// Found empty slot, add crop here - cropCardList[x]=crop; - nameReference.addLocal("item.cropSeed"+x+".name", crop.name()+" Seeds"); - return x; - } - } - //No free slot avaible - return -1; - } - - /** - * Attempt to register a plant to an ID. - * If the ID is taken, the crop will not be registered and a console print will notify the user. - * - * @param crop plant to register - * @param i ID to register the plant to - * @return Whether the crop was registered - */ - public static final boolean registerCrop(CropCard crop, int i) - { - if (i < 0 || i >= cropCardList.length) - {// Out of bounds - return false; - } - if (cropCardList[i]==null) - { - cropCardList[i]=crop; - nameReference.addLocal("item.cropSeed"+i+".name", crop.name()+" Seeds"); - return true; - } - System.out.println("[IndustrialCraft] Cannot add crop:"+crop.name()+" on ID #"+i+", slot already occupied by crop:"+cropCardList[i].name()); - return false; - } - - /** - * For internal usage only. - */ - public static TECrop nameReference; - - private static HashMap baseseeds = new HashMap(); - - /** - * Registers a base seed, an item used to plant a crop. - * - * @param stack item - * @param id plant ID - * @param size initial size - * @param growth initial growth stat - * @param gain initial gain stat - * @param resistance initial resistance stat - * @return True if successful - */ - public static boolean registerBaseSeed(ItemStack stack, int id, int size, int growth, int gain, int resistance) - { - for (ItemStack key : baseseeds.keySet()) - if (key.itemID==stack.itemID && key.getItemDamage()==stack.getItemDamage()) return false; - - baseseeds.put(stack, new BaseSeed(id, size, growth, gain, resistance, stack.stackSize)); - return true; - } - - /** - * Finds a base seed from the given item. - * - * @return Base seed or null if none found - */ - public static BaseSeed getBaseSeed(ItemStack stack) - { - if (stack == null) return null; - for (ItemStack key : baseseeds.keySet()) - { - if (key.itemID == stack.itemID && - (key.getItemDamage() == -1 || key.getItemDamage() == stack.getItemDamage())) - { - return baseseeds.get(key); - } - } - return null; - } -} diff --git a/src/common/ic2/api/Crops.java b/src/common/ic2/api/Crops.java deleted file mode 100644 index e2fbe1aa..00000000 --- a/src/common/ic2/api/Crops.java +++ /dev/null @@ -1,47 +0,0 @@ -package ic2.api; - -import java.util.HashMap; - -import net.minecraft.src.BiomeGenBase; - -/** - * General management of the crop system. All crop management methods will be moved here in the 2.00 update. - */ -public class Crops { - private static final HashMap humidityBiomeBonus = new HashMap(); - private static final HashMap nutrientBiomeBonus = new HashMap(); - - /** - * Add a crop humidity and nutrient biome bonus. - * - * 0 indicates no bonus and negative values indicate a penalty. - * - * @param biome Biome to apply the bonus in - * @param humidityBonus Humidity stat bonus - * @param nutrientsBonus Nutrient stat bonus - */ - public static void addBiomeBonus(BiomeGenBase biome, int humidityBonus, int nutrientsBonus) { - humidityBiomeBonus.put(biome, humidityBonus); - nutrientBiomeBonus.put(biome, nutrientsBonus); - } - - /** - * Get the humidity bonus for a biome. - * - * @param biome biome to check - * @return Humidity bonus or 0 if none - */ - public static int getHumidityBiomeBonus(BiomeGenBase biome) { - return humidityBiomeBonus.containsKey(biome) ? humidityBiomeBonus.get(biome) : 0; - } - - /** - * Get the nutrient bonus for a biome. - * - * @param biome biome to check - * @return Nutrient bonus or 0 if none - */ - public static int getNutrientBiomeBonus(BiomeGenBase biome) { - return nutrientBiomeBonus.containsKey(biome) ? nutrientBiomeBonus.get(biome) : 0; - } -} diff --git a/src/common/ic2/api/Direction.java b/src/common/ic2/api/Direction.java deleted file mode 100644 index 52381c16..00000000 --- a/src/common/ic2/api/Direction.java +++ /dev/null @@ -1,106 +0,0 @@ -package ic2.api; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; - -/** - * Represents the 6 possible directions along the axis of a block. - */ -public enum Direction { - /** - * -X - */ - XN(0), - /** - * +X - */ - XP(1), - - /** - * -Y - */ - YN(2), //MC-Code starts with 0 here - /** - * +Y - */ - YP(3), // 1... - - /** - * -Z - */ - ZN(4), - /** - * +Z - */ - ZP(5); - - Direction(int dir) { - this.dir = dir; - } - - /*public CoordinateTuple ApplyToCoordinates(CoordinateTuple coordinates) { - CoordinateTuple ret = new CoordinateTuple(coordinates); - - ret.coords[dir/2] += GetSign(); - - return ret; - }*/ - - /** - * Get the tile entity next to a tile entity following this direction. - * - * @param tileEntity tile entity to check - * @return Adjacent tile entity or null if none exists - */ - public TileEntity applyToTileEntity(TileEntity tileEntity) { - int coords[] = { tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord }; - - coords[dir/2] += getSign(); - - if (tileEntity.worldObj != null && tileEntity.worldObj.blockExists(coords[0], coords[1], coords[2])) { - return tileEntity.worldObj.getBlockTileEntity(coords[0], coords[1], coords[2]); - } else { - return null; - } - } - - /** - * Get the inverse of this direction (XN -> XP, XP -> XN, etc.) - * - * @return Inverse direction - */ - public Direction getInverse() { - int inverseDir = dir - getSign(); - - for (Direction direction: Direction.values()) { - if (direction.dir == inverseDir) return direction; - } - - return this; - } - - /** - * Convert this direction to a Minecraft side value. - * - * @return Minecraft side value - */ - public int toSideValue() { - return (dir + 4) % 6; - } - - /** - * Determine direction sign (N for negative or P for positive). - * - * @return -1 if the direction is negative, +1 if the direction is positive - */ - private int getSign() { - return (dir % 2) * 2 - 1; - } - - public ForgeDirection toForgeDirection() { - return ForgeDirection.getOrientation(toSideValue()); - } - - private int dir; -} - diff --git a/src/common/ic2/api/ElectricItem.java b/src/common/ic2/api/ElectricItem.java deleted file mode 100644 index 3f4a4972..00000000 --- a/src/common/ic2/api/ElectricItem.java +++ /dev/null @@ -1,128 +0,0 @@ -package ic2.api; - -import java.lang.reflect.Method; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; - -/** - * Allows for charging, discharging and using electric items (IElectricItem). - * - * The charge or remaining capacity of an item can be determined by calling charge/discharge with - * ignoreTransferLimit and simulate set to true. - */ -public final class ElectricItem { - /** - * Charge an item with a specified amount of energy - * - * @param itemStack electric item's stack - * @param amount amount of energy to charge in EU - * @param tier tier of the charging device, has to be at least as high as the item to charge - * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() - * @param simulate don't actually change the item, just determine the return value - * @return Energy transferred into the electric item - */ - public static int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - try { - if (ElectricItem_charge == null) ElectricItem_charge = Class.forName(getPackage() + ".common.ElectricItem").getMethod("charge", ItemStack.class, Integer.TYPE, Integer.TYPE, Boolean.TYPE, Boolean.TYPE); - - return (Integer) ElectricItem_charge.invoke(null, itemStack, amount, tier, ignoreTransferLimit, simulate); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Discharge an item by a specified amount of energy - * - * @param itemStack electric item's stack - * @param amount amount of energy to charge in EU - * @param tier tier of the discharging device, has to be at least as high as the item to discharge - * @param ignoreTransferLimit ignore the transfer limit specified by getTransferLimit() - * @param simulate don't actually discharge the item, just determine the return value - * @return Energy retrieved from the electric item - */ - public static int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - try { - if (ElectricItem_discharge == null) ElectricItem_discharge = Class.forName(getPackage() + ".common.ElectricItem").getMethod("discharge", ItemStack.class, Integer.TYPE, Integer.TYPE, Boolean.TYPE, Boolean.TYPE); - - return (Integer) ElectricItem_discharge.invoke(null, itemStack, amount, tier, ignoreTransferLimit, simulate); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Determine if the specified electric item has at least a specific amount of EU. - * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. - * BatPacks are not taken into account. - * - * @param itemStack electric item's stack - * @param amount minimum amount of energy required - * @return true if there's enough energy - */ - public static boolean canUse(ItemStack itemStack, int amount) { - try { - if (ElectricItem_canUse == null) ElectricItem_canUse = Class.forName(getPackage() + ".common.ElectricItem").getMethod("canUse", ItemStack.class, Integer.TYPE); - - return (Boolean) ElectricItem_canUse.invoke(null, itemStack, amount); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Try to retrieve a specific amount of energy from an Item, and if applicable, a BatPack. - * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. - * - * @param itemStack electric item's stack - * @param amount amount of energy to discharge in EU - * @param player player holding the item - * @return true if the operation succeeded - */ - public static boolean use(ItemStack itemStack, int amount, EntityPlayer player) { - try { - if (ElectricItem_use == null) ElectricItem_use = Class.forName(getPackage() + ".common.ElectricItem").getMethod("use", ItemStack.class, Integer.TYPE, EntityPlayer.class); - - return (Boolean) ElectricItem_use.invoke(null, itemStack, amount, player); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Charge an item from the BatPack a player is wearing. - * This is supposed to be used in the item code during operation, for example if you want to implement your own electric item. - * use() already contains this functionality. - * - * @param itemStack electric item's stack - * @param player player holding the item - */ - public static void chargeFromArmor(ItemStack itemStack, EntityPlayer player) { - try { - if (ElectricItem_chargeFromArmor == null) ElectricItem_chargeFromArmor = Class.forName(getPackage() + ".common.ElectricItem").getMethod("chargeFromArmor", ItemStack.class, EntityPlayer.class); - - ElectricItem_chargeFromArmor.invoke(null, itemStack, player); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Get the base IC2 package name, used internally. - * - * @return IC2 package name, if unable to be determined defaults to ic2 - */ - private static String getPackage() { - Package pkg = ElectricItem.class.getPackage(); - if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); - else return "ic2"; - } - - private static Method ElectricItem_charge; - private static Method ElectricItem_discharge; - private static Method ElectricItem_canUse; - private static Method ElectricItem_use; - private static Method ElectricItem_chargeFromArmor; -} - diff --git a/src/common/ic2/api/EnergyNet.java b/src/common/ic2/api/EnergyNet.java deleted file mode 100644 index 2e98537e..00000000 --- a/src/common/ic2/api/EnergyNet.java +++ /dev/null @@ -1,119 +0,0 @@ -package ic2.api; - -import java.lang.reflect.Method; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -/** - * Provides access to the energy network. - */ -public final class EnergyNet { - /** - * Gets the EnergyNet instance for the specified world. - * - * @param world world - * @return EnergyNet instance for the world - */ - public static EnergyNet getForWorld(World world) { - try { - if (EnergyNet_getForWorld == null) EnergyNet_getForWorld = Class.forName(getPackage() + ".common.EnergyNet").getMethod("getForWorld", World.class); - - return new EnergyNet(EnergyNet_getForWorld.invoke(null, world)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - private EnergyNet(Object energyNetInstance) { - this.energyNetInstance = energyNetInstance; - } - - /** - * Add a tile entity to the energy network. - * The tile entity has to be valid and initialized. - * - * @param addedTileEntity tile entity to add - */ - public void addTileEntity(TileEntity addedTileEntity) { - try { - if (EnergyNet_addTileEntity == null) EnergyNet_addTileEntity = Class.forName(getPackage() + ".common.EnergyNet").getMethod("addTileEntity", TileEntity.class); - - EnergyNet_addTileEntity.invoke(energyNetInstance, addedTileEntity); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Removes a tile entity from the energy network. - * The tile entity has to be still valid. - * - * @param removedTileEntity tile entity to remove - */ - public void removeTileEntity(TileEntity removedTileEntity) { - try { - if (EnergyNet_removeTileEntity == null) EnergyNet_removeTileEntity = Class.forName(getPackage() + ".common.EnergyNet").getMethod("removeTileEntity", TileEntity.class); - - EnergyNet_removeTileEntity.invoke(energyNetInstance, removedTileEntity); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Emit energy from an energy source to the energy network. - * - * @param energySource energy source to emit energy from - * @param amount amount of energy to emit in EU - * @return Leftover (unused) power - */ - public int emitEnergyFrom(IEnergySource energySource, int amount) { - try { - if (EnergyNet_emitEnergyFrom == null) EnergyNet_emitEnergyFrom = Class.forName(getPackage() + ".common.EnergyNet").getMethod("emitEnergyFrom", IEnergySource.class, Integer.TYPE); - - return ((Integer) EnergyNet_emitEnergyFrom.invoke(energyNetInstance, energySource, amount)).intValue(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Get the amount of energy currently being conducted by a conductor. - * Call this twice with a delay to get the average conducted power by doing (call2 - call1) / 2. - * - * @param tileEntity conductor - */ - public long getTotalEnergyConducted(TileEntity tileEntity) { - try { - if (EnergyNet_getTotalEnergyConducted == null) EnergyNet_getTotalEnergyConducted = Class.forName(getPackage() + ".common.EnergyNet").getMethod("getTotalEnergyConducted", TileEntity.class); - - return ((Long) EnergyNet_getTotalEnergyConducted.invoke(energyNetInstance, tileEntity)).longValue(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Get the base IC2 package name, used internally. - * - * @return IC2 package name, if unable to be determined defaults to ic2 - */ - private static String getPackage() { - Package pkg = EnergyNet.class.getPackage(); - if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); - else return "ic2"; - } - - /** - * Instance of the energy network. - */ - Object energyNetInstance; - - private static Method EnergyNet_getForWorld; - private static Method EnergyNet_addTileEntity; - private static Method EnergyNet_removeTileEntity; - private static Method EnergyNet_emitEnergyFrom; - private static Method EnergyNet_getTotalEnergyConducted; -} - diff --git a/src/common/ic2/api/ExplosionWhitelist.java b/src/common/ic2/api/ExplosionWhitelist.java deleted file mode 100644 index d36ccc36..00000000 --- a/src/common/ic2/api/ExplosionWhitelist.java +++ /dev/null @@ -1,46 +0,0 @@ -package ic2.api; - -import java.util.*; - -import net.minecraft.src.Block; - -/** - * Blocks on this whitelist will not resist an explosion but won't be destroyed. - * - * The explosion code by default ignores blocks which absorb more than 1000 explosion power to - * prevent abusing personal safes, Trade-O-Mats and other blocks to serve as a cheap and - * invulnerable reactor chambers. Said blocks will not shield the explosion and won't get - * destroyed. - */ -public final class ExplosionWhitelist { - /** - * Add a block to the whitelist. - * - * @param block block to add - */ - public static void addWhitelistedBlock(Block block) { - whitelist.add(block); - } - - /** - * Remove a block from the whitelist. - * - * @param block block to remove - */ - public static void removeWhitelistedBlock(Block block) { - whitelist.remove(block); - } - - /** - * Check if a block is on the whitelist. - * - * @param block block to check if whitelisted - * @return Whether the block is whitelisted - */ - public static boolean isBlockWhitelisted(Block block) { - return whitelist.contains(block); - } - - private static Set whitelist = new HashSet(); -} - diff --git a/src/common/ic2/api/IBoxable.java b/src/common/ic2/api/IBoxable.java deleted file mode 100644 index 24dc5716..00000000 --- a/src/common/ic2/api/IBoxable.java +++ /dev/null @@ -1,18 +0,0 @@ -package ic2.api; - -import net.minecraft.src.ItemStack; - -/** - * Provides custom toolbox storage behavior for items. - * - * The normal condition for storing an item in a toolbox is having a maximum stack size of 1. - */ -public interface IBoxable { - /** - * Determine whether an item can be stored in a toolbox or not. - * - * @param itemstack item to be stored - * @return Whether to store the item in the toolbox or not - */ - public abstract boolean canBeStoredInToolbox(ItemStack itemstack); -} diff --git a/src/common/ic2/api/IElectricItem.java b/src/common/ic2/api/IElectricItem.java deleted file mode 100644 index 20a19e47..00000000 --- a/src/common/ic2/api/IElectricItem.java +++ /dev/null @@ -1,52 +0,0 @@ -package ic2.api; - -/** - * Provides the ability to store energy on the implementing item. - * - * The item should have a maximum damage of 13. - */ -public interface IElectricItem { - /** - * Determine if the item can be used in a machine to supply energy. - * - * @return Whether the item can supply energy - */ - boolean canProvideEnergy(); - - /** - * Get the item ID to use for a charge energy greater than 0. - * - * @return Item ID to use - */ - int getChargedItemId(); - - /** - * Get the item ID to use for a charge energy of 0. - * - * @return Item ID to use - */ - int getEmptyItemId(); - - /** - * Get the item's maximum charge energy in EU. - * - * @return Maximum charge energy - */ - int getMaxCharge(); - - /** - * Get the item's tier, lower tiers can't send energy to higher ones. - * Batteries are Tier 1, Energy Crystals are Tier 2, Lapotron Crystals are Tier 3. - * - * @return Item's tier - */ - int getTier(); - - /** - * Get the item's transfer limit in EU per transfer operation. - * - * @return Transfer limit - */ - int getTransferLimit(); -} - diff --git a/src/common/ic2/api/IEnergyAcceptor.java b/src/common/ic2/api/IEnergyAcceptor.java deleted file mode 100644 index 4b001923..00000000 --- a/src/common/ic2/api/IEnergyAcceptor.java +++ /dev/null @@ -1,20 +0,0 @@ -package ic2.api; - -import net.minecraft.src.TileEntity; - -/** - * For internal usage only. - * - * @see IEnergySink - * @see IEnergyConductor - */ -public interface IEnergyAcceptor extends IEnergyTile { - /** - * Determine if this acceptor can accept current from an adjacent emitter in a direction. - * - * @param emitter energy emitter - * @param direction direction the energy is being received from - */ - boolean acceptsEnergyFrom(TileEntity emitter, Direction direction); -} - diff --git a/src/common/ic2/api/IEnergyConductor.java b/src/common/ic2/api/IEnergyConductor.java deleted file mode 100644 index 3d755404..00000000 --- a/src/common/ic2/api/IEnergyConductor.java +++ /dev/null @@ -1,51 +0,0 @@ -package ic2.api; - -/** - * Tile entities which conduct energy pulses without buffering (mostly cables) have to implement this - * interface. - */ -public interface IEnergyConductor extends IEnergyAcceptor, IEnergyEmitter { - /** - * Energy loss for the conductor in EU per block. - * - * @return Energy loss - */ - double getConductionLoss(); - - /** - * Amount of energy the insulation will handle before shocking nearby players and mobs. - * - * @return Insulation energy absorption in EU - */ - int getInsulationEnergyAbsorption(); - - /** - * Amount of energy the insulation will handle before it is destroyed. - * Ensure that this value is greater than the insulation energy absorption + 64. - * - * @return Insulation-destroying energy in EU - */ - int getInsulationBreakdownEnergy(); - - /** - * Amount of energy the conductor will handle before it melts. - * - * @return Conductor-destroying energy in EU - */ - int getConductorBreakdownEnergy(); - - /** - * Remove the conductor's insulation if the insulation breakdown energy was exceeded. - * - * @see #getInsulationBreakdownEnergy() - */ - void removeInsulation(); - - /** - * Remove the conductor if the conductor breakdown energy was exceeded. - * - * @see #getConductorBreakdownEnergy() - */ - void removeConductor(); -} - diff --git a/src/common/ic2/api/IEnergyEmitter.java b/src/common/ic2/api/IEnergyEmitter.java deleted file mode 100644 index 94699b9a..00000000 --- a/src/common/ic2/api/IEnergyEmitter.java +++ /dev/null @@ -1,21 +0,0 @@ -package ic2.api; - -import net.minecraft.src.TileEntity; - -/** - * For internal usage only. - * - * @see IEnergySource - * @see IEnergyConductor - */ -public interface IEnergyEmitter extends IEnergyTile { - /** - * Determine if this emitter can emit energy to an adjacent receiver. - * - * @param receiver receiver - * @param direction direction the receiver is from the emitter - * @return Whether energy should be emitted - */ - boolean emitsEnergyTo(TileEntity receiver, Direction direction); -} - diff --git a/src/common/ic2/api/IEnergySink.java b/src/common/ic2/api/IEnergySink.java deleted file mode 100644 index a0ed9a55..00000000 --- a/src/common/ic2/api/IEnergySink.java +++ /dev/null @@ -1,23 +0,0 @@ -package ic2.api; - -/** - * Allows a tile entity (mostly a machine) to receive energy. - */ -public interface IEnergySink extends IEnergyAcceptor { - /** - * Determine whether the sink requires energy. - * - * @return Whether the sink is requiring energy - */ - boolean demandsEnergy(); - - /** - * Transfer energy to the sink. - * - * @param directionFrom direction from which the energy comes from - * @param amount energy to be transferred - * @return Energy not consumed (leftover) - */ - int injectEnergy(Direction directionFrom, int amount); -} - diff --git a/src/common/ic2/api/IEnergySource.java b/src/common/ic2/api/IEnergySource.java deleted file mode 100644 index 39d14a20..00000000 --- a/src/common/ic2/api/IEnergySource.java +++ /dev/null @@ -1,15 +0,0 @@ -package ic2.api; - -/** - * Allows a tile entity (mostly a generator) to emit energy. - */ -public interface IEnergySource extends IEnergyEmitter { - /** - * Maximum energy output provided by the source. - * If unsure, use Integer.MAX_VALUE. - * - * @return Maximum energy output - */ - int getMaxEnergyOutput(); -} - diff --git a/src/common/ic2/api/IEnergyStorage.java b/src/common/ic2/api/IEnergyStorage.java deleted file mode 100644 index a89bd7dc..00000000 --- a/src/common/ic2/api/IEnergyStorage.java +++ /dev/null @@ -1,27 +0,0 @@ -package ic2.api; - -/** - * Interface implemented by the tile entity of energy storage blocks. - */ -public interface IEnergyStorage { - /** - * Get the amount of energy currently stored in the block. - * - * @return Energy stored in the block - */ - public int getStored(); - - /** - * Get the maximum amount of energy the block can store. - * - * @return Maximum energy stored - */ - public int getCapacity(); - - /** - * Get the block's energy output. - * - * @return Energy output in EU/t - */ - public int getOutput(); -} diff --git a/src/common/ic2/api/IEnergyTile.java b/src/common/ic2/api/IEnergyTile.java deleted file mode 100644 index 10445432..00000000 --- a/src/common/ic2/api/IEnergyTile.java +++ /dev/null @@ -1,18 +0,0 @@ -package ic2.api; - -/** - * For internal usage only. - * - * @see IEnergySink - * @see IEnergySource - * @see IEnergyConductor - */ -public interface IEnergyTile { - /** - * Determine if this tile entity has been added to the energy network - * - * @return Whether the tile entity has been added - */ - boolean isAddedToEnergyNet(); -} - diff --git a/src/common/ic2/api/IMetalArmor.java b/src/common/ic2/api/IMetalArmor.java deleted file mode 100644 index fe8db2ed..00000000 --- a/src/common/ic2/api/IMetalArmor.java +++ /dev/null @@ -1,20 +0,0 @@ -package ic2.api; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; - -/** - * Armor items implementing this can be considered metal armor. - * - * Currently used for determining which boots can be used to slide up a magnetic pole. - */ -public interface IMetalArmor { - /** - * Determine if the given armor piece is metal armor. - * - * @param itemstack Armor piece as worn by the player - * @param player The player - * @return Whether the armor piece is metal armor - */ - public boolean isMetalArmor(ItemStack itemstack, EntityPlayer player); -} diff --git a/src/common/ic2/api/INetworkClientTileEntityEventListener.java b/src/common/ic2/api/INetworkClientTileEntityEventListener.java deleted file mode 100644 index 594f1d7f..00000000 --- a/src/common/ic2/api/INetworkClientTileEntityEventListener.java +++ /dev/null @@ -1,17 +0,0 @@ -package ic2.api; - -import net.minecraft.src.EntityPlayer; - -/** - * Allows a tile entity to receive network events received from clients. - */ -public interface INetworkClientTileEntityEventListener { - /** - * Called when a network event is received. - * - * @param player client which sent the event - * @param event event ID - */ - void onNetworkEvent(EntityPlayer player, int event); -} - diff --git a/src/common/ic2/api/INetworkDataProvider.java b/src/common/ic2/api/INetworkDataProvider.java deleted file mode 100644 index da393868..00000000 --- a/src/common/ic2/api/INetworkDataProvider.java +++ /dev/null @@ -1,18 +0,0 @@ -package ic2.api; - -import java.util.List; - -/** - * Tile entities which want to synchronized specific fields between client and server have to implement this. - * - * The fields don't update themselves, a field update must be sent every time a synchronized field changes. - */ -public interface INetworkDataProvider { - /** - * Get the list of synchronized fields. - * - * @return Names of the synchronized fields - */ - List getNetworkedFields(); -} - diff --git a/src/common/ic2/api/INetworkItemEventListener.java b/src/common/ic2/api/INetworkItemEventListener.java deleted file mode 100644 index a0126b39..00000000 --- a/src/common/ic2/api/INetworkItemEventListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package ic2.api; - -import net.minecraft.src.EntityPlayer; - -/** - * Allows an item to receive network events received from the server. - */ -public interface INetworkItemEventListener { - /** - * Called when a network event is received. - * - * @param metaData item metadata - * @param player player containing the item - * @param event event ID - */ - void onNetworkEvent(int metaData, EntityPlayer player, int event); -} - diff --git a/src/common/ic2/api/INetworkTileEntityEventListener.java b/src/common/ic2/api/INetworkTileEntityEventListener.java deleted file mode 100644 index 4433cb89..00000000 --- a/src/common/ic2/api/INetworkTileEntityEventListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package ic2.api; - -/** - * Allows a tile entity to receive network events received from the server. - */ -public interface INetworkTileEntityEventListener { - /** - * Called when a network event is received. - * - * @param event Event ID - */ - void onNetworkEvent(int event); -} - diff --git a/src/common/ic2/api/INetworkUpdateListener.java b/src/common/ic2/api/INetworkUpdateListener.java deleted file mode 100644 index be2adb88..00000000 --- a/src/common/ic2/api/INetworkUpdateListener.java +++ /dev/null @@ -1,14 +0,0 @@ -package ic2.api; - -/** - * Allows a tile entity to receive field sync updates received from the server. - */ -public interface INetworkUpdateListener { - /** - * Called when a field is synchronized. - * - * @param field field synchronized - */ - void onNetworkUpdate(String field); -} - diff --git a/src/common/ic2/api/IPaintableBlock.java b/src/common/ic2/api/IPaintableBlock.java deleted file mode 100644 index 9ee2a6b0..00000000 --- a/src/common/ic2/api/IPaintableBlock.java +++ /dev/null @@ -1,21 +0,0 @@ -package ic2.api; - -import net.minecraft.src.World; - -/** - * Allows a block to be painted by a Painter. - */ -public interface IPaintableBlock -{ - /** - * Color the block. - * - * @param world block's world - * @param x block X position - * @param y block Y position - * @param z block Z position - * @param color painter color, same as dye metadata values - * @return Whether the block was painted and the painter should be damaged - */ - public boolean colorBlock(World world, int x, int y, int z, int color); -} diff --git a/src/common/ic2/api/IReactor.java b/src/common/ic2/api/IReactor.java deleted file mode 100644 index 8c6a9291..00000000 --- a/src/common/ic2/api/IReactor.java +++ /dev/null @@ -1,134 +0,0 @@ -package ic2.api; - -import net.minecraft.src.ChunkCoordinates; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; - -/** - * Interface implemented by the tile entity of nuclear reactors. - */ -public interface IReactor { - /** - * Get the reactor's position in the world. - * - * @return Position of the reactor - */ - public ChunkCoordinates getPosition(); - - /** - * Get the reactor's corresponding world. - * - * @return The reactor's world - */ - public World getWorld(); - - /** - * Get the reactor's heat. - * - * @return The reactor's heat - */ - public int getHeat(); - - /** - * Set the reactor's heat. - * - * @param heat reactor heat - */ - public void setHeat(int heat); - - /** - * Increase the reactor's heat. - * - * Use negative values to decrease. - * - * @param amount amount of heat to add - * @return The reactor's heat after adding the specified amount - */ - public int addHeat(int amount); - - /** - * Get the reactor's maximum heat before exploding. - * - * @return Maximum heat value - */ - public int getMaxHeat(); - - /** - * Set the reactor's stored maxHeat variable. - * Used by plating to increase the reactors MaxHeat capacity. - * Needs to be called during each cycle process. - */ - public void setMaxHeat(int newMaxHeat); - - /** - * Get's the reactor's HEM (Heat Effect Modifier) - * Basic value is 1.0F. - * Reducing the value causes a weakening/reduction of the heat-based sideeffects of reactors - * (F.e. water evaporation, melting, damaging entitys, etc) - * - * @return HEM - */ - public float getHeatEffectModifier(); - - /** - * Set's the reactor's HEM - * Needs to be called during each cycle process. - */ - public void setHeatEffectModifier(float newHEM); - - /** - * Get the reactor's energy output. - * - * @return Energy output in EU/t - */ - public int getOutput(); - - /** - * Add's the given amount of energy to the Reactor's output. - * - * @return Energy output after adding the value, in EU/t - */ - public int addOutput(int energy); - - /** - * Get's the EU worth of a single basic Uranium pulse - * Please use this variable to alter energy output, as it represents the config modifiers as well. - */ - public int getPulsePower(); - - /** - * Get the item at the specified grid coordinates. - * - * @param x X position of the item - * @param y Y position of the item - * @return The item or null if there is no item - */ - public ItemStack getItemAt(int x, int y); - - /** - * Set the item at the specified grid coordinates. - * - * @param x X position of the item - * @param y Y position of the item - * @param item The item to set. - */ - public void setItemAt(int x, int y, ItemStack item); - - /** - * Explode the reactor. - */ - public void explode(); - - /** - * Get the reactor's tick rate (game ticks per reactor tick). - * - * @return Tick rate - */ - public int getTickRate(); - - /** - * Get whether the reactor is active and supposed to produce energy - * @return Whether the reactor is active - */ - public boolean produceEnergy(); -} diff --git a/src/common/ic2/api/IReactorChamber.java b/src/common/ic2/api/IReactorChamber.java deleted file mode 100644 index fad40c27..00000000 --- a/src/common/ic2/api/IReactorChamber.java +++ /dev/null @@ -1,13 +0,0 @@ -package ic2.api; - -/** - * Interface implemented by the reactor chamber tile entity. - */ -public interface IReactorChamber { - /** - * Get the chamber's reactor. - * - * @return The reactor - */ - public IReactor getReactor(); -} diff --git a/src/common/ic2/api/IReactorComponent.java b/src/common/ic2/api/IReactorComponent.java deleted file mode 100644 index 26de8f2c..00000000 --- a/src/common/ic2/api/IReactorComponent.java +++ /dev/null @@ -1,97 +0,0 @@ -package ic2.api; - -import net.minecraft.src.ItemStack; - -/** - * Design custom Reactor components by implementing this Interface - * Items implementing the interface will not be ejected from Reactors in their clean-up - * and can/will be interacted with by other elements, f.e. Uranium Cells. - * - * All IC2 ReactorComponents implement and use this Interface - * - */ -public interface IReactorComponent -{ - /** - * Called by reactor upon iterating through it's inventory (every cycle). - * Perform all necessary calculation/interaction here - * - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @param x X-coordinate of the stack in the grid - * @param y Y-coordinate of the stack in the grid - */ - public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y); - - /** - * Can be called by Uranium-Components who attempt to generate energy by pulsing to other components. - * Uranium-Uranium interaction (f.e.) uses this method. - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of called ItemStack - * @param pulsingStack Reference to the specific instance of pulsing ItemStack - * @param youX X-coordinate of your stack in the grid - * @param youY Y-coordinate of your stack in the grid - * @param pulseX X-coordinate of pulsing stack in the grid - * @param pulseY Y-coordinate of pulsing stack in the grid - * @return true if this component reacts to the pulse (and pulse is therefore meant to produce heat) - */ - public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, int pulseX, int pulseY); - - /** - * Called by components to determine whether your component can be heated. - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @param x X-coordinate of the stack in the grid - * @param y Y-coordinate of the stack in the grid - * @return true if your component can take heat - */ - public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y); - - /** - * Called by heat-switches to determine how much heat to distribute into which direction. - * Please return the maximum capacity of your heat-containing component here. - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @param x X-coordinate of the stack in the grid - * @param y Y-coordinate of the stack in the grid - * @return Maximum heat - */ - public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y); - - /** - * Called by heat-switches to determine how much heat to distribute into which direction. - * Please return the current amount of heat stored in this component - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @param x X-coordinate of the stack in the grid - * @param y Y-coordinate of the stack in the grid - * @return Current Heat - */ - public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y); - - /** - * Called by components to distribute heat to your component. - * Perform heating-calculations and increase your heat (dmg) level accordingly. - * This method will as well be called to REDUCE heat, by providing a negative amount. - * - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @param x X-coordinate of the stack in the grid - * @param y Y-coordinate of the stack in the grid - * @param heat Amount of heat to be added (may be negative to subtract heat) - * @return 0 if the 'order' was accepted, return >0 to indicate the 'remaining' heat which couldn't be absorbed (and vice versa for <0) - */ - public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat); - - /** - * Called upon reactor explosion - * Alter the explosion size. - * Returning a float 0 < f < 1 will be counted as multiplier. - * Anything else will be counted as a flat addition (in case of <0 = reduction). - * - * @param reactor Reference to the Reactor - * @param yourStack Reference to the specific instance of iterated ItemStack - * @return your explosion modifier - */ - public float influenceExplosion(IReactor reactor, ItemStack yourStack); -} diff --git a/src/common/ic2/api/ITerraformingBP.java b/src/common/ic2/api/ITerraformingBP.java deleted file mode 100644 index 490d4ee2..00000000 --- a/src/common/ic2/api/ITerraformingBP.java +++ /dev/null @@ -1,35 +0,0 @@ -package ic2.api; - -import net.minecraft.src.World; - -/** - * Allows an item to act as a terraformer blueprint. - */ -public interface ITerraformingBP -{ - /** - * Get the energy consumption per operation of the blueprint. - * - * @return Energy consumption in EU - */ - public abstract int getConsume(); - - /** - * Get the maximum range of the blueprint. - * Should be a divisor of 5. - * - * @return Maximum range in blocks - */ - public abstract int getRange(); - - /** - * Perform the terraforming operation. - * - * @param world world to terraform - * @param x X position to terraform - * @param z Z position to terraform - * @param yCoord Y position of the terraformer - * @return Whether the operation was successful and the terraformer should consume energy. - */ - public abstract boolean terraform(World world, int x, int z, int yCoord); -} diff --git a/src/common/ic2/api/IWrenchable.java b/src/common/ic2/api/IWrenchable.java deleted file mode 100644 index f2925361..00000000 --- a/src/common/ic2/api/IWrenchable.java +++ /dev/null @@ -1,50 +0,0 @@ -package ic2.api; - -import net.minecraft.src.EntityPlayer; - -/** - * Allows a tile entity to make use of the wrench's removal and rotation functions. - */ -public interface IWrenchable { - /** - * Determine if the wrench can be used to set the block's facing. - * Called before wrenchCanRemove(). - * - * @param entityPlayer player using the wrench - * @param side block's side the wrench was clicked on - * @return Whether the wrenching was done and the wrench should be damaged - */ - boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side); - - /** - * Get the block's facing. - * - * @return Block facing - */ - short getFacing(); - - /** - * Set the block's facing - * - * @param facing facing to set the block to - */ - void setFacing(short facing); - - /** - * Determine if the wrench can be used to remove the block. - * Called if wrenchSetFacing fails. - * - * @param entityPlayer player using the wrench - * @return Whether the wrenching was done and the wrench should be damaged - */ - boolean wrenchCanRemove(EntityPlayer entityPlayer); - - /** - * Determine the probability to drop the block as it is. - * The first entry in getBlockDropped will be replaced by blockid:meta if the drop is successful. - * - * @return Probability from 0 to 1 - */ - float getWrenchDropRate(); -} - diff --git a/src/common/ic2/api/Ic2Recipes.java b/src/common/ic2/api/Ic2Recipes.java deleted file mode 100644 index 6d286cb1..00000000 --- a/src/common/ic2/api/Ic2Recipes.java +++ /dev/null @@ -1,358 +0,0 @@ -package ic2.api; - -import java.lang.reflect.Array; -import java.util.AbstractMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.src.Block; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; - -/** - * Provides access to Compressor, Extractor and Macerator recipes, as well as charge-aware recipes - * and the Recycler blacklist. - * - * The recipes are only valid after IC2 has been loaded and are metadata and stack size sensitive, - * for example you can create a recipe to compress 3 wooden planks into 2 sticks. - */ -public final class Ic2Recipes { - /** - * Add a charge-aware shaped crafting recipe. - */ - public static void addCraftingRecipe(ItemStack result, Object... args) { - try { - Class.forName(getPackage() + ".common.AdvRecipe").getMethod("addAndRegister", ItemStack.class, Array.newInstance(Object.class, 0).getClass()).invoke(null, result, args); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Add a charge-aware shapeless crafting recipe. - */ - public static void addShapelessCraftingRecipe(ItemStack result, Object... args) { - try { - Class.forName(getPackage() + ".common.AdvShapelessRecipe").getMethod("addAndRegister", ItemStack.class, Array.newInstance(Object.class, 0).getClass()).invoke(null, result, args); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Retrieve the registered Compressor recipes. - * - * @return Recipe list as a list of map entries, the key is the input and the value is the output - */ - public static List > getCompressorRecipes() { - if (TileEntityCompressor_recipes == null) { - try { - TileEntityCompressor_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityCompressor").getField("recipes").get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - return TileEntityCompressor_recipes; - } - - /** - * Add a Compressor recipe. - * - * @param input Input - * @param output Output - */ - public static void addCompressorRecipe(ItemStack input, ItemStack output) { - getCompressorRecipes().add(new AbstractMap.SimpleEntry(input, output)); - } - - - /** - * Get the Compressor output for an input item. - * - * @param input input item - * @param adjustInput remove the processing requirements from input - * @return Output item as an independent stack - */ - public static ItemStack getCompressorOutputFor(ItemStack input, boolean adjustInput) { - return getOutputFor(input, adjustInput, getCompressorRecipes()); - } - - /** - * Retrieve the registered Extractor recipes. - * - * @return Recipe list as a list of map entries, the key is the input and the value is the output - */ - public static List > getExtractorRecipes() { - if (TileEntityExtractor_recipes == null) { - try { - TileEntityExtractor_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityExtractor").getField("recipes").get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - return TileEntityExtractor_recipes; - } - - /** - * Add a Extractor recipe. - * - * @param input Input - * @param output Output - */ - public static void addExtractorRecipe(ItemStack input, ItemStack output) { - getExtractorRecipes().add(new AbstractMap.SimpleEntry(input, output)); - } - - - /** - * Get the Extractor output for an input item. - * - * @param input input item - * @param adjustInput remove the processing requirements from input - * @return Output item as an independent stack - */ - public static ItemStack getExtractorOutputFor(ItemStack input, boolean adjustInput) { - return getOutputFor(input, adjustInput, getExtractorRecipes()); - } - - /** - * Retrieve the registered Macerator recipes. - * - * @return Recipe list as a list of map entries, the key is the input and the value is the output - */ - public static List > getMaceratorRecipes() { - if (TileEntityMacerator_recipes == null) { - try { - TileEntityMacerator_recipes = (List >) Class.forName(getPackage() + ".common.TileEntityMacerator").getField("recipes").get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - return TileEntityMacerator_recipes; - } - - /** - * Add a Macerator recipe. - * - * @param input Input - * @param output Output - */ - public static void addMaceratorRecipe(ItemStack input, ItemStack output) { - getMaceratorRecipes().add(new AbstractMap.SimpleEntry(input, output)); - } - - - /** - * Get the Macerator output for an input item. - * - * @param input input item - * @param adjustInput remove the processing requirements from input - * @return Output item as an independent stack - */ - public static ItemStack getMaceratorOutputFor(ItemStack input, boolean adjustInput) { - return getOutputFor(input, adjustInput, getMaceratorRecipes()); - } - - - private static ItemStack getOutputFor(ItemStack input, boolean adjustInput, List > recipeList) { - assert input != null; - - for (Map.Entry entry: recipeList) { - if (entry.getKey().isItemEqual(input) && input.stackSize >= entry.getKey().stackSize) { - if (adjustInput) input.stackSize -= entry.getKey().stackSize; - - return entry.getValue().copy(); - } - } - - return null; - } - - - /** - * Retrieve the registered Recycler blacklist items. - * - * @return Blacklist - */ - public static List getRecyclerBlacklist() { - if (TileEntityRecycler_blacklist == null) { - try { - TileEntityRecycler_blacklist = (List) Class.forName(getPackage() + ".common.TileEntityRecycler").getField("blacklist").get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - return TileEntityRecycler_blacklist; - } - - /** - * Add an item stack to the Recycler blacklist. - * - * @param newBlacklistedItem item stack to add - */ - public static void addRecyclerBlacklistItem(ItemStack newBlacklistedItem) { - getRecyclerBlacklist().add(newBlacklistedItem); - } - - /** - * Add an item to the Recycler blacklist. - * - * @param newBlacklistedItem item to add - */ - public static void addRecyclerBlacklistItem(Item newBlacklistedItem) { - addRecyclerBlacklistItem(new ItemStack(newBlacklistedItem, 1, -1)); - } - - /** - * Add a block to the Recycler blacklist. - * - * @param newBlacklistedBlock block to add - */ - public static void addRecyclerBlacklistItem(Block newBlacklistedBlock) { - addRecyclerBlacklistItem(new ItemStack(newBlacklistedBlock, 1, -1)); - } - - - /** - * Determine if an item is in the Recycler blacklist. - * - * @param itemStack item to check - * @return Whether the item is blacklisted or not - */ - public static boolean isRecyclerInputBlacklisted(ItemStack itemStack) { - for (ItemStack blackItem: getRecyclerBlacklist()) { - if (itemStack.isItemEqual(blackItem)) return true; - } - - return false; - } - - /** - * Retrieve the registered Scrap Box drops. - * - * @return Drops as a list of item stack and float (chance) pairs - */ - public static List> getScrapboxDrops() { - try { - return (List>) Class.forName(getPackage() + ".common.ItemScrapbox").getMethod("getDropList").invoke(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /* - * Reference scrap box chance values: - * - * 0.1: Diamond - * 0.5: Cake, Gold Helmet, Iron Ore, Gold Ore - * 1.0: Wooden tools, Soul Sand, Sign, Leather, Feather, Bone - * 1.5: Apple, Bread - * 2.0: Netherrack, Rotten Flesh - * 3.0: Grass, Gravel - * 4.0: Stick - * 5.0: Dirt, Wooden Hoe - */ - - /** - * Add an item stack to the Scrap Box drops. - * - * @param dropItem item stack to add - * @param chance chance for the item to drop, see the code comments for reference values - */ - public static void addScrapboxDrop(ItemStack dropItem, float chance) { - try { - Class.forName(getPackage() + ".common.ItemScrapbox").getMethod("addDrop", ItemStack.class, float.class).invoke(null, dropItem, chance); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Add an item to the Scrap Box drops. - * - * @param dropItem item to add - * @param chance chance for the item to drop, see the code comments for reference values - */ - public static void addScrapboxDrop(Item dropItem, float chance) { - addScrapboxDrop(new ItemStack(dropItem, 1), chance); - } - - /** - * Add a block to the Scrap Box drops. - * - * @param dropItem item to add - * @param chance chance for the item to drop, see the code comments for reference values - */ - public static void addScrapboxDrop(Block dropItem, float chance) { - addScrapboxDrop(new ItemStack(dropItem), chance); - } - - /** - * Retrieve the registered Mass Fabricator amplifiers. - * - * @return Amplifiers as a list of item stack and integer (amplifier value) pairs - */ - public static List > getMatterAmplifiers() { - if (TileEntityMatter_amplifiers == null) { - try { - TileEntityMatter_amplifiers = (List >) Class.forName(getPackage() + ".common.TileEntityMatter").getField("amplifiers").get(null); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - return TileEntityMatter_amplifiers; - } - - /** - * Add an item stack to the Mass Fabricator amplifiers. - * - * @param amplifierItem item stack to add - * @param value amplifier value for the item, scrap is 5000 - */ - public static void addMatterAmplifier(ItemStack amplifierItem, int value) { - getMatterAmplifiers().add(new AbstractMap.SimpleEntry(amplifierItem, value)); - } - - /** - * Add an item to the Mass Fabricator amplifiers. - * - * @param amplifierItem item to add - * @param value amplifier value for the item, scrap is 5000 - */ - public static void addMatterAmplifier(Item amplifierItem, int value) { - addMatterAmplifier(new ItemStack(amplifierItem, 1, -1), value); - } - - /** - * Add a block to the Mass Fabricator amplifiers. - * - * @param amplifierItem item to add - * @param value amplifier value for the item, scrap is 5000 - */ - public static void addMatterAmplifier(Block amplifierItem, int value) { - addMatterAmplifier(new ItemStack(amplifierItem, 1, -1), value); - } - - /** - * Get the base IC2 package name, used internally. - * - * @return IC2 package name, if unable to be determined defaults to ic2 - */ - private static String getPackage() { - Package pkg = Ic2Recipes.class.getPackage(); - if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); - else return "ic2"; - } - - private static List > TileEntityCompressor_recipes; - private static List > TileEntityExtractor_recipes; - private static List > TileEntityMacerator_recipes; - private static List TileEntityRecycler_blacklist; - private static List > TileEntityMatter_amplifiers; -} - diff --git a/src/common/ic2/api/Items.java b/src/common/ic2/api/Items.java deleted file mode 100644 index 5835eb5d..00000000 --- a/src/common/ic2/api/Items.java +++ /dev/null @@ -1,401 +0,0 @@ -package ic2.api; - -import net.minecraft.src.ItemStack; - -/** - * Provides access to IC2 blocks and items. - * - * Some items can be acquired through the ore dictionary which is the recommended way. - * The items are initialized while IC2 is being loaded - try to use ModsLoaded() or load your mod after IC2. - * Some blocks/items can be disabled by a config setting, so it's recommended to check if they're null first. - * - * Getting the associated Block/Item for an ItemStack x: - * Blocks: Block.blocksList[x.itemID] - * Items: x.getItem() - */ -public final class Items { - /** - * Get an ItemStack for a specific item name, example: Items.getItem("resin") - * See the list below for item names. - * Make sure to copy() the ItemStack if you want to modify it. - * - * @param name item name - * @return The item or null if the item does not exist or an error occurred - */ - public static ItemStack getItem(String name) { - try { - if (Ic2Items == null) Ic2Items = Class.forName(getPackage() + ".common.Ic2Items"); - - Object ret = Ic2Items.getField(name).get(null); - - if (ret instanceof ItemStack) { - return (ItemStack) ret; - } else { - return null; - } - } catch (Exception e) { - System.out.println("IC2 API: Call getItem failed for "+name); - - return null; - } - } - - /* Possible values: - - ----- blocks ----- - - ores - copperOre Copper Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreCopper, null with enableWorldGenOreCopper=false - tinOre Tin Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreTin, null with enableWorldGenOreTin=false - uraniumOre Tin Ore block, currently not meta sensitive, meta in ItemStack set to 0, ore dictionary: oreUranium, null with enableWorldGenOreUranium=false - - rubber related - Rubber wood block, meta reflects the state, meta in ItemStack set to 0, ore dictionary: woodRubber (with meta 0), null with enableWorldGenTreeRubber=false - dropped (as an item) -> metadata 0 - block, no resin spot -> metadata 0 or 1 - block, wet resin spot -> metadata 2-5 (according to the side) - block, dry resin spot -> metadata 8-11 (wet state + 6) - - rubberWood - rubberLeaves Rubber Leaves block, currently not meta sensitive, meta in ItemStack set to 0, null with enableWorldGenTreeRubber=false - rubberSapling Rubber Sapling block, currently not meta sensitive, meta in ItemStack set to 0, null with enableWorldGenTreeRubber=false - resinSheet Resin Sheet block, currently not meta sensitive - rubberTrampoline Rubber Trampoline block, meta reflects internal state, meta in ItemStack set to 0 - - building/storage - ironFence Iron Fence block, currently not meta sensitive - - reinforcedStone Reinforced Stone block, currently not meta sensitive - reinforcedGlass Reinforced Glass block, currently not meta sensitive - reinforcedDoorBlock Reinforced Door block, meta reflects the state (see vanilla doors), meta in ItemStack set to 0 - - constructionFoam Construction Foam block, currently not meta sensitive - constructionFoamWall Construction Foam Wall block, meta = color, implements IPaintableBlock - scaffold Scaffold block, meta reflects internal physical model data - - bronzeBlock Bronze block, meta sensitive - copperBlock Copper block, meta sensitive - tinBlock Tin block, meta sensitive - uraniumBlock Uranium block, meta sensitive - - cables (when placed as a block, inventory items are different TE implements IEnergyConductor) - copperCableBlock Copper Cable block, meta sensitive - insulatedCopperCableBlock Insulated Copper Cable block, meta sensitive - - goldCableBlock Gold Cable block, meta sensitive - insulatedGoldCableBlock Insulated Gold Cable block, meta sensitive - doubleInsulatedGoldCableBlock Double Insulated Gold Cable block, meta sensitive - - ironCableBlock Iron Cable block, meta sensitive - insulatedIronCableBlock Insulated Iron Cable block, meta sensitive - doubleInsulatedIronCableBlock Double Insulated Iron Cable block, meta sensitive - trippleInsulatedIronCableBlock Tripple Insulated Iron Cable block, meta sensitive - - glassFiberCableBlock Glass Fiber Cable block, meta sensitive - - tinCableBlock Tin Cable block, meta sensitive - - detectorCableBlock Detector Cable block, meta sensitive - splitterCableBlock Splitter Cable block, meta sensitive - - generators + related (TE implements IEnergySource ex. reactorChamber) - generator Generator block, meta sensitive - geothermalGenerator Geothermal Generator block, meta sensitive - waterMill Water Mill block, meta sensitive - solarPanel Solar Panel block, meta sensitive - windMill Wind Mill block, meta sensitive - nuclearReactor Nuclear Reactor block, meta sensitive - reactorChamber Reactor Chamber block, currently not meta sensitive - - energy storages (TE implements IEnergySource and IEnergyConductor) - batBox BatBox block, meta sensitive - mfeUnit MFE Unit block, meta sensitive - mfsUnit MFS Unit block, meta sensitive - - transformers (TE implements IEnergySource and IEnergyConductor) - lvTransformer LV Transformer block, meta sensitive - mvTransformer MV Transformer block, meta sensitive - hvTransformer HV Transformer block, meta sensitive - - machines + related (TE implements IEnergySink ex. machine, miningPipe, miningPipeTip) - machine Machine block, meta sensitive - advancedMachine Advanced Machine block, meta sensitive - - ironFurnace Iron Furnace block, meta sensitive - electroFurnace Electro Furnace block, meta sensitive - macerator Macerator block, meta sensitive - extractor Extractor block, meta sensitive - compressor Compressor block, meta sensitive - canner Canner block, meta sensitive - miner Miner block, meta sensitive - pump Pump block, meta sensitive - magnetizer Magnetizer block, meta sensitive - electrolyzer Electrolyzer block, meta sensitive - recycler Recycler block, meta sensitive - inductionFurnace Induction Furnace block, meta sensitive - massFabricator Mass Fabricator block, meta sensitive - terraformer Terraformer block, meta sensitive - teleporter Teleporter block, meta sensitive - teslaCoil Tesla Coil block, meta sensitive - luminator Passive (dark) Luminator block, meta = facing - activeLuminator Active (bright) Luminator block, meta = facing - - miningPipe Mining Pipe block, currently not meta sensitive, meta in ItemStack set to 0 - miningPipeTip Mining Pipe Tip block, currently not meta sensitive, meta in ItemStack set to 0 - - personal blocks - personalSafe Personal Safe block, meta sensitive - tradeOMat Trade-O-Mat block, meta sensitive - energyOMat Energy-O-Mat block, meta sensitive - - explosives - industrialTnt Industrial TNT block, currently not meta sensitive - nuke Nuke block, currently not meta sensitive - dynamiteStick Dynamite Stick block, meta = placement, meta in ItemStack set to 0 - dynamiteStickWithRemote Dynamite Stick with Remote block, meta = placement, meta in ItemStack set to 0 - - Agriculture Stuff - crop Crop Block, empty, not meta sensitive - - - ----- items ----- - - rubber + related - resin Resin item, currently not meta sensitive - rubber Rubber item, currently not meta sensitive, ore dictionary: itemRubber - - ore drops - uraniumDrop Uranium Drop item, currently not meta sensitive, ore dictionary: itemDropUranium - - dusts - bronzeDust Bronze Dust item, currently not meta sensitive - clayDust Clay Dust item, currently not meta sensitive - coalDust Coal Dust item, currently not meta sensitive - copperDust Copper Dust item, currently not meta sensitive - goldDust Gold Dust item, currently not meta sensitive - ironDust Iron Dust item, currently not meta sensitive - silverDust Silver Dust item, currently not meta sensitive - smallIronDust Small Iron Dust item, currently not meta sensitive - tinDust Tin Dust item, currently not meta sensitive - hydratedCoalDust Hydrated Coal Dust item, currently not meta sensitive - - ingots - refinedIronIngot Refined Iron Ingot item, currently not meta sensitive, ore dictionary: ingotRefinedIron - copperIngot Copper Ingot item, currently not meta sensitive, ore dictionary: ingotCopper - tinIngot Tin Ingot item, currently not meta sensitive, ore dictionary: ingotTin - bronzeIngot Bronze Ingot item, currently not meta sensitive, ore dictionary: ingotBronze - mixedMetalIngot Mixed Metal Ingot item, currently not meta sensitive - uraniumIngot Uranium Ingot item, currently not meta sensitive, ore dictionary: ingotUranium - - tools/weapons (without electric tools) - treetap Treetap item, meta = damage value - wrench Wrench item, meta = damage value - cutter Insulation Cutter item, meta = damage value - constructionFoamSprayer Construction Foam Sprayer item, meta = charges (as of v1.45) - - bronzePickaxe Bronze Pickaxe item, meta = damage value - bronzeAxe Bronze Axe item, meta = damage value - bronzeSword Bronze Sword item, meta = damage value - bronzeShovel Bronze Shovel item, meta = damage value - bronzeHoe Bronze Hoe item, meta = damage value - - el. tools/devices/weapons - miningDrill Mining Drill item, meta = visual charge indicator, implements IElectricItem - diamondDrill Diamond Tipped Mining Drill item, meta = visual charge indicator, implements IElectricItem - chainsaw Chainsaw item, meta = visual charge indicator, implements IElectricItem - electricWrench Electric Wrench item, meta = visual charge indicator, implements IElectricItem - electricTreetap Electric Treetap item, meta = visual charge indicator, implements IElectricItem - miningLaser Mining Laser item, meta = visual charge indicator, implements IElectricItem - - ecMeter EC-Mater item, currently not meta sensitive - odScanner Ore Density Scanner item, meta = damage value for charge level, implements IElectricItem - ovScanner Ore Value Scanner item, meta = visual charge indicator, implements IElectricItem - - frequencyTransmitter Frequency Transmitter item, currently not meta sensitive - - nanoSaber Idle Nano Saber item, meta = visual charge indicator, implements IElectricItem - enabledNanoSaber Enabled Nano Saber item, meta = visual charge indicator, implements IElectricItem - - armor/wearable - rubberBoots Rubber Boots item, meta = damage value - - bronzeHelmet Bronze Helmet Armor item, meta = damage value - bronzeChestplate Bronze Chestplate Armor item, meta = damage value - bronzeLeggings Bronze Leggings Armor item, meta = damage value - bronzeBoots Bronze Boots Armor item, meta = damage value - - compositeArmor Composite Armor item, meta = damage value for charge level - - nanoHelmet Nano Helmet Armor item, meta = visual charge indicator, implements IElectricItem - nanoBodyarmor Nano Bodyarmor item, meta = visual charge indicator, implements IElectricItem - nanoLeggings Nano Leggings Armor item, meta = visual charge indicator, implements IElectricItem - nanoBoots Nano Boots Armor item, meta = visual charge indicator, implements IElectricItem - - quantumHelmet Quantum Helmet Armor item, meta = visual charge indicator, implements IElectricItem - quantumBodyarmor Quantum Bodyarmor item, meta = visual charge indicator, implements IElectricItem - quantumLeggings Quantum Leggings Armor item, meta = visual charge indicator, implements IElectricItem - quantumBoots Quantum Boots Armor item, meta = visual charge indicator, implements IElectricItem - - jetpack Jetpack item, meta = damage value for fuel level - electricJetpack Electric Jetpack item, meta = visual charge indicator, implements IElectricItem - - batPack BatPack item, meta = visual charge indicator, implements IElectricItem, can provide energy - lapPack LapPack item, meta = visual charge indicator, implements IElectricItem, can provide energy - - cfPack CF Pack item, meta = charges (as of v1.45) - - solarHelmet Solar Helmet item, currently not meta sensitive - staticBoots Static Boots item, currently not meta sensitive - - batteries - reBattery Empty RE Battery item, currently not meta sensitive, implements IElectricItem - chargedReBattery RE Battery item, meta = visual charge indicator, implements IElectricItem, can provide energy - energyCrystal Energy Crystal item, meta = visual charge indicator, implements IElectricItem, can provide energy - lapotronCrystal Lapotron Crystal item, meta = visual charge indicator, implements IElectricItem, can provide energy - suBattery SU Battery item, currently not meta sensitive - - cables - copperCableItem Copper Cable item, meta sensitive - insulatedCopperCableItem Insulated Copper Cable item, meta sensitive - - goldCableItem Gold Cable item, meta sensitive - insulatedGoldCableItem Insulated Gold Cable item, meta sensitive - doubleInsulatedGoldCableItem Double Insulated Gold Cable item, meta sensitive - - ironCableItem Iron Cable item, meta sensitive - insulatedIronCableItem Insulated Iron Cable item, meta sensitive - doubleInsulatedIronCableItem Double Insulated Iron Cable item, meta sensitive - trippleInsulatedIronCableItem Tripple Insulated Iron Cable item, meta sensitive - - glassFiberCableItem Glass Fiber Cable item, meta sensitive - - tinCableItem Tin Cable item, meta sensitive - - detectorCableItem Detector Cable item, meta sensitive - splitterCableItem Splitter Cable item, meta sensitive - - cells/containers (without reactor components) - cell Empty Cell item, currently not meta sensitive - lavaCell Lava Cell item, currently not meta sensitive - hydratedCoalCell Hydrated Coal Cell item, currently not meta sensitive - bioCell Bio Cell item, currently not meta sensitive - coalfuelCell Coalfuel Cell item, currently not meta sensitive - biofuelCell Biofuel Cell item, currently not meta sensitive - waterCell Water Cell item, currently not meta sensitive - electrolyzedWaterCell Electrolyzed Water Cell item, currently not meta sensitive - - fuelCan Empty Fuel Can item, currently not meta sensitive - filledFuelCan Fuel Can item, meta = fuel value (as of v1.45) - - tinCan Empty Tin Can item, currently not meta sensitive - filledTinCan Filled Tin Can item, currently not meta sensitive - - reactor components - uraniumCell Uranium Cell item, meta = damage value - coolingCell Cooling Cell item, meta = damage value - - depletedIsotopeCell Depleted Isotope Cell item, meta = damage value - reEnrichedUraniumCell Re-Enriched Uranium Cell item, currently not meta sensitive - nearDepletedUraniumCell Near-Depleted Uranium Cell item, currently not meta sensitive - - integratedReactorPlating Integrated Reactor Plating item, meta = damage value - integratedHeatDisperser Integrated Heat Disperser item, meta = damage value - - terraformer blueprints - terraformerBlueprint Empty Terraformer Blueprint item, currently not meta sensitive - cultivationTerraformerBlueprint Cultivation Terraformer Blueprint item, currently not meta sensitive - irrigationTerraformerBlueprint Irrigation Terraformer Blueprint item, currently not meta sensitive - chillingTerraformerBlueprint Chilling Terraformer Blueprint item, currently not meta sensitive - desertificationTerraformerBlueprint Desertification Terraformer Blueprint item, currently not meta sensitive - flatificatorTerraformerBlueprint Flatificator Terraformer Blueprint item, currently not meta sensitive - mushroomTerraformerBlueprint Mushroom Terraformer Blueprint item, currently not meta sensitive - - diamond chain - coalBall Coal Ball item, currently not meta sensitive - compressedCoalBall Compressed Coal Ball item, currently not meta sensitive - coalChunk Coal Chunk item, currently not meta sensitive - industrialDiamond Industrial Diamond item, currently not meta sensitive, DEPRECATED - - recycler chain - scrap Scrap item, currently not meta sensitive - scrapBox Scrap Box item, currently not meta sensitive - - fuel production chain - hydratedCoalClump Hydrated Coal Clump item, currently not meta sensitive - plantBall Plant Ball item, currently not meta sensitive - compressedPlantBall Compressed Plant Ball item, currently not meta sensitive - - painting - painter Painter item, currently not meta sensitive - - blackPainter Black Painter item, meta = damage value - redPainter Red Painter item, meta = damage value - greenPainter Green Painter item, meta = damage value - brownPainter Brown Painter item, meta = damage value - bluePainter Blue Painter item, meta = damage value - purplePainter Purple Painter item, meta = damage value - cyanPainter Cyan Painter item, meta = damage value - lightGreyPainter Light Grey Painter item, meta = damage value - darkGreyPainter Dark Grey Painter item, meta = damage value - pinkPainter Pink Painter item, meta = damage value - limePainter Lime Painter item, meta = damage value - yellowPainter Yellow Painter item, meta = damage value - cloudPainter Cloud Painter item, meta = damage value - magentaPainter Magenta Painter item, meta = damage value - orangePainter Orange Painter item, meta = damage value - whitePainter White Painter item, meta = damage value - - explosives + related - dynamite Throwable Dynamite item, currently not meta sensitive - stickyDynamite Throwable Sticky Dynamite item, currently not meta sensitive - - remote Dynamite Remote item, currently not meta sensitive - - misc intermediate recipe ingredients - electronicCircuit Electronic Circuit item, currently not meta sensitive - advancedCircuit Advanced Circuit item, currently not meta sensitive - - advancedAlloy Advanced Alloy item, currently not meta sensitive - - carbonFiber Raw Carbon Fiber item, currently not meta sensitive - carbonMesh Raw Carbon Mesh item, currently not meta sensitive - carbonPlate Carbon Plate item, currently not meta sensitive - - matter UU-Matter item, currently not meta sensitive - iridiumOre Iridium Ore item, currently not meta sensitive - iridiumPlate Iridium Plate item, currently not meta sensitive - - upgrade modules - overclockerUpgrade overclocker upgrade item, meta sensitive - transformerUpgrade transformer upgrade item, meta sensitive - energyStorageUpgrade energy storage upgrade item, meta sensitive - - misc - coin Coin item, currently not meta sensitive - reinforcedDoor Reinforced Door item, currently not meta sensitive - constructionFoamPellet Construction Foam Pellet item, currently not meta sensitive - cropSeed Crop seeds, stuff stored in NBT, don't use for crafting recipes! - cropnalyzer Cropnalyzer handheld device - fertilizer Basic IC2Item, used to provide nutrients toCropBlocks - hydratingCell Cell used to hydrate Crops, meta = Content, 0 = Full, 9999 = Near empty - electricHoe Electric Hoe, meta = charge level - solarHelmet Solar Helmet item, currently not meta sensitive - terraWart Terra Wart item, cures potion effects - weedEx Weed-EX can, meta = uses left - - */ - - /** - * Get the base IC2 package name, used internally. - * - * @return IC2 package name, if unable to be determined defaults to ic2 - */ - private static String getPackage() { - Package pkg = Items.class.getPackage(); - if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); - else return "ic2"; - } - - private static Class Ic2Items; -} - diff --git a/src/common/ic2/api/NetworkHelper.java b/src/common/ic2/api/NetworkHelper.java deleted file mode 100644 index 5287671b..00000000 --- a/src/common/ic2/api/NetworkHelper.java +++ /dev/null @@ -1,236 +0,0 @@ -package ic2.api; - -import java.lang.reflect.Method; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -/** - * Provides methods to initiate events and synchronize tile entity fields in SMP. - * - * The methods are transparent between singleplayer and multiplayer - if a method is called in - * singleplayer, the associated callback will be locally executed. The implementation is different - * between the client and server versions of IC2. - * - * You'll usually want to use the server->client methods defined here to synchronize information - * which is needed by the clients outside the GUI, such as rendering the block, playing sounds or - * producing effects. Anything which is only visible inside the GUI should be synchronized through - * the Container class associated to the GUI in Container.updateProgressBar(). - */ -public final class NetworkHelper { - // server -> client - - - /** - * Schedule a TileEntity's field to be updated to the clients in range. - * - * The updater will query the field's value during the next update, updates happen usually - * every 2 ticks. If low latency is important use initiateTileEntityEvent instead. - * - * IC2's network updates have to get triggered every time, it doesn't continuously poll/send - * the field value. Just call updateTileEntityField after every change to a field which needs - * network synchronization. - * - * The following field data types are currently supported: - * - int, int[], short, short[], byte, byte[], long, long[] - * - float, float[], double, double[] - * - boolean, boolean[] - * - String, String[] - * - ItemStack - * - NBTBase (includes NBTTagCompound) - * - Block, Item, Achievement, Potion, Enchantment - * - ChunkCoordinates, ChunkCoordIntPair - * - TileEntity (does not sync the actual tile entity, instead looks up the tile entity by its position in the client world) - * - World (does not sync the actual world, instead looks up the world by its dimension ID) - * - * Once the update has been processed by the client, it'll call onNetworkUpdate on the client- - * side TileEntity if it implements INetworkUpdateListener. - * - * If this method is being executed on the client (i.e. Singleplayer), it'll just call - * INetworkUpdateListener.onNetworkUpdate (if implemented by the te). - * - * @param te TileEntity to update - * @param field Name of the field to update - */ - public static void updateTileEntityField(TileEntity te, String field) { - try { - if (NetworkManager_updateTileEntityField == null) NetworkManager_updateTileEntityField = Class.forName(getPackage() + ".common.NetworkManager").getMethod("updateTileEntityField", TileEntity.class, String.class); - if (instance == null) instance = getInstance(); - - NetworkManager_updateTileEntityField.invoke(instance, te, field); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Immediately send an event for the specified TileEntity to the clients in range. - * - * If this method is being executed on the client (i.e. Singleplayer), it'll just call - * INetworkTileEntityEventListener.onNetworkEvent (if implemented by the te). - * - * @param te TileEntity to notify, should implement INetworkTileEntityEventListener - * @param event Arbitrary integer to represent the event, choosing the values is up to you - * @param limitRange Limit the notification range to (currently) 20 blocks instead of the - * tracking distance if true - */ - public static void initiateTileEntityEvent(TileEntity te, int event, boolean limitRange) { - try { - if (NetworkManager_initiateTileEntityEvent == null) NetworkManager_initiateTileEntityEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateTileEntityEvent", TileEntity.class, Integer.TYPE, Boolean.TYPE); - if (instance == null) instance = getInstance(); - - NetworkManager_initiateTileEntityEvent.invoke(null, te, event, limitRange); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Immediately send an event for the specified Item to the clients in range. - * - * The item should implement INetworkItemEventListener to receive the event. - * - * If this method is being executed on the client (i.e. Singleplayer), it'll just call - * INetworkItemEventListener.onNetworkEvent (if implemented by the item). - * - * @param player EntityPlayer holding the item - * @param itemStack ItemStack containing the item - * @param event Arbitrary integer to represent the event, choosing the values is up to you - * @param limitRange Limit the notification range to (currently) 20 blocks instead of the - * tracking distance if true - */ - public static void initiateItemEvent(EntityPlayer player, ItemStack itemStack, int event, boolean limitRange) { - try { - if (NetworkManager_initiateItemEvent == null) NetworkManager_initiateItemEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateItemEvent", EntityPlayer.class, ItemStack.class, Integer.TYPE, Boolean.TYPE); - if (instance == null) instance = getInstance(); - - NetworkManager_initiateItemEvent.invoke(instance, player, itemStack, event, limitRange); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Schedule a block update (re-render) on the clients in range. - * - * If this method is being executed on the client (i.e. Singleplayer), it'll just trigger the - * block update locally. - * - * @param world World containing the block - * @param x The block's x coordinate - * @param y The block's y coordinate - * @param z The block's z coordinate - */ - public static void announceBlockUpdate(World world, int x, int y, int z) { - try { - if (NetworkManager_announceBlockUpdate == null) NetworkManager_announceBlockUpdate = Class.forName(getPackage() + ".common.NetworkManager").getMethod("announceBlockUpdate", World.class, Integer.TYPE, Integer.TYPE, Integer.TYPE); - - NetworkManager_announceBlockUpdate.invoke(null, world, x, y, z); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - - // client -> server - - - /** - * Ask the server to send the values of the fields specified. - * - * See updateTileEntityField for the supported field types. - * - * The implementation is currently limited to TileEntitys as data providers. The tile entity - * has to be fully initialized when executing this method (i.e. valid worldObj+coords). - * - * This method doesn't do anything if executed on the server. - * - * @param dataProvider Object implementing the INetworkDataProvider interface - */ - public static void requestInitialData(INetworkDataProvider dataProvider) { - try { - if (NetworkManager_requestInitialData == null) NetworkManager_requestInitialData = Class.forName(getPackage() + ".common.NetworkManager").getMethod("requestInitialData", INetworkDataProvider.class); - if (instance == null) instance = getInstance(); - - NetworkManager_requestInitialData.invoke(instance, dataProvider); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Immediately send an event for the specified TileEntity to the server. - * - * This method doesn't do anything if executed on the server. - * - * @param te TileEntity to notify, should implement INetworkClientTileEntityEventListener - * @param event Arbitrary integer to represent the event, choosing the values is up to you - */ - public static void initiateClientTileEntityEvent(TileEntity te, int event) { - try { - if (NetworkManager_initiateClientTileEntityEvent == null) NetworkManager_initiateClientTileEntityEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateClientTileEntityEvent", TileEntity.class, Integer.TYPE); - if (instance == null) instance = getInstance(); - - NetworkManager_initiateClientTileEntityEvent.invoke(instance, te, event); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Immediately send an event for the specified Item to the clients in range. - * - * The item should implement INetworkItemEventListener to receive the event. - * - * This method doesn't do anything if executed on the server. - * - * @param itemStack ItemStack containing the item - * @param event Arbitrary integer to represent the event, choosing the values is up to you - */ - public static void initiateClientItemEvent(ItemStack itemStack, int event) { - try { - if (NetworkManager_initiateClientItemEvent == null) NetworkManager_initiateClientItemEvent = Class.forName(getPackage() + ".common.NetworkManager").getMethod("initiateClientItemEvent", ItemStack.class, Integer.TYPE); - if (instance == null) instance = getInstance(); - - NetworkManager_initiateClientItemEvent.invoke(instance, itemStack, event); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Get the base IC2 package name, used internally. - * - * @return IC2 package name, if unable to be determined defaults to ic2 - */ - private static String getPackage() { - Package pkg = NetworkHelper.class.getPackage(); - if (pkg != null) return pkg.getName().substring(0, pkg.getName().lastIndexOf('.')); - else return "ic2"; - } - - /** - * Get the NetworkManager instance, used internally. - * - * @return NetworkManager instance - */ - private static Object getInstance() { - try { - return Class.forName(getPackage() + ".common.IC2").getDeclaredField("network").get(null); - } catch (Throwable e) { - throw new RuntimeException(e); - } - } - - private static Object instance; - private static Method NetworkManager_updateTileEntityField; - private static Method NetworkManager_initiateTileEntityEvent; - private static Method NetworkManager_initiateItemEvent; - private static Method NetworkManager_announceBlockUpdate; - private static Method NetworkManager_requestInitialData; - private static Method NetworkManager_initiateClientTileEntityEvent; - private static Method NetworkManager_initiateClientItemEvent; -} - diff --git a/src/common/ic2/api/TECrop.java b/src/common/ic2/api/TECrop.java deleted file mode 100644 index a261953a..00000000 --- a/src/common/ic2/api/TECrop.java +++ /dev/null @@ -1,161 +0,0 @@ -package ic2.api; - -import net.minecraft.src.Block; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; - -/** - * Provides access to a crop tile entity. Contains all methods and fields you can access from your CropCard. - */ -public abstract class TECrop extends TileEntity -{ - /** - * ID of the plant currently on the crop. - * -1 if there is no plant currently on the crop. - */ - public short id = -1; - - /** - * Current size of the plant. - * 1 is the starting size and the maximum size varies from plant to plant. - */ - public byte size = 0; - - /** - * Growth ability of a plant. - * Higher values give faster growth. - */ - public byte statGrowth = 0; - /** - * Chances and amount of gain and seeds from harvested crops. - * Higher values give more drops. - */ - public byte statGain = 0; - /** - * Ability for the plant to resist trampling. - * Higher values give more resistance against trampling. - */ - public byte statResistance = 0; - - /** - * Scan level, increases each time a seed goes through analysis. - */ - public byte scanLevel = 0; - - /** - * Custom data stored along a TECrop. - */ - public short[] custumData = new short[16]; - - /** - * Crop nutrients. - * Ranges from 0 (empty) to 100 (full). - */ - public int nutrientStorage = 0; - /** - * Crop hydration. - * Values are: - * - 0 for nothing - * - 1-10 for water hydration - * - 11-100 for distilled water (hydration cell) hydration - */ - public int waterStorage = 0; - /** - * Remaining duration of WeedEX - * PRevents weed from growing and protects against (unimplemented) insects or similar stuff - */ - public int exStorage = 0; - - /** - * Crop humidity. - * Ranges from 0 (dry) to 10 (humid). - * Updates every couple of seconds or when an update is requested. - * - * @see #updateState() - */ - public abstract byte getHumidity(); - - /** - * Get the crop's nutrient level. - * Ranges from 0 (empty) to 10 (full). - * Updates every couple of seconds or when an update is requested. - * - * @see #updateState() - */ - public abstract byte getNutrients(); - - /** - * Get the crop's air quality. - * Ranges from 0 (cluttered) to 10 (fresh). - * Updates every couple of seconds or when an update is requested. - * - * @see #updateState() - * - * @return Crop air quality - */ - public abstract byte getAirQuality(); - - /** - * Get the crop's light level. - * - * @return Crop light level - */ - public int getLightLevel() - { - return worldObj.getBlockLightValue(xCoord, yCoord, zCoord); - } - - - /** - * Pick the crop, removing and giving seeds for the plant. - * - * @param manual whether it was done by hand (not automated) - * @return true if successfully picked - */ - public abstract boolean pick(boolean manual); - - /** - * Harvest the crop, turning it into gain and resetting its size. - * - * @param manual whether it one by hand (not automated) - * @return true if successfully harvested - */ - public abstract boolean harvest(boolean manual); - - /** - * Fully clears the crop without dropping anything. - */ - public abstract void reset(); - - /** - * Request a texture and lighting update. - */ - public abstract void updateState(); - - /** - * Check if a block is under the farmland containing the crop. - * Searches up to 2 blocks below the farmland or an air space, whichever appears first. - * - * @param block block to search - * @return Whether the block was found - */ - public abstract boolean isBlockBelow(Block block); - - /** - * Generate plant seeds with the given parameters. - * - * @param plant plant ID - * @param growth plant growth stat - * @param gain plant gain stat - * @param resis plant resistance stat - * @param scan plant scan level - * @return Plant seed item - */ - public abstract ItemStack generateSeeds(short plant, byte growth, byte gain, byte resis, byte scan); - - /** - * For internal usage only. - */ - public abstract void addLocal(String s1, String s2); - -} diff --git a/src/common/railcraft/common/api/core/items/ICrowbar.java b/src/common/railcraft/common/api/core/items/ICrowbar.java deleted file mode 100644 index 3a058b28..00000000 --- a/src/common/railcraft/common/api/core/items/ICrowbar.java +++ /dev/null @@ -1,14 +0,0 @@ -package railcraft.common.api.core.items; - -/** - * Any item that performs the same function as a crowbar should implement this interface. - * Making a new crowbar item is as simple as implementing this empty interface. - * Doing so will make all the blocks, tracks, and entities aware of that the item - * should be treated identically to a crowbar. - * - * @author CovertJaguar - */ -public interface ICrowbar -{ - -} diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/src/common/steampower/turbine/TileEntitySteamPiston.java index 79f2be34..1e9df301 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -46,7 +46,7 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR super.updateEntity(); if(tickCount++ >=10) {tickCount = 0; - + //this.pos += 1; if(pos >= 8){pos = 0;} //++tCount;if(tCount > 120){tCount = 0;} int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); From d65bd5c89fd010d98af6b84b184940bd83fc4459 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sun, 2 Dec 2012 00:36:53 -0500 Subject: [PATCH 106/115] half update and rewrite long story short steam power is undergoing rewriting and basicPipies is now basic Utilties which has its own repo again. Some minor changes are removal of GUIs from steam piston and boiler. Boiler will become a heat unit of some kind later so a GUI no longer makes since. Same for the steam piston which you can get its force output using the presure guage. Also electric gen is now moved to basic Utilities in case steam power is not installed to use it. --- .../common/basicpipes/BasicPipesMain.java | 442 ++++----- .../common/basicpipes/LTanks/ItemTank.java | 258 +++--- .../basicpipes/LTanks/TileEntityLTank.java | 420 ++++----- .../src}/common/basicpipes/PipeProxy.java | 112 +-- .../basicpipes/conductors/BlockPipe.java | 180 ++-- .../basicpipes/conductors/BlockRod.java | 166 ++-- .../basicpipes/conductors/ItemGuage.java | 228 ++--- .../basicpipes/conductors/ItemParts.java | 124 +-- .../basicpipes/conductors/ItemPipe.java | 258 +++--- .../basicpipes/conductors/TileEntityPipe.java | 420 ++++----- .../basicpipes/conductors/TileEntityRod.java | 274 +++--- .../basicpipes/machines/BlockMachine.java | 158 ++-- .../basicpipes/machines/BlockValve.java | 358 ++++---- .../basicpipes/machines/ItemMachine.java | 246 ++--- .../common/basicpipes/machines/ItemValve.java | 250 +++--- .../machines/TileEntityCondenser.java | 220 ++--- .../basicpipes/machines/TileEntityPump.java | 280 +++--- .../basicpipes/machines/TileEntityValve.java | 218 ++--- .../src}/common/basicpipes/mcmod.info | 40 +- .../common/basicpipes/pipes/api/Beam.java | 52 +- .../basicpipes/pipes/api/IBeamProducer.java | 52 +- .../basicpipes/pipes/api/IHeatProducer.java | 30 +- .../basicpipes/pipes/api/ILiquidConsumer.java | 78 +- .../basicpipes/pipes/api/ILiquidProducer.java | 74 +- .../basicpipes/pipes/api/IMechanical.java | 72 +- .../basicpipes/pipes/api/IStorageTank.java | 10 +- .../common/basicpipes/pipes/api/Liquid.java | 128 +-- .../common/basicpipes/pipes/api/MHelper.java | 250 +++--- {src => 1.4.2/src}/common/mcpmod.info | 34 +- .../src}/common/steampower/BlockMachine.java | 478 +++++----- .../src}/common/steampower/ContainerFake.java | 94 +- .../src}/common/steampower/ItemMachine.java | 130 +-- .../common/steampower/SteamPowerMain.java | 306 +++---- .../src}/common/steampower/SteamProxy.java | 134 +-- .../common/steampower/TileEntityMachine.java | 438 ++++----- .../steampower/boiler/TileEntityBoiler.java | 498 +++++------ .../steampower/burner/ContainerFireBox.java | 84 +- .../steampower/burner/TileEntityFireBox.java | 428 ++++----- .../src}/common/steampower/mcmod.info | 40 +- .../steampower/turbine/BlockGenerator.java | 136 +-- .../steampower/turbine/BlockSteamPiston.java | 228 ++--- .../common/steampower/turbine/ItemEngine.java | 224 ++--- .../steampower/turbine/TileEntityGen.java | 370 ++++---- .../turbine/TileEntitySteamPiston.java | 660 +++++++------- .../steampower/turbine/TileEntitytopGen.java | 24 +- .../basicpipes/ItemRenderHelper.java | 112 +-- .../minecraft/basicpipes/ModelGearRod.java | 278 +++--- .../minecraft/basicpipes/ModelLargePipe.java | 354 ++++---- .../src}/minecraft/basicpipes/ModelPipe.java | 186 ++-- .../src}/minecraft/basicpipes/ModelPump.java | 280 +++--- .../minecraft/basicpipes/PipeClientProxy.java | 68 +- .../minecraft/basicpipes/RenderGearRod.java | 96 +- .../src}/minecraft/basicpipes/RenderPipe.java | 122 +-- .../src}/minecraft/basicpipes/RenderPump.java | 116 +-- .../renderTank/ModelLiquidTank.java | 844 +++++++++--------- .../renderTank/ModelLiquidTankCorner.java | 266 +++--- .../basicpipes/renderTank/RenderLTank.java | 140 +-- {src => 1.4.2/src}/minecraft/mcp.png | Bin .../src}/minecraft/steampower/GUIFireBox.java | 184 ++-- .../minecraft/steampower/GUISteamPiston.java | 158 ++-- .../src}/minecraft/steampower/GuiBoiler.java | 188 ++-- .../steampower/ItemRenderHelperS.java | 124 +-- .../minecraft/steampower/ModelCenterTank.java | 106 +-- .../minecraft/steampower/ModelCornerTank.java | 190 ++-- .../minecraft/steampower/ModelEngine.java | 218 ++--- .../minecraft/steampower/ModelFurnace.java | 154 ++-- .../minecraft/steampower/ModelGenerator.java | 262 +++--- .../src}/minecraft/steampower/ModelTank.java | 296 +++--- .../minecraft/steampower/RenderBoiler.java | 122 +-- .../minecraft/steampower/RenderFurnace.java | 72 +- .../minecraft/steampower/RenderGenerator.java | 72 +- .../steampower/SteamClientProxy.java | 68 +- .../steampower/geared/ModelGearPiston.java | 762 ++++++++-------- .../steampower/geared/RenderGearPiston.java | 100 +-- .../src}/minecraft/textures/BoilerGui.png | Bin .../src}/minecraft/textures/CornerTank.png | Bin .../src}/minecraft/textures/Engine.png | Bin .../src}/minecraft/textures/Furnace.png | Bin .../src}/minecraft/textures/GearRod.png | Bin .../minecraft/textures/GearShaftPiston.png | Bin .../src}/minecraft/textures/Generator.png | Bin .../src}/minecraft/textures/GrinderGUI.png | Bin .../src}/minecraft/textures/Items.png | Bin .../src}/minecraft/textures/SteamGUI.png | Bin .../src}/minecraft/textures/SteelPiston.png | Bin .../src}/minecraft/textures/blocks.png | Bin .../minecraft/textures/pipes/DefaultPipe.png | Bin .../minecraft/textures/pipes/LavaPipe.png | Bin .../minecraft/textures/pipes/SixLavaPipe.png | Bin .../minecraft/textures/pipes/SixOilPipe.png | Bin .../minecraft/textures/pipes/SixSteamPipe.png | Bin .../minecraft/textures/pipes/SixWaterPipe.png | Bin .../minecraft/textures/pipes/SteamPipe.png | Bin .../minecraft/textures/pipes/WaterPipe.png | Bin .../minecraft/textures/pumps/LavaPump.png | Bin .../src}/minecraft/textures/pumps/OilPump.png | Bin .../src}/minecraft/textures/pumps/Pump.png | Bin .../minecraft/textures/pumps/WaterPump.png | Bin .../src}/minecraft/textures/tankBlock.png | Bin .../src}/minecraft/textures/tankTexture.png | Bin .../minecraft/textures/tanks/GUITurret.png | Bin .../minecraft/textures/tanks/LiquidTank.png | Bin .../minecraft/textures/tanks/LiquidTank0.png | Bin .../minecraft/textures/tanks/LiquidTank1.png | Bin .../minecraft/textures/tanks/LiquidTank2.png | Bin .../minecraft/textures/tanks/LiquidTank3.png | Bin .../minecraft/textures/tanks/LiquidTank4.png | Bin .../textures/tanks/LiquidTankCorner.png | Bin .../dark/SteamPower/ItemRenderHelperS.java | 57 ++ .../dark/SteamPower/SteamClientProxy.java | 37 + src/common/dark/SteamPower/SteamMachines.java | 96 ++ .../dark/SteamPower/SteamPowerMain.java | 101 +++ src/common/dark/SteamPower/SteamProxy.java | 67 ++ .../SteamPower/boiler/TileEntityBoiler.java | 266 ++++++ .../SteamPower/firebox/ContainerFireBox.java | 46 + .../dark/SteamPower/firebox/GUIFireBox.java | 93 ++ .../SteamPower/firebox/TileEntityFireBox.java | 268 ++++++ src/common/dark/SteamPower/mcmod.info | 21 + .../SteamPower/renders/ModelCenterTank.java | 53 ++ .../SteamPower/renders/ModelCornerTank.java | 95 ++ .../dark/SteamPower/renders/ModelEngine.java | 109 +++ .../dark/SteamPower/renders/ModelFurnace.java | 77 ++ .../SteamPower/renders/ModelGearPiston.java | 380 ++++++++ .../SteamPower/renders/ModelGenerator.java | 131 +++ .../dark/SteamPower/renders/ModelTank.java | 148 +++ .../dark/SteamPower/renders/RenderBoiler.java | 63 ++ .../SteamPower/renders/RenderFurnace.java | 39 + .../SteamPower/renders/RenderGearPiston.java | 51 ++ .../SteamPower/renders/RenderGenerator.java | 39 + .../steamengine/BlockSteamPiston.java | 138 +++ .../steamengine/ItemSteamPiston.java | 77 ++ .../steamengine/TileEntitySteamPiston.java | 346 +++++++ .../steamengine/TileEntitytopGen.java | 32 + .../dark/SteamPower/textures/CornerTank.png | Bin 0 -> 2658 bytes .../dark/SteamPower/textures/Furnace.png | Bin 0 -> 1455 bytes .../SteamPower/textures/GearShaftPiston.png | Bin 0 -> 706 bytes .../dark/SteamPower/textures/Items.png | Bin 0 -> 29075 bytes .../dark/SteamPower/textures/SteamGUI.png | Bin 0 -> 3750 bytes .../dark/SteamPower/textures/tankBlock.png | Bin 0 -> 2478 bytes .../dark/SteamPower/textures/tankTexture.png | Bin 0 -> 658 bytes 140 files changed, 10651 insertions(+), 7821 deletions(-) rename {src => 1.4.2/src}/common/basicpipes/BasicPipesMain.java (97%) rename {src => 1.4.2/src}/common/basicpipes/LTanks/ItemTank.java (96%) rename {src => 1.4.2/src}/common/basicpipes/LTanks/TileEntityLTank.java (95%) rename {src => 1.4.2/src}/common/basicpipes/PipeProxy.java (94%) rename {src => 1.4.2/src}/common/basicpipes/conductors/BlockPipe.java (97%) rename {src => 1.4.2/src}/common/basicpipes/conductors/BlockRod.java (96%) rename {src => 1.4.2/src}/common/basicpipes/conductors/ItemGuage.java (97%) rename {src => 1.4.2/src}/common/basicpipes/conductors/ItemParts.java (96%) rename {src => 1.4.2/src}/common/basicpipes/conductors/ItemPipe.java (96%) rename {src => 1.4.2/src}/common/basicpipes/conductors/TileEntityPipe.java (96%) rename {src => 1.4.2/src}/common/basicpipes/conductors/TileEntityRod.java (96%) rename {src => 1.4.2/src}/common/basicpipes/machines/BlockMachine.java (95%) rename {src => 1.4.2/src}/common/basicpipes/machines/BlockValve.java (95%) rename {src => 1.4.2/src}/common/basicpipes/machines/ItemMachine.java (96%) rename {src => 1.4.2/src}/common/basicpipes/machines/ItemValve.java (96%) rename {src => 1.4.2/src}/common/basicpipes/machines/TileEntityCondenser.java (95%) rename {src => 1.4.2/src}/common/basicpipes/machines/TileEntityPump.java (95%) rename {src => 1.4.2/src}/common/basicpipes/machines/TileEntityValve.java (95%) rename {src => 1.4.2/src}/common/basicpipes/mcmod.info (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/Beam.java (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/IBeamProducer.java (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/IHeatProducer.java (97%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/ILiquidConsumer.java (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/ILiquidProducer.java (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/IMechanical.java (96%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/IStorageTank.java (94%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/Liquid.java (97%) rename {src => 1.4.2/src}/common/basicpipes/pipes/api/MHelper.java (96%) rename {src => 1.4.2/src}/common/mcpmod.info (96%) rename {src => 1.4.2/src}/common/steampower/BlockMachine.java (97%) rename {src => 1.4.2/src}/common/steampower/ContainerFake.java (96%) rename {src => 1.4.2/src}/common/steampower/ItemMachine.java (96%) rename {src => 1.4.2/src}/common/steampower/SteamPowerMain.java (97%) rename {src => 1.4.2/src}/common/steampower/SteamProxy.java (96%) rename {src => 1.4.2/src}/common/steampower/TileEntityMachine.java (96%) rename {src => 1.4.2/src}/common/steampower/boiler/TileEntityBoiler.java (96%) rename {src => 1.4.2/src}/common/steampower/burner/ContainerFireBox.java (96%) rename {src => 1.4.2/src}/common/steampower/burner/TileEntityFireBox.java (96%) rename {src => 1.4.2/src}/common/steampower/mcmod.info (96%) rename {src => 1.4.2/src}/common/steampower/turbine/BlockGenerator.java (96%) rename {src => 1.4.2/src}/common/steampower/turbine/BlockSteamPiston.java (96%) rename {src => 1.4.2/src}/common/steampower/turbine/ItemEngine.java (96%) rename {src => 1.4.2/src}/common/steampower/turbine/TileEntityGen.java (95%) rename {src => 1.4.2/src}/common/steampower/turbine/TileEntitySteamPiston.java (95%) rename {src => 1.4.2/src}/common/steampower/turbine/TileEntitytopGen.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/ItemRenderHelper.java (97%) rename {src => 1.4.2/src}/minecraft/basicpipes/ModelGearRod.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/ModelLargePipe.java (97%) rename {src => 1.4.2/src}/minecraft/basicpipes/ModelPipe.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/ModelPump.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/PipeClientProxy.java (97%) rename {src => 1.4.2/src}/minecraft/basicpipes/RenderGearRod.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/RenderPipe.java (97%) rename {src => 1.4.2/src}/minecraft/basicpipes/RenderPump.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/renderTank/ModelLiquidTank.java (97%) rename {src => 1.4.2/src}/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java (96%) rename {src => 1.4.2/src}/minecraft/basicpipes/renderTank/RenderLTank.java (96%) rename {src => 1.4.2/src}/minecraft/mcp.png (100%) rename {src => 1.4.2/src}/minecraft/steampower/GUIFireBox.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/GUISteamPiston.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/GuiBoiler.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/ItemRenderHelperS.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/ModelCenterTank.java (95%) rename {src => 1.4.2/src}/minecraft/steampower/ModelCornerTank.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/ModelEngine.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/ModelFurnace.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/ModelGenerator.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/ModelTank.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/RenderBoiler.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/RenderFurnace.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/RenderGenerator.java (96%) rename {src => 1.4.2/src}/minecraft/steampower/SteamClientProxy.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/geared/ModelGearPiston.java (97%) rename {src => 1.4.2/src}/minecraft/steampower/geared/RenderGearPiston.java (96%) rename {src => 1.4.2/src}/minecraft/textures/BoilerGui.png (100%) rename {src => 1.4.2/src}/minecraft/textures/CornerTank.png (100%) rename {src => 1.4.2/src}/minecraft/textures/Engine.png (100%) rename {src => 1.4.2/src}/minecraft/textures/Furnace.png (100%) rename {src => 1.4.2/src}/minecraft/textures/GearRod.png (100%) rename {src => 1.4.2/src}/minecraft/textures/GearShaftPiston.png (100%) rename {src => 1.4.2/src}/minecraft/textures/Generator.png (100%) rename {src => 1.4.2/src}/minecraft/textures/GrinderGUI.png (100%) rename {src => 1.4.2/src}/minecraft/textures/Items.png (100%) rename {src => 1.4.2/src}/minecraft/textures/SteamGUI.png (100%) rename {src => 1.4.2/src}/minecraft/textures/SteelPiston.png (100%) rename {src => 1.4.2/src}/minecraft/textures/blocks.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/DefaultPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/LavaPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/SixLavaPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/SixOilPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/SixSteamPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/SixWaterPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/SteamPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pipes/WaterPipe.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pumps/LavaPump.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pumps/OilPump.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pumps/Pump.png (100%) rename {src => 1.4.2/src}/minecraft/textures/pumps/WaterPump.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tankBlock.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tankTexture.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/GUITurret.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank0.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank1.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank2.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank3.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTank4.png (100%) rename {src => 1.4.2/src}/minecraft/textures/tanks/LiquidTankCorner.png (100%) create mode 100644 src/common/dark/SteamPower/ItemRenderHelperS.java create mode 100644 src/common/dark/SteamPower/SteamClientProxy.java create mode 100644 src/common/dark/SteamPower/SteamMachines.java create mode 100644 src/common/dark/SteamPower/SteamPowerMain.java create mode 100644 src/common/dark/SteamPower/SteamProxy.java create mode 100644 src/common/dark/SteamPower/boiler/TileEntityBoiler.java create mode 100644 src/common/dark/SteamPower/firebox/ContainerFireBox.java create mode 100644 src/common/dark/SteamPower/firebox/GUIFireBox.java create mode 100644 src/common/dark/SteamPower/firebox/TileEntityFireBox.java create mode 100644 src/common/dark/SteamPower/mcmod.info create mode 100644 src/common/dark/SteamPower/renders/ModelCenterTank.java create mode 100644 src/common/dark/SteamPower/renders/ModelCornerTank.java create mode 100644 src/common/dark/SteamPower/renders/ModelEngine.java create mode 100644 src/common/dark/SteamPower/renders/ModelFurnace.java create mode 100644 src/common/dark/SteamPower/renders/ModelGearPiston.java create mode 100644 src/common/dark/SteamPower/renders/ModelGenerator.java create mode 100644 src/common/dark/SteamPower/renders/ModelTank.java create mode 100644 src/common/dark/SteamPower/renders/RenderBoiler.java create mode 100644 src/common/dark/SteamPower/renders/RenderFurnace.java create mode 100644 src/common/dark/SteamPower/renders/RenderGearPiston.java create mode 100644 src/common/dark/SteamPower/renders/RenderGenerator.java create mode 100644 src/common/dark/SteamPower/steamengine/BlockSteamPiston.java create mode 100644 src/common/dark/SteamPower/steamengine/ItemSteamPiston.java create mode 100644 src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java create mode 100644 src/common/dark/SteamPower/steamengine/TileEntitytopGen.java create mode 100644 src/minecraft/dark/SteamPower/textures/CornerTank.png create mode 100644 src/minecraft/dark/SteamPower/textures/Furnace.png create mode 100644 src/minecraft/dark/SteamPower/textures/GearShaftPiston.png create mode 100644 src/minecraft/dark/SteamPower/textures/Items.png create mode 100644 src/minecraft/dark/SteamPower/textures/SteamGUI.png create mode 100644 src/minecraft/dark/SteamPower/textures/tankBlock.png create mode 100644 src/minecraft/dark/SteamPower/textures/tankTexture.png diff --git a/src/common/basicpipes/BasicPipesMain.java b/1.4.2/src/common/basicpipes/BasicPipesMain.java similarity index 97% rename from src/common/basicpipes/BasicPipesMain.java rename to 1.4.2/src/common/basicpipes/BasicPipesMain.java index e1b903af..fef619c3 100644 --- a/src/common/basicpipes/BasicPipesMain.java +++ b/1.4.2/src/common/basicpipes/BasicPipesMain.java @@ -1,221 +1,221 @@ -package basicpipes; - -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 universalelectricity.prefab.network.PacketManager; -import basicpipes.LTanks.ItemTank; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.BlockPipe; -import basicpipes.conductors.BlockRod; -import basicpipes.conductors.ItemGuage; -import basicpipes.conductors.ItemParts; -import basicpipes.conductors.ItemPipe; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.BlockMachine; -import basicpipes.machines.BlockValve; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; -import cpw.mods.fml.common.Mod; -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.SidedProxy; -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 = "basicPipes", name = "Basic Pipes", version = "1.9", dependencies = "after:UniversalElectricity") -@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class BasicPipesMain { - - public BasicPipesMain instance; - - @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") - public static PipeProxy proxy; - static Configuration config = new Configuration((new File( - cpw.mods.fml.common.Loader.instance().getConfigDir(), - "/UniversalElectricity/BasicPipes.cfg"))); - public static int pipeID = configurationProperties(); - private static int partID; - private static int ppipeID; - public static int machineID; - private static int toolID; - private static int tankID; - public static int valveID; - public static int rodID; - public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); - public static Block machine = new BlockMachine(machineID) - .setBlockName("pump"); - public static Block valve = new BlockValve(valveID).setBlockName("valve"); - public static Block rod = new BlockRod(rodID); - public static Item parts = new ItemParts(partID); - public static Item itemPipes = new ItemPipe(ppipeID); - public static Item itemTank = new ItemTank(tankID); - public static Item gauge = new ItemGuage(toolID); - - public static String channel = "Pipes"; - public static String textureFile = "/textures"; - public static boolean ueLoaded = false; - - public static int configurationProperties() { - config.load(); - pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "PipeBlock", 155).value); - machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "machineBlock", 156).value); - valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "ValveBlock", 157).value); - rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "gearBlock", 158).value); - partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "parts", 23022).value); - ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "pipes", 23023).value); - toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "ToolID", 23024).value); - tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "tankID", 23025).value); - config.save(); - return pipeID; - } - - @PreInit - public void preInit(FMLPreInitializationEvent event) { - proxy.preInit(); - GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(rod); - GameRegistry.registerBlock(machine, - basicpipes.machines.ItemMachine.class); - } - - @Init - public void load(FMLInitializationEvent evt) { - // register - proxy.init(); - GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); - GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); - GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); - GameRegistry.registerTileEntity(TileEntityLTank.class, "ltank"); - // Names and lang stuff - // Pipe Names - for (int i = 0; i < Liquid.values().length; i++) { - LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), - Liquid.getLiquid(i).lName + " Pipe"); - } - for (int i = 0; i < Liquid.values().length; i++) { - LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), - Liquid.getLiquid(i).lName + " Tank"); - } - // Pump - LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); - LanguageRegistry.addName((new ItemStack(machine, 1, 4)), - "WaterCondensor"); - LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); - // Tools - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); - // Parts - LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); - LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); - } - - @PostInit - public void postInit(FMLPostInitializationEvent event) { - proxy.postInit(); - GameRegistry.addRecipe(new ItemStack(this.gauge, 1, 0), new Object[] { - "TVT"," T ", 'V', new ItemStack(parts,1,7), 'T',new ItemStack(parts,1,1) }); - //iron tube - GameRegistry.addRecipe(new ItemStack(parts, 2, 1), new Object[] { - "@@@", '@', Item.ingotIron }); - //obby tube - GameRegistry.addRecipe(new ItemStack(parts, 2, 2), new Object[] { - "@@@", '@', Block.obsidian }); - //nether tube - GameRegistry - .addRecipe(new ItemStack(parts, 2, 3), - new Object[] { "N@N", 'N', Block.netherrack, '@', - new ItemStack(parts, 2, 2) }); - //seal - GameRegistry.addRecipe(new ItemStack(parts, 2, 4), new Object[] { "@@", - "@@", '@', Item.leather }); - //slime steal - GameRegistry.addShapelessRecipe(new ItemStack(parts, 1, 5), - new Object[] { new ItemStack(parts, 1, 4), - new ItemStack(Item.slimeBall, 1) });// stick seal - // crafting pipes - // {"black", "red", "green", "brown", "blue", "purple", "cyan", - // "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", - // "orange", "white"}; - GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", - 'I', Item.ingotIron, '@', new ItemStack(parts, 1, 1) }); - // water - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 1), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 4) }); - // lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 2), - new Object[] { new ItemStack(parts, 1, 2), - new ItemStack(Item.dyePowder, 1, 1) }); - // oil - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 3), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 0) }); - // fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 4), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 11) }); - GameRegistry.addRecipe(new ItemStack(parts, 1, 7), new Object[] { - "T@T", 'T', new ItemStack(parts, 1, 1), '@', Block.lever });// valve - - GameRegistry.addRecipe(new ItemStack(parts, 1, 6), new Object[] { - " @ ", "@ @", " @ ", '@', Item.ingotIron });// tank - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 0), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 15) }); - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 1), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 4) }); - // lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 2), - new Object[] { new ItemStack(parts, 1, 6), Block.obsidian, - Block.obsidian, Block.obsidian, Block.obsidian }); - // oil - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 3), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 0) }); - // fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 4), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 11) }); - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 0), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4) }); - GameRegistry.addRecipe(new ItemStack(machine, 1, 0), new Object[] { - "@T@", "BPB", "@P@", '@', new ItemStack(Item.ingotIron, 2), - 'B', new ItemStack(parts, 1, 7), 'P', - new ItemStack(Block.pistonBase), 'T', - new ItemStack(parts, 1, 6) }); - - } - -} +package basicpipes; + +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 universalelectricity.prefab.network.PacketManager; +import basicpipes.LTanks.ItemTank; +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.BlockPipe; +import basicpipes.conductors.BlockRod; +import basicpipes.conductors.ItemGuage; +import basicpipes.conductors.ItemParts; +import basicpipes.conductors.ItemPipe; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; +import basicpipes.machines.BlockMachine; +import basicpipes.machines.BlockValve; +import basicpipes.machines.TileEntityPump; +import basicpipes.pipes.api.Liquid; +import cpw.mods.fml.common.Mod; +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.SidedProxy; +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 = "basicPipes", name = "Basic Pipes", version = "1.9", dependencies = "after:UniversalElectricity") +@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class BasicPipesMain { + + public BasicPipesMain instance; + + @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") + public static PipeProxy proxy; + static Configuration config = new Configuration((new File( + cpw.mods.fml.common.Loader.instance().getConfigDir(), + "/UniversalElectricity/BasicPipes.cfg"))); + public static int pipeID = configurationProperties(); + private static int partID; + private static int ppipeID; + public static int machineID; + private static int toolID; + private static int tankID; + public static int valveID; + public static int rodID; + public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); + public static Block machine = new BlockMachine(machineID) + .setBlockName("pump"); + public static Block valve = new BlockValve(valveID).setBlockName("valve"); + public static Block rod = new BlockRod(rodID); + public static Item parts = new ItemParts(partID); + public static Item itemPipes = new ItemPipe(ppipeID); + public static Item itemTank = new ItemTank(tankID); + public static Item gauge = new ItemGuage(toolID); + + public static String channel = "Pipes"; + public static String textureFile = "/textures"; + public static boolean ueLoaded = false; + + public static int configurationProperties() { + config.load(); + pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "PipeBlock", 155).value); + machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "machineBlock", 156).value); + valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "ValveBlock", 157).value); + rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "gearBlock", 158).value); + partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "parts", 23022).value); + ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "pipes", 23023).value); + toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "ToolID", 23024).value); + tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "tankID", 23025).value); + config.save(); + return pipeID; + } + + @PreInit + public void preInit(FMLPreInitializationEvent event) { + proxy.preInit(); + GameRegistry.registerBlock(pipe); + GameRegistry.registerBlock(rod); + GameRegistry.registerBlock(machine, + basicpipes.machines.ItemMachine.class); + } + + @Init + public void load(FMLInitializationEvent evt) { + // register + proxy.init(); + GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); + GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); + GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); + GameRegistry.registerTileEntity(TileEntityLTank.class, "ltank"); + // Names and lang stuff + // Pipe Names + for (int i = 0; i < Liquid.values().length; i++) { + LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), + Liquid.getLiquid(i).lName + " Pipe"); + } + for (int i = 0; i < Liquid.values().length; i++) { + LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), + Liquid.getLiquid(i).lName + " Tank"); + } + // Pump + LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); + LanguageRegistry.addName((new ItemStack(machine, 1, 4)), + "WaterCondensor"); + LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); + // Tools + LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); + // Parts + LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); + LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); + LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); + LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); + } + + @PostInit + public void postInit(FMLPostInitializationEvent event) { + proxy.postInit(); + GameRegistry.addRecipe(new ItemStack(this.gauge, 1, 0), new Object[] { + "TVT"," T ", 'V', new ItemStack(parts,1,7), 'T',new ItemStack(parts,1,1) }); + //iron tube + GameRegistry.addRecipe(new ItemStack(parts, 2, 1), new Object[] { + "@@@", '@', Item.ingotIron }); + //obby tube + GameRegistry.addRecipe(new ItemStack(parts, 2, 2), new Object[] { + "@@@", '@', Block.obsidian }); + //nether tube + GameRegistry + .addRecipe(new ItemStack(parts, 2, 3), + new Object[] { "N@N", 'N', Block.netherrack, '@', + new ItemStack(parts, 2, 2) }); + //seal + GameRegistry.addRecipe(new ItemStack(parts, 2, 4), new Object[] { "@@", + "@@", '@', Item.leather }); + //slime steal + GameRegistry.addShapelessRecipe(new ItemStack(parts, 1, 5), + new Object[] { new ItemStack(parts, 1, 4), + new ItemStack(Item.slimeBall, 1) });// stick seal + // crafting pipes + // {"black", "red", "green", "brown", "blue", "purple", "cyan", + // "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", + // "orange", "white"}; + GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", + 'I', Item.ingotIron, '@', new ItemStack(parts, 1, 1) }); + // water + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 1), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 4) }); + // lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 2), + new Object[] { new ItemStack(parts, 1, 2), + new ItemStack(Item.dyePowder, 1, 1) }); + // oil + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 3), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 0) }); + // fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 4), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 11) }); + GameRegistry.addRecipe(new ItemStack(parts, 1, 7), new Object[] { + "T@T", 'T', new ItemStack(parts, 1, 1), '@', Block.lever });// valve + + GameRegistry.addRecipe(new ItemStack(parts, 1, 6), new Object[] { + " @ ", "@ @", " @ ", '@', Item.ingotIron });// tank + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 0), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 15) }); + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 1), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 4) }); + // lava TODO change to use obby pipe and nether items + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 2), + new Object[] { new ItemStack(parts, 1, 6), Block.obsidian, + Block.obsidian, Block.obsidian, Block.obsidian }); + // oil + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 3), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 0) }); + // fuel + GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 4), + new Object[] { new ItemStack(parts, 1, 6), + new ItemStack(parts, 1, 4), + new ItemStack(Item.dyePowder, 1, 11) }); + GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 0), + new Object[] { new ItemStack(parts, 1, 1), + new ItemStack(parts, 1, 4) }); + GameRegistry.addRecipe(new ItemStack(machine, 1, 0), new Object[] { + "@T@", "BPB", "@P@", '@', new ItemStack(Item.ingotIron, 2), + 'B', new ItemStack(parts, 1, 7), 'P', + new ItemStack(Block.pistonBase), 'T', + new ItemStack(parts, 1, 6) }); + + } + +} diff --git a/src/common/basicpipes/LTanks/ItemTank.java b/1.4.2/src/common/basicpipes/LTanks/ItemTank.java similarity index 96% rename from src/common/basicpipes/LTanks/ItemTank.java rename to 1.4.2/src/common/basicpipes/LTanks/ItemTank.java index baf6f196..2f588502 100644 --- a/src/common/basicpipes/LTanks/ItemTank.java +++ b/1.4.2/src/common/basicpipes/LTanks/ItemTank.java @@ -1,130 +1,130 @@ -package basicpipes.LTanks; - -import java.util.List; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemTank extends Item -{ - int index = 64;//64 + 2 rows alloted to pipes - private int spawnID; - - public ItemTank(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("tank"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Tank" : "unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < Liquid.values().length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Pipes"; - } - @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.machineID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,5)) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityLTank) - { - TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; - Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - +package basicpipes.LTanks; + +import java.util.List; + +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.Liquid; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemTank extends Item +{ + int index = 64;//64 + 2 rows alloted to pipes + private int spawnID; + + public ItemTank(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("tank"); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Tank" : "unknown"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < Liquid.values().length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Pipes"; + } + @Override + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.machineID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,5)) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityLTank) + { + TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; + Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + } \ No newline at end of file diff --git a/src/common/basicpipes/LTanks/TileEntityLTank.java b/1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java similarity index 95% rename from src/common/basicpipes/LTanks/TileEntityLTank.java rename to 1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java index 328dc94f..b127bf54 100644 --- a/src/common/basicpipes/LTanks/TileEntityLTank.java +++ b/1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java @@ -1,210 +1,210 @@ -package basicpipes.LTanks; - -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; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IStorageTank; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityLTank extends TileEntity implements IStorageTank,ILiquidProducer,IPacketReceiver{ -public TileEntity[] cc = {null,null,null,null,null,null}; -public Liquid type = Liquid.DEFUALT; -public int LStored = 0; -public int pLStored = 0; -public int LMax = 4; -private int count = 0; -private int count2 = 0; -private boolean firstUpdate = true; -public void updateEntity() -{ - if(++count >= 5) - { - count = 0; - this.cc = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - if(!worldObj.isRemote) - { - MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.LStored,this.getLiquidCapacity(type), type); - if(firstUpdate ||(this.LStored != pLStored)|| count2 >= 100) - { - count2 = 0; - firstUpdate = false; - Packet packet = PacketManager.getPacket(BasicPipesMain.channel, this, new Object[]{type.ordinal(),LStored}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 20); - } - this.pLStored = this.LStored; - } - } -} -public void writeToNBT(NBTTagCompound nbt) -{ - super.writeToNBT(nbt); - nbt.setInteger("Vol", this.LStored); - nbt.setInteger("type", this.type.ordinal()); -} - -@Override -public void readFromNBT(NBTTagCompound nbt) -{ - super.readFromNBT(nbt); - this.LStored = nbt.getInteger("Vol"); - this.type = Liquid.getLiquid(nbt.getInteger("type")); -} - -//-------------------- -//Liquid stuff -//------------------------------------ -@Override -public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) -{ - - if(type == this.type) - { - if(this.LStored < this.getLiquidCapacity(this.type)) - { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); - this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); - return rejectedVolume; - }else - { - TileEntity te = null; - if(this.type.isGas) - { - worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - }else - { - worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - } - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - } - return vol; -} - -@Override -public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.UP) - { - return false; - } - if(!this.type.isGas && side == ForgeDirection.DOWN) - { - return false; - } - return true; - } - return false; -} - -@Override -public int getStoredLiquid(Liquid type) { - if(type == this.type) - { - return LStored; - } - return 0; -} - -@Override -public int getLiquidCapacity(Liquid type) { - if(type == this.type) - { - return LMax; - } - return 0; -} - -public Liquid getType() { - // TODO Auto-generated method stub - return type; -} - -@Override -public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == this.type && this.LStored > 1 && vol > 0) - { - //TODO correct / do math for - LStored--; - return 1; - } - return 0; -} - -@Override -public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.UP) - { - return true; - } - if(!this.type.isGas && side == ForgeDirection.DOWN) - { - return true; - } - } - return false; -} - -@Override -public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.DOWN) - { - return true; - } - if(!this.type.isGas && side == ForgeDirection.UP) - { - return true; - } - } - return false; -} - -@Override -public int presureOutput(Liquid type, ForgeDirection side) { - if(type == this.type) - { - return this.type.defaultPresure; - } - return 0; -} - - -@Override -public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try - { - this.type = Liquid.getLiquid(data.readInt()); - this.LStored = data.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - System.out.print("Fail reading data for Storage tank \n"); - } - -} -public void setType(Liquid dm) { - this.type = dm; - -} -} +package basicpipes.LTanks; + +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; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IStorageTank; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityLTank extends TileEntity implements IStorageTank,ILiquidProducer,IPacketReceiver{ +public TileEntity[] cc = {null,null,null,null,null,null}; +public Liquid type = Liquid.DEFUALT; +public int LStored = 0; +public int pLStored = 0; +public int LMax = 4; +private int count = 0; +private int count2 = 0; +private boolean firstUpdate = true; +public void updateEntity() +{ + if(++count >= 5) + { + count = 0; + this.cc = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + if(!worldObj.isRemote) + { + MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.LStored,this.getLiquidCapacity(type), type); + if(firstUpdate ||(this.LStored != pLStored)|| count2 >= 100) + { + count2 = 0; + firstUpdate = false; + Packet packet = PacketManager.getPacket(BasicPipesMain.channel, this, new Object[]{type.ordinal(),LStored}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 20); + } + this.pLStored = this.LStored; + } + } +} +public void writeToNBT(NBTTagCompound nbt) +{ + super.writeToNBT(nbt); + nbt.setInteger("Vol", this.LStored); + nbt.setInteger("type", this.type.ordinal()); +} + +@Override +public void readFromNBT(NBTTagCompound nbt) +{ + super.readFromNBT(nbt); + this.LStored = nbt.getInteger("Vol"); + this.type = Liquid.getLiquid(nbt.getInteger("type")); +} + +//-------------------- +//Liquid stuff +//------------------------------------ +@Override +public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) +{ + + if(type == this.type) + { + if(this.LStored < this.getLiquidCapacity(this.type)) + { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); + this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); + return rejectedVolume; + }else + { + TileEntity te = null; + if(this.type.isGas) + { + worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + }else + { + worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + } + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } + } + return vol; +} + +@Override +public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return false; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return false; + } + return true; + } + return false; +} + +@Override +public int getStoredLiquid(Liquid type) { + if(type == this.type) + { + return LStored; + } + return 0; +} + +@Override +public int getLiquidCapacity(Liquid type) { + if(type == this.type) + { + return LMax; + } + return 0; +} + +public Liquid getType() { + // TODO Auto-generated method stub + return type; +} + +@Override +public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == this.type && this.LStored > 1 && vol > 0) + { + //TODO correct / do math for + LStored--; + return 1; + } + return 0; +} + +@Override +public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.UP) + { + return true; + } + if(!this.type.isGas && side == ForgeDirection.DOWN) + { + return true; + } + } + return false; +} + +@Override +public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == this.type) + { + if(this.type.isGas && side == ForgeDirection.DOWN) + { + return true; + } + if(!this.type.isGas && side == ForgeDirection.UP) + { + return true; + } + } + return false; +} + +@Override +public int presureOutput(Liquid type, ForgeDirection side) { + if(type == this.type) + { + return this.type.defaultPresure; + } + return 0; +} + + +@Override +public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + try + { + this.type = Liquid.getLiquid(data.readInt()); + this.LStored = data.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + System.out.print("Fail reading data for Storage tank \n"); + } + +} +public void setType(Liquid dm) { + this.type = dm; + +} +} diff --git a/src/common/basicpipes/PipeProxy.java b/1.4.2/src/common/basicpipes/PipeProxy.java similarity index 94% rename from src/common/basicpipes/PipeProxy.java rename to 1.4.2/src/common/basicpipes/PipeProxy.java index 39009dbb..ce0e8cc9 100644 --- a/src/common/basicpipes/PipeProxy.java +++ b/1.4.2/src/common/basicpipes/PipeProxy.java @@ -1,56 +1,56 @@ -package basicpipes; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class PipeProxy implements IGuiHandler -{ - - public void preInit() - { - - } - 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; - } -} +package basicpipes; + +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; +import basicpipes.machines.TileEntityPump; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; + +public class PipeProxy implements IGuiHandler +{ + + public void preInit() + { + + } + 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; + } +} diff --git a/src/common/basicpipes/conductors/BlockPipe.java b/1.4.2/src/common/basicpipes/conductors/BlockPipe.java similarity index 97% rename from src/common/basicpipes/conductors/BlockPipe.java rename to 1.4.2/src/common/basicpipes/conductors/BlockPipe.java index 5664d0c4..aeac6929 100644 --- a/src/common/basicpipes/conductors/BlockPipe.java +++ b/1.4.2/src/common/basicpipes/conductors/BlockPipe.java @@ -1,90 +1,90 @@ -package basicpipes.conductors; - -import java.util.Random; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.EntityItem; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -public class BlockPipe extends BlockContainer -{ - - public BlockPipe(int id) - { - super(id, Material.iron); - this.setBlockName("Pipe"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - this.setHardness(1f); - this.setResistance(3f); - } - public boolean isOpaqueCube(){return false;} - public boolean renderAsNormalBlock(){return false;} - public int getRenderType(){return -1;} - public int idDropped(int par1, Random par2Random, int par3){return 0;} - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - } - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); - } - @Override - public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) - { - return true; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return new TileEntityPipe(); - } - @Override - public void breakBlock(World world, int x, int y, int z,int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - TileEntity ent = world.getBlockTileEntity(x, y, z); - Random furnaceRand = new Random(); - if(ent instanceof TileEntityPipe) - { - TileEntityPipe pipe = (TileEntityPipe) ent; - int meta = pipe.type.ordinal(); - float var8 = furnaceRand.nextFloat() * 0.8F + 0.1F; - float var9 = furnaceRand.nextFloat() * 0.8F + 0.1F; - float var10 = furnaceRand.nextFloat() * 0.8F + 0.1F; - EntityItem var12 = new EntityItem(world, (double)((float)x + var8), (double)((float)y + var9), - (double)((float)z + var10), new ItemStack(BasicPipesMain.itemPipes, 1, meta)); - float var13 = 0.05F; - var12.motionX = (double)((float)furnaceRand.nextGaussian() * var13); - var12.motionY = (double)((float)furnaceRand.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)furnaceRand.nextGaussian() * var13); - world.spawnEntityInWorld(var12); - } - } - - } - - +package basicpipes.conductors; + +import java.util.Random; + +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.EntityItem; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Material; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; + +public class BlockPipe extends BlockContainer +{ + + public BlockPipe(int id) + { + super(id, Material.iron); + this.setBlockName("Pipe"); + this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); + this.setHardness(1f); + this.setResistance(3f); + } + public boolean isOpaqueCube(){return false;} + public boolean renderAsNormalBlock(){return false;} + public int getRenderType(){return -1;} + public int idDropped(int par1, Random par2Random, int par3){return 0;} + @Override + public void onBlockAdded(World world, int x, int y, int z) + { + super.onBlockAdded(world, x, y, z); + } + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor blockID + */ + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) + { + super.onNeighborBlockChange(world, x, y, z, blockID); + } + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); + } + @Override + public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) + { + return true; + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return new TileEntityPipe(); + } + @Override + public void breakBlock(World world, int x, int y, int z,int par5, int par6) + { + super.breakBlock(world, x, y, z, par5, par6); + TileEntity ent = world.getBlockTileEntity(x, y, z); + Random furnaceRand = new Random(); + if(ent instanceof TileEntityPipe) + { + TileEntityPipe pipe = (TileEntityPipe) ent; + int meta = pipe.type.ordinal(); + float var8 = furnaceRand.nextFloat() * 0.8F + 0.1F; + float var9 = furnaceRand.nextFloat() * 0.8F + 0.1F; + float var10 = furnaceRand.nextFloat() * 0.8F + 0.1F; + EntityItem var12 = new EntityItem(world, (double)((float)x + var8), (double)((float)y + var9), + (double)((float)z + var10), new ItemStack(BasicPipesMain.itemPipes, 1, meta)); + float var13 = 0.05F; + var12.motionX = (double)((float)furnaceRand.nextGaussian() * var13); + var12.motionY = (double)((float)furnaceRand.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)furnaceRand.nextGaussian() * var13); + world.spawnEntityInWorld(var12); + } + } + + } + + diff --git a/src/common/basicpipes/conductors/BlockRod.java b/1.4.2/src/common/basicpipes/conductors/BlockRod.java similarity index 96% rename from src/common/basicpipes/conductors/BlockRod.java rename to 1.4.2/src/common/basicpipes/conductors/BlockRod.java index 6c69a42a..370a7330 100644 --- a/src/common/basicpipes/conductors/BlockRod.java +++ b/1.4.2/src/common/basicpipes/conductors/BlockRod.java @@ -1,83 +1,83 @@ -package basicpipes.conductors; - -import basicpipes.ItemRenderHelper; -import steampower.TileEntityMachine; -import net.minecraft.src.Block; -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; -import net.minecraftforge.common.ForgeDirection; - -public class BlockRod extends universalelectricity.prefab.BlockMachine { - - public BlockRod(int par1) { - super("MechanicRod", par1, Material.iron); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int damageDropped(int metadata) - { - return 0; - } - @Override - public void onBlockPlacedBy(World world,int i,int j,int k, EntityLiving player) - { - int angle= MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int meta = 0; - ForgeDirection idr; - int dZ = 0; - int dX = 0; - switch(angle) - { - case 0: meta = 2;dZ--;break; - case 1: meta = 5;dX--;break; - case 2: meta = 3;dZ++;break; - case 3: meta = 4;dX++;break; - } - world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); - } - @Override - public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta >= 5) - { - world.setBlockMetadataWithNotify(x, y, z, 0); - } - else - { - world.setBlockMetadataWithNotify(x,y,z,meta+1); - } - return true; - } - @Override - public TileEntity createNewTileEntity(World var1) - { - return new TileEntityRod(); - } - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return ItemRenderHelper.renderID; - } - -} +package basicpipes.conductors; + +import basicpipes.ItemRenderHelper; +import steampower.TileEntityMachine; +import net.minecraft.src.Block; +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; +import net.minecraftforge.common.ForgeDirection; + +public class BlockRod extends universalelectricity.prefab.BlockMachine { + + public BlockRod(int par1) { + super("MechanicRod", par1, Material.iron); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int damageDropped(int metadata) + { + return 0; + } + @Override + public void onBlockPlacedBy(World world,int i,int j,int k, EntityLiving player) + { + int angle= MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int meta = 0; + ForgeDirection idr; + int dZ = 0; + int dX = 0; + switch(angle) + { + case 0: meta = 2;dZ--;break; + case 1: meta = 5;dX--;break; + case 2: meta = 3;dZ++;break; + case 3: meta = 4;dX++;break; + } + world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); + } + @Override + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta >= 5) + { + world.setBlockMetadataWithNotify(x, y, z, 0); + } + else + { + world.setBlockMetadataWithNotify(x,y,z,meta+1); + } + return true; + } + @Override + public TileEntity createNewTileEntity(World var1) + { + return new TileEntityRod(); + } + public boolean isOpaqueCube() + { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return ItemRenderHelper.renderID; + } + +} diff --git a/src/common/basicpipes/conductors/ItemGuage.java b/1.4.2/src/common/basicpipes/conductors/ItemGuage.java similarity index 97% rename from src/common/basicpipes/conductors/ItemGuage.java rename to 1.4.2/src/common/basicpipes/conductors/ItemGuage.java index dd14d18f..e36c9757 100644 --- a/src/common/basicpipes/conductors/ItemGuage.java +++ b/1.4.2/src/common/basicpipes/conductors/ItemGuage.java @@ -1,114 +1,114 @@ -package basicpipes.conductors; - -import java.util.List; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.pipes.api.IMechanical; -import basicpipes.pipes.api.Liquid; - -public class ItemGuage extends Item -{ - private int spawnID; - - public ItemGuage(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("guage"); - this.setCreativeTab(CreativeTabs.tabTools); - this.setMaxStackSize(1); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(this, 1, 0)); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 24; - } - return this.iconIndex; - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "guage"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - if(!par3World.isRemote) - { - if(itemStack.getItemDamage() == 0) - { - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - Liquid type = pipeEntity.getType(); - int steam = pipeEntity.getStoredLiquid(type); - int pressure = pipeEntity.presure; - String typeName = type.lName; - String print = "Error"; - - print = typeName +" " + steam +" @ "+pressure+"PSI"; - - player.sendChatToPlayer(print); - return true; - } - if(blockEntity instanceof TileEntityLTank) - { - TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; - Liquid type = pipeEntity.getType(); - int steam = pipeEntity.getStoredLiquid(type); - String typeName = type.lName; - String print = "Error"; - - print = typeName +" " + steam; - - player.sendChatToPlayer(print); - return true; - } - if(blockEntity instanceof IMechanical) - { - IMechanical rod = (IMechanical) blockEntity; - int steam = rod.getForce(); - int pressure = rod.getAnimationPos(); - String print = "Error"; - - print = " " + steam +"N "+pressure*45+"degrees"; - - player.sendChatToPlayer(print); - return true; - } - } - - } - - return false; - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "PipeGuage"; - } - return this.getItemName(); - } -} +package basicpipes.conductors; + +import java.util.List; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import basicpipes.BasicPipesMain; +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.pipes.api.IMechanical; +import basicpipes.pipes.api.Liquid; + +public class ItemGuage extends Item +{ + private int spawnID; + + public ItemGuage(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("guage"); + this.setCreativeTab(CreativeTabs.tabTools); + this.setMaxStackSize(1); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(this, 1, 0)); + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 0: return 24; + } + return this.iconIndex; + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "guage"; + } + @Override + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + if(!par3World.isRemote) + { + if(itemStack.getItemDamage() == 0) + { + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + Liquid type = pipeEntity.getType(); + int steam = pipeEntity.getStoredLiquid(type); + int pressure = pipeEntity.presure; + String typeName = type.lName; + String print = "Error"; + + print = typeName +" " + steam +" @ "+pressure+"PSI"; + + player.sendChatToPlayer(print); + return true; + } + if(blockEntity instanceof TileEntityLTank) + { + TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; + Liquid type = pipeEntity.getType(); + int steam = pipeEntity.getStoredLiquid(type); + String typeName = type.lName; + String print = "Error"; + + print = typeName +" " + steam; + + player.sendChatToPlayer(print); + return true; + } + if(blockEntity instanceof IMechanical) + { + IMechanical rod = (IMechanical) blockEntity; + int steam = rod.getForce(); + int pressure = rod.getAnimationPos(); + String print = "Error"; + + print = " " + steam +"N "+pressure*45+"degrees"; + + player.sendChatToPlayer(print); + return true; + } + } + + } + + return false; + } + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "PipeGuage"; + } + return this.getItemName(); + } +} diff --git a/src/common/basicpipes/conductors/ItemParts.java b/1.4.2/src/common/basicpipes/conductors/ItemParts.java similarity index 96% rename from src/common/basicpipes/conductors/ItemParts.java rename to 1.4.2/src/common/basicpipes/conductors/ItemParts.java index a8821141..59fe3b86 100644 --- a/src/common/basicpipes/conductors/ItemParts.java +++ b/1.4.2/src/common/basicpipes/conductors/ItemParts.java @@ -1,62 +1,62 @@ -package basicpipes.conductors; - -import java.util.ArrayList; -import java.util.List; - -import basicpipes.BasicPipesMain; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; - -public class ItemParts extends Item{ - String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; - int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - this.setCreativeTab(CreativeTabs.tabMaterials); - } - @Override - public int getIconFromDamage(int par1) - { - if(par1 < iconID.length) - { - return iconID[par1]; - } - return par1; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return names[itemstack.getItemDamage()]; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < names.length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "parts"; - } -} - - - - - - +package basicpipes.conductors; + +import java.util.ArrayList; +import java.util.List; + +import basicpipes.BasicPipesMain; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.World; + +public class ItemParts extends Item{ + String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; + int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these + public ItemParts(int par1) + { + super(par1); + this.setItemName("Parts"); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setMaxStackSize(64); + this.setCreativeTab(CreativeTabs.tabMaterials); + } + @Override + public int getIconFromDamage(int par1) + { + if(par1 < iconID.length) + { + return iconID[par1]; + } + return par1; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return names[itemstack.getItemDamage()]; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < names.length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "parts"; + } +} + + + + + + diff --git a/src/common/basicpipes/conductors/ItemPipe.java b/1.4.2/src/common/basicpipes/conductors/ItemPipe.java similarity index 96% rename from src/common/basicpipes/conductors/ItemPipe.java rename to 1.4.2/src/common/basicpipes/conductors/ItemPipe.java index c0b77986..b22999a6 100644 --- a/src/common/basicpipes/conductors/ItemPipe.java +++ b/1.4.2/src/common/basicpipes/conductors/ItemPipe.java @@ -1,130 +1,130 @@ -package basicpipes.conductors; - -import java.util.List; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemPipe extends Item -{ - int index = 32;//32 + 4 rows alloted to pipes - private int spawnID; - - public ItemPipe(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("pipe"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Pipe" : "Empty Pipe"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < Liquid.values().length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Pipes"; - } - @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.pipeID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - +package basicpipes.conductors; + +import java.util.List; + +import basicpipes.BasicPipesMain; +import basicpipes.pipes.api.Liquid; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemPipe extends Item +{ + int index = 32;//32 + 4 rows alloted to pipes + private int spawnID; + + public ItemPipe(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("pipe"); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Pipe" : "Empty Pipe"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + for(int i = 0; i < Liquid.values().length; i++) + { + par3List.add(new ItemStack(this, 1, i)); + } + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Pipes"; + } + @Override + public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.pipeID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + if(blockEntity instanceof TileEntityPipe) + { + TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; + Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); + pipeEntity.setType(dm); + } + } + + --par1ItemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + } \ No newline at end of file diff --git a/src/common/basicpipes/conductors/TileEntityPipe.java b/1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java similarity index 96% rename from src/common/basicpipes/conductors/TileEntityPipe.java rename to 1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java index a1dad79d..628dd6ca 100644 --- a/src/common/basicpipes/conductors/TileEntityPipe.java +++ b/1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java @@ -1,210 +1,210 @@ -package basicpipes.conductors; - -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; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityPipe extends TileEntity implements ILiquidConsumer, - IPacketReceiver { - protected Liquid type = Liquid.DEFUALT; - - public int capacity = 2; - public int presure = 0; - public int connectedUnits = 0; - public int liquidStored = 0; - private int count = 0; - private int count2 = 0; - - protected boolean firstUpdate = true; - - public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; - - public int getPressure() { - return this.presure; - } - - @Override - public void updateEntity() { - int highestPressure = 0; - if (++count >= 5) { - this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, - yCoord, zCoord); - for (int i = 0; i < 6; i++) { - - if (connectedBlocks[i] instanceof ILiquidConsumer - && ((ILiquidConsumer) connectedBlocks[i]) - .canRecieveLiquid(this.type, ForgeDirection - .getOrientation(i).getOpposite())) { - this.connectedUnits++; - if (connectedBlocks[i] instanceof TileEntityPipe) { - if (((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) { - highestPressure = ((TileEntityPipe) connectedBlocks[i]) - .getPressure(); - } - } - } else if (connectedBlocks[i] instanceof ILiquidProducer - && ((ILiquidProducer) connectedBlocks[i]) - .canProduceLiquid(this.type, ForgeDirection - .getOrientation(i).getOpposite())) { - this.connectedUnits++; - if (((ILiquidProducer) connectedBlocks[i]) - .canProducePresure(this.type, - ForgeDirection.getOrientation(i)) - && ((ILiquidProducer) connectedBlocks[i]) - .presureOutput(this.type, ForgeDirection - .getOrientation(i).getOpposite()) > highestPressure) { - highestPressure = ((ILiquidProducer) connectedBlocks[i]) - .presureOutput(this.type, - ForgeDirection.getOrientation(i)); - } - } else { - connectedBlocks[i] = null; - } - } - if (!worldObj.isRemote) { - if (firstUpdate || count2++ >= 10) { - count2 = 0; - firstUpdate = false; - Packet packet = PacketManager.getPacket("Pipes", this, - new Object[] { this.type.ordinal() }); - PacketManager.sendPacketToClients(packet, worldObj, - Vector3.get(this), 60); - } - this.presure = highestPressure - 1; - for (int i = 0; i < 6; i++) { - if (connectedBlocks[i] instanceof ILiquidProducer) { - int vol = ((ILiquidProducer) connectedBlocks[i]) - .onProduceLiquid(this.type, this.capacity - - this.liquidStored, ForgeDirection - .getOrientation(i).getOpposite()); - this.liquidStored = Math.min(this.liquidStored + vol, - this.capacity); - } - if (connectedBlocks[i] instanceof ILiquidConsumer - && this.liquidStored > 0 && this.presure > 0) { - if (connectedBlocks[i] instanceof TileEntityPipe) { - this.liquidStored--; - int vol = ((ILiquidConsumer) connectedBlocks[i]) - .onReceiveLiquid(this.type, Math.max( - this.liquidStored, 1), - ForgeDirection.getOrientation(i) - .getOpposite()); - this.liquidStored += vol; - } else { - this.liquidStored = ((ILiquidConsumer) connectedBlocks[i]) - .onReceiveLiquid(this.type, - this.liquidStored, ForgeDirection - .getOrientation(i) - .getOpposite()); - } - } - } - } - } - } - - // --------------- - // liquid stuff - // --------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if (type == this.type) { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - - this.capacity, 0); - this.liquidStored = Math.min( - Math.max((liquidStored + vol - rejectedVolume), 0), - this.capacity); - return rejectedVolume; - } - return vol; - } - - /** - * @return Return the stored volume in this pipe. - */ - @Override - public int getStoredLiquid(Liquid type) { - if (type == this.type) { - return this.liquidStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if (type == this.type) { - return this.capacity; - } - return 0; - } - - // find wether or not this side of X block can recieve X liquid type. Also - // use to determine connection of a pipe - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if (type == this.type) { - return true; - } - return false; - } - - // returns liquid type - public Liquid getType() { - return this.type; - } - - // used by the item to set the liquid type on spawn - public void setType(Liquid rType) { - this.type = rType; - - } - - // --------------------- - // data - // -------------------- - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try { - int type = data.readInt(); - if (worldObj.isRemote) { - this.type = Liquid.getLiquid(type); - } - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type.ordinal()); - } -} +package basicpipes.conductors; + +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; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityPipe extends TileEntity implements ILiquidConsumer, + IPacketReceiver { + protected Liquid type = Liquid.DEFUALT; + + public int capacity = 2; + public int presure = 0; + public int connectedUnits = 0; + public int liquidStored = 0; + private int count = 0; + private int count2 = 0; + + protected boolean firstUpdate = true; + + public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; + + public int getPressure() { + return this.presure; + } + + @Override + public void updateEntity() { + int highestPressure = 0; + if (++count >= 5) { + this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, + yCoord, zCoord); + for (int i = 0; i < 6; i++) { + + if (connectedBlocks[i] instanceof ILiquidConsumer + && ((ILiquidConsumer) connectedBlocks[i]) + .canRecieveLiquid(this.type, ForgeDirection + .getOrientation(i).getOpposite())) { + this.connectedUnits++; + if (connectedBlocks[i] instanceof TileEntityPipe) { + if (((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) { + highestPressure = ((TileEntityPipe) connectedBlocks[i]) + .getPressure(); + } + } + } else if (connectedBlocks[i] instanceof ILiquidProducer + && ((ILiquidProducer) connectedBlocks[i]) + .canProduceLiquid(this.type, ForgeDirection + .getOrientation(i).getOpposite())) { + this.connectedUnits++; + if (((ILiquidProducer) connectedBlocks[i]) + .canProducePresure(this.type, + ForgeDirection.getOrientation(i)) + && ((ILiquidProducer) connectedBlocks[i]) + .presureOutput(this.type, ForgeDirection + .getOrientation(i).getOpposite()) > highestPressure) { + highestPressure = ((ILiquidProducer) connectedBlocks[i]) + .presureOutput(this.type, + ForgeDirection.getOrientation(i)); + } + } else { + connectedBlocks[i] = null; + } + } + if (!worldObj.isRemote) { + if (firstUpdate || count2++ >= 10) { + count2 = 0; + firstUpdate = false; + Packet packet = PacketManager.getPacket("Pipes", this, + new Object[] { this.type.ordinal() }); + PacketManager.sendPacketToClients(packet, worldObj, + Vector3.get(this), 60); + } + this.presure = highestPressure - 1; + for (int i = 0; i < 6; i++) { + if (connectedBlocks[i] instanceof ILiquidProducer) { + int vol = ((ILiquidProducer) connectedBlocks[i]) + .onProduceLiquid(this.type, this.capacity + - this.liquidStored, ForgeDirection + .getOrientation(i).getOpposite()); + this.liquidStored = Math.min(this.liquidStored + vol, + this.capacity); + } + if (connectedBlocks[i] instanceof ILiquidConsumer + && this.liquidStored > 0 && this.presure > 0) { + if (connectedBlocks[i] instanceof TileEntityPipe) { + this.liquidStored--; + int vol = ((ILiquidConsumer) connectedBlocks[i]) + .onReceiveLiquid(this.type, Math.max( + this.liquidStored, 1), + ForgeDirection.getOrientation(i) + .getOpposite()); + this.liquidStored += vol; + } else { + this.liquidStored = ((ILiquidConsumer) connectedBlocks[i]) + .onReceiveLiquid(this.type, + this.liquidStored, ForgeDirection + .getOrientation(i) + .getOpposite()); + } + } + } + } + } + } + + // --------------- + // liquid stuff + // --------------- + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if (type == this.type) { + int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) + - this.capacity, 0); + this.liquidStored = Math.min( + Math.max((liquidStored + vol - rejectedVolume), 0), + this.capacity); + return rejectedVolume; + } + return vol; + } + + /** + * @return Return the stored volume in this pipe. + */ + @Override + public int getStoredLiquid(Liquid type) { + if (type == this.type) { + return this.liquidStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if (type == this.type) { + return this.capacity; + } + return 0; + } + + // find wether or not this side of X block can recieve X liquid type. Also + // use to determine connection of a pipe + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { + if (type == this.type) { + return true; + } + return false; + } + + // returns liquid type + public Liquid getType() { + return this.type; + } + + // used by the item to set the liquid type on spawn + public void setType(Liquid rType) { + this.type = rType; + + } + + // --------------------- + // data + // -------------------- + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + try { + int type = data.readInt(); + if (worldObj.isRemote) { + this.type = Liquid.getLiquid(type); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) { + super.readFromNBT(par1NBTTagCompound); + this.liquidStored = par1NBTTagCompound.getInteger("liquid"); + this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("liquid", this.liquidStored); + par1NBTTagCompound.setInteger("type", this.type.ordinal()); + } +} diff --git a/src/common/basicpipes/conductors/TileEntityRod.java b/1.4.2/src/common/basicpipes/conductors/TileEntityRod.java similarity index 96% rename from src/common/basicpipes/conductors/TileEntityRod.java rename to 1.4.2/src/common/basicpipes/conductors/TileEntityRod.java index 73d7c485..a6b70c24 100644 --- a/src/common/basicpipes/conductors/TileEntityRod.java +++ b/1.4.2/src/common/basicpipes/conductors/TileEntityRod.java @@ -1,137 +1,137 @@ -package basicpipes.conductors; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Packet; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.SteamPowerMain; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.pipes.api.IMechanical; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechanical { - - public int pos = 0; - private int force = 0; - private int pForce = 0; - public int aForce = 0; - public int forceMax = 1000; - private int tickCount = 0; - private int posCount = 0; - - private ForgeDirection frontDir; - private ForgeDirection backDir; - - private TileEntity bb; - private TileEntity ff; - @Override - public void updateEntity() - { - super.updateEntity(); - if(tickCount++ >=10) - { tickCount = 0; - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - frontDir = ForgeDirection.getOrientation(meta); - backDir = ForgeDirection.getOrientation(meta).getOpposite(); - bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord, zCoord+backDir.offsetZ); - ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord, zCoord+frontDir.offsetZ); - if(force > 0) - { - int posCountA = (forceMax/force) & 10; - if(posCount++ >= posCountA) - { - pos ++;if(pos > 7){pos = 0;}; - } - } - if(bb instanceof TileEntityRod) - { - this.pos = ((IMechanical)bb).getAnimationPos(); - } - if(!worldObj.isRemote) - { - - if(ff instanceof IMechanical) - { - if(((IMechanical) ff).canInputSide(backDir)) - { - ((IMechanical) ff).applyForce(aForce); - } - } - if(bb instanceof IMechanical) - { - if(((IMechanical) bb).canOutputSide(frontDir)) - { - this.force = ((IMechanical) bb).getForce(); - } - }else - { - this.force -=Math.max(force/10, 0); - } - aForce = Math.max(force - 10,0); - if(this.force != this.pForce) - { - Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); - } - this.pForce = this.force; - } - } - } - @Override - public int getForceSide(ForgeDirection side) { - return aForce; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(side == frontDir) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(side == backDir) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.force = force; - return force; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try - { - this.force = data.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - System.out.print("MechRodDataFailure \n"); - } - - } - @Override - public int getAnimationPos() { - return this.pos; - } - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } -} +package basicpipes.conductors; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.Packet; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.SteamPowerMain; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.IPacketReceiver; +import universalelectricity.prefab.network.PacketManager; +import basicpipes.pipes.api.IMechanical; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechanical { + + public int pos = 0; + private int force = 0; + private int pForce = 0; + public int aForce = 0; + public int forceMax = 1000; + private int tickCount = 0; + private int posCount = 0; + + private ForgeDirection frontDir; + private ForgeDirection backDir; + + private TileEntity bb; + private TileEntity ff; + @Override + public void updateEntity() + { + super.updateEntity(); + if(tickCount++ >=10) + { tickCount = 0; + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + frontDir = ForgeDirection.getOrientation(meta); + backDir = ForgeDirection.getOrientation(meta).getOpposite(); + bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord, zCoord+backDir.offsetZ); + ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord, zCoord+frontDir.offsetZ); + if(force > 0) + { + int posCountA = (forceMax/force) & 10; + if(posCount++ >= posCountA) + { + pos ++;if(pos > 7){pos = 0;}; + } + } + if(bb instanceof TileEntityRod) + { + this.pos = ((IMechanical)bb).getAnimationPos(); + } + if(!worldObj.isRemote) + { + + if(ff instanceof IMechanical) + { + if(((IMechanical) ff).canInputSide(backDir)) + { + ((IMechanical) ff).applyForce(aForce); + } + } + if(bb instanceof IMechanical) + { + if(((IMechanical) bb).canOutputSide(frontDir)) + { + this.force = ((IMechanical) bb).getForce(); + } + }else + { + this.force -=Math.max(force/10, 0); + } + aForce = Math.max(force - 10,0); + if(this.force != this.pForce) + { + Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force}); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + } + this.pForce = this.force; + } + } + } + @Override + public int getForceSide(ForgeDirection side) { + return aForce; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + if(side == frontDir) + { + return true; + } + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(side == backDir) + { + return true; + } + return false; + } + + @Override + public int applyForce(int force) { + this.force = force; + return force; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + try + { + this.force = data.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + System.out.print("MechRodDataFailure \n"); + } + + } + @Override + public int getAnimationPos() { + return this.pos; + } + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } +} diff --git a/src/common/basicpipes/machines/BlockMachine.java b/1.4.2/src/common/basicpipes/machines/BlockMachine.java similarity index 95% rename from src/common/basicpipes/machines/BlockMachine.java rename to 1.4.2/src/common/basicpipes/machines/BlockMachine.java index d27395e2..1997ba5e 100644 --- a/src/common/basicpipes/machines/BlockMachine.java +++ b/1.4.2/src/common/basicpipes/machines/BlockMachine.java @@ -1,79 +1,79 @@ -package basicpipes.machines; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; -import basicpipes.ItemRenderHelper; -import basicpipes.LTanks.TileEntityLTank; - -public class BlockMachine extends BlockContainer -{ - - public BlockMachine(int id) - { - super(id, Material.iron); - this.setBlockName("Machine"); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setRequiresSelfNotify(); - this.blockIndexInTexture = 26; - this.setHardness(1f); - this.setResistance(3f); - } - public boolean isOpaqueCube() - { - return false; - } - - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return ItemRenderHelper.renderID; - } - public int damageDropped(int meta) - { - if(meta < 4) - { - return 0; - } - return meta; - } - @Override - public TileEntity createNewTileEntity(World var1,int meta) { - // TODO Auto-generated method stub - if(meta < 4) - { - return new TileEntityPump(); - } - if(meta == 4) - { - return new TileEntityCondenser(); - } - if(meta == 5) - { - return new TileEntityLTank(); - } - return null; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; - } - @Override - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - } - - +package basicpipes.machines; + +import net.minecraft.src.BlockContainer; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import basicpipes.BasicPipesMain; +import basicpipes.ItemRenderHelper; +import basicpipes.LTanks.TileEntityLTank; + +public class BlockMachine extends BlockContainer +{ + + public BlockMachine(int id) + { + super(id, Material.iron); + this.setBlockName("Machine"); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setRequiresSelfNotify(); + this.blockIndexInTexture = 26; + this.setHardness(1f); + this.setResistance(3f); + } + public boolean isOpaqueCube() + { + return false; + } + + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return ItemRenderHelper.renderID; + } + public int damageDropped(int meta) + { + if(meta < 4) + { + return 0; + } + return meta; + } + @Override + public TileEntity createNewTileEntity(World var1,int meta) { + // TODO Auto-generated method stub + if(meta < 4) + { + return new TileEntityPump(); + } + if(meta == 4) + { + return new TileEntityCondenser(); + } + if(meta == 5) + { + return new TileEntityLTank(); + } + return null; + } + + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return null; + } + @Override + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + } + + diff --git a/src/common/basicpipes/machines/BlockValve.java b/1.4.2/src/common/basicpipes/machines/BlockValve.java similarity index 95% rename from src/common/basicpipes/machines/BlockValve.java rename to 1.4.2/src/common/basicpipes/machines/BlockValve.java index 9240a9e1..a7c14936 100644 --- a/src/common/basicpipes/machines/BlockValve.java +++ b/1.4.2/src/common/basicpipes/machines/BlockValve.java @@ -1,179 +1,179 @@ -package basicpipes.machines; - -import java.util.Random; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; - -public class BlockValve extends universalelectricity.prefab.BlockMachine -{ - - public BlockValve(int id) - { - super("Valve", id, Material.iron); - this.setBlockName("Valve"); - this.setCreativeTab(CreativeTabs.tabRedstone); - this.setRequiresSelfNotify(); - this.blockIndexInTexture = 26; - } - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) - { - TileEntity te = world.getBlockTileEntity(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - if(te instanceof TileEntityValve) - { - TileEntityValve valve = (TileEntityValve) te; - if(meta < 8) - { - if(!valve.on){ - valve.on = true; - }else{ - valve.on = false; - } - } - } - return false; - } - //rotation valve around y axis - public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer player) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - if(meta == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 0); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 3 && meta < 8) - { - if(meta == 7) - { - world.setBlockMetadataWithNotify(x, y, z, 4); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 7 && meta < 12) - { - if(meta == 11) - { - world.setBlockMetadataWithNotify(x, y, z, 8); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 11 && meta < 16) - { - if(meta == 15) - { - world.setBlockMetadataWithNotify(x, y, z, 12); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - return false; - } - - //one shift click inverts pipe to face up - public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer player) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - world.setBlockMetadataWithNotify(x, y, z, meta+4); - return true; - } - if(meta > 3 && meta < 8) - { - world.setBlockMetadataWithNotify(x, y, z, meta-4); - return true; - } - if(meta > 7 && meta < 12) - { - - world.setBlockMetadataWithNotify(x, y, z, meta+4); - - return true; - } - if(meta > 11 && meta < 16) - { - - world.setBlockMetadataWithNotify(x, y, z, meta-4); - - return true; - } - return false; - } - public boolean isOpaqueCube() - { - return false; - } - - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return this.blockID; - } - public int damageDropped(int meta) - { - if(meta < 8) - { - return 0; - } - if(meta < 16 && meta > 7) - { - return 4; - } - return 0; - } - //Per tick - public int conductorCapacity() - { - return 1; - } - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return new TileEntityValve(); - } - @Override - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - } - - +package basicpipes.machines; + +import java.util.Random; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Material; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import basicpipes.BasicPipesMain; + +public class BlockValve extends universalelectricity.prefab.BlockMachine +{ + + public BlockValve(int id) + { + super("Valve", id, Material.iron); + this.setBlockName("Valve"); + this.setCreativeTab(CreativeTabs.tabRedstone); + this.setRequiresSelfNotify(); + this.blockIndexInTexture = 26; + } + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) + { + TileEntity te = world.getBlockTileEntity(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + if(te instanceof TileEntityValve) + { + TileEntityValve valve = (TileEntityValve) te; + if(meta < 8) + { + if(!valve.on){ + valve.on = true; + }else{ + valve.on = false; + } + } + } + return false; + } + //rotation valve around y axis + public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer player) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + if(meta == 3) + { + world.setBlockMetadataWithNotify(x, y, z, 0); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 3 && meta < 8) + { + if(meta == 7) + { + world.setBlockMetadataWithNotify(x, y, z, 4); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 7 && meta < 12) + { + if(meta == 11) + { + world.setBlockMetadataWithNotify(x, y, z, 8); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + if(meta > 11 && meta < 16) + { + if(meta == 15) + { + world.setBlockMetadataWithNotify(x, y, z, 12); + } + else + { + world.setBlockMetadataWithNotify(x, y, z, meta+1); + } + return true; + } + return false; + } + + //one shift click inverts pipe to face up + public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer player) + { + int meta = world.getBlockMetadata(x, y, z); + if(meta < 4) + { + world.setBlockMetadataWithNotify(x, y, z, meta+4); + return true; + } + if(meta > 3 && meta < 8) + { + world.setBlockMetadataWithNotify(x, y, z, meta-4); + return true; + } + if(meta > 7 && meta < 12) + { + + world.setBlockMetadataWithNotify(x, y, z, meta+4); + + return true; + } + if(meta > 11 && meta < 16) + { + + world.setBlockMetadataWithNotify(x, y, z, meta-4); + + return true; + } + return false; + } + public boolean isOpaqueCube() + { + return false; + } + + public boolean renderAsNormalBlock() + { + return false; + } + + /** + * The type of render function that is called for this block + */ + public int getRenderType() + { + return -1; + } + + /** + * Returns the ID of the items to drop on destruction. + */ + public int idDropped(int par1, Random par2Random, int par3) + { + return this.blockID; + } + public int damageDropped(int meta) + { + if(meta < 8) + { + return 0; + } + if(meta < 16 && meta > 7) + { + return 4; + } + return 0; + } + //Per tick + public int conductorCapacity() + { + return 1; + } + @Override + public TileEntity createNewTileEntity(World var1) { + // TODO Auto-generated method stub + return new TileEntityValve(); + } + @Override + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + } + + diff --git a/src/common/basicpipes/machines/ItemMachine.java b/1.4.2/src/common/basicpipes/machines/ItemMachine.java similarity index 96% rename from src/common/basicpipes/machines/ItemMachine.java rename to 1.4.2/src/common/basicpipes/machines/ItemMachine.java index b1488aea..b6fdd401 100644 --- a/src/common/basicpipes/machines/ItemMachine.java +++ b/1.4.2/src/common/basicpipes/machines/ItemMachine.java @@ -1,124 +1,124 @@ -package basicpipes.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.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; - -public class ItemMachine extends ItemBlock -{ - int index = 26; - private int spawnID; - - public ItemMachine(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("Machine"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 0)); - //par3List.add(new ItemStack(this, 1, 4)); - - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Machines"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.machineID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - - } - - --itemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - +package basicpipes.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.TileEntity; +import net.minecraft.src.World; +import basicpipes.BasicPipesMain; + +public class ItemMachine extends ItemBlock +{ + int index = 26; + private int spawnID; + + public ItemMachine(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("Machine"); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 0)); + //par3List.add(new ItemStack(this, 1, 4)); + + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Machines"; + } + @Override + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.machineID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + + } + + --itemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + } \ No newline at end of file diff --git a/src/common/basicpipes/machines/ItemValve.java b/1.4.2/src/common/basicpipes/machines/ItemValve.java similarity index 96% rename from src/common/basicpipes/machines/ItemValve.java rename to 1.4.2/src/common/basicpipes/machines/ItemValve.java index 8107b69d..78ed427c 100644 --- a/src/common/basicpipes/machines/ItemValve.java +++ b/1.4.2/src/common/basicpipes/machines/ItemValve.java @@ -1,126 +1,126 @@ -package basicpipes.machines; - -import java.util.List; - -import basicpipes.BasicPipesMain; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemValve extends ItemBlock -{ - int index = 26; - private int spawnID; - - public ItemValve(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("Machine"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 0)); - par3List.add(new ItemStack(this, 1, 4)); - - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Machines"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.valveID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - - } - - --itemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - +package basicpipes.machines; + +import java.util.List; + +import basicpipes.BasicPipesMain; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemBlock; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; + +public class ItemValve extends ItemBlock +{ + int index = 26; + private int spawnID; + + public ItemValve(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setIconIndex(10); + this.setItemName("Machine"); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + @Override + public int getIconFromDamage(int par1) + { + + return par1+index; + } + @Override + public String getItemNameIS(ItemStack itemstack) + { + return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 0)); + par3List.add(new ItemStack(this, 1, 4)); + + } + public String getTextureFile() { + return BasicPipesMain.textureFile+"/Items.png"; + } + @Override + public String getItemName() + { + return "Machines"; + } + @Override + public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) + { + int blockID = par3World.getBlockId(par4, par5, par6); + spawnID = BasicPipesMain.valveID; + if (blockID == Block.snow.blockID) + { + par7 = 1; + } + else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) + { + if (par7 == 0) + { + --par5; + } + + if (par7 == 1) + { + ++par5; + } + + if (par7 == 2) + { + --par6; + } + + if (par7 == 3) + { + ++par6; + } + + if (par7 == 4) + { + --par4; + } + + if (par7 == 5) + { + ++par4; + } + } + + if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) + { + Block var9 = Block.blocksList[this.spawnID]; + par3World.editingBlocks = true; + int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) + { + if (par3World.getBlockId(par4, par5, par6) == var9.blockID) + { + + Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); + Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); + TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); + + } + + --itemStack.stackSize; + par3World.editingBlocks = false; + return true; + } + } + par3World.editingBlocks = false; + return false; + } + + } \ No newline at end of file diff --git a/src/common/basicpipes/machines/TileEntityCondenser.java b/1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java similarity index 95% rename from src/common/basicpipes/machines/TileEntityCondenser.java rename to 1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java index ad14aa23..23701e8e 100644 --- a/src/common/basicpipes/machines/TileEntityCondenser.java +++ b/1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java @@ -1,110 +1,110 @@ -package basicpipes.machines; - -import universalelectricity.implement.IElectricityReceiver; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricityReceiver { - int tickCount = 0; - int waterStored = 0; - int energyStored = 0; - @Override - public int onProduceLiquid(Liquid type,int maxVol, ForgeDirection side) { - if(type == Liquid.WATER) - { - int tradeW = Math.min(maxVol, waterStored); - waterStored -= tradeW; - return tradeW; - } - return 0; - } - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - } - - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.energyStored = par1NBTTagCompound.getInteger("energyStored"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - } - public void updateEntity() - { - if(energyStored > 100 && waterStored < 3) - { - energyStored -= 100; - waterStored += 1; - } - } - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - @Override - public double wattRequest() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - @Override - public boolean canConnect(ForgeDirection side) { - // TODO Auto-generated method stub - return true; - } - @Override - public double getVoltage() { - // TODO Auto-generated method stub - return 120; - } - @Override - public void onReceive(TileEntity sender, double amps, double voltage, - ForgeDirection side) { - // TODO Auto-generated method stub - - } - - - - -} +package basicpipes.machines; + +import universalelectricity.implement.IElectricityReceiver; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; + +public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricityReceiver { + int tickCount = 0; + int waterStored = 0; + int energyStored = 0; + @Override + public int onProduceLiquid(Liquid type,int maxVol, ForgeDirection side) { + if(type == Liquid.WATER) + { + int tradeW = Math.min(maxVol, waterStored); + waterStored -= tradeW; + return tradeW; + } + return 0; + } + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); + par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); + } + + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.energyStored = par1NBTTagCompound.getInteger("energyStored"); + this.waterStored = par1NBTTagCompound.getInteger("waterStored"); + } + public void updateEntity() + { + if(energyStored > 100 && waterStored < 3) + { + energyStored -= 100; + waterStored += 1; + } + } + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + @Override + public void onDisable(int duration) { + // TODO Auto-generated method stub + + } + @Override + public boolean isDisabled() { + // TODO Auto-generated method stub + return false; + } + @Override + public double wattRequest() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + // TODO Auto-generated method stub + return false; + } + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + @Override + public boolean canConnect(ForgeDirection side) { + // TODO Auto-generated method stub + return true; + } + @Override + public double getVoltage() { + // TODO Auto-generated method stub + return 120; + } + @Override + public void onReceive(TileEntity sender, double amps, double voltage, + ForgeDirection side) { + // TODO Auto-generated method stub + + } + + + + +} diff --git a/src/common/basicpipes/machines/TileEntityPump.java b/1.4.2/src/common/basicpipes/machines/TileEntityPump.java similarity index 95% rename from src/common/basicpipes/machines/TileEntityPump.java rename to 1.4.2/src/common/basicpipes/machines/TileEntityPump.java index 11f095ce..37aa6d65 100644 --- a/src/common/basicpipes/machines/TileEntityPump.java +++ b/1.4.2/src/common/basicpipes/machines/TileEntityPump.java @@ -1,140 +1,140 @@ -package basicpipes.machines; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.implement.IElectricityReceiver; -import universalelectricity.prefab.TileEntityElectricityReceiver; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -public class TileEntityPump extends TileEntityElectricityReceiver implements ILiquidProducer,IElectricityReceiver { - int dCount = 0; - float eStored = 0; - float eMax = 2000; - int lStored = 0; - int wMax = 10; - public Liquid type = Liquid.DEFUALT; - public TileEntity[] sList = {null,null,null,null,null,null}; - private int count = 0; - @Override - public void onDisable(int duration) { - dCount = duration; - } - - @Override - public boolean isDisabled() { - if(dCount <= 0) - { - return false; - } - return true; - } - - @Override - public void updateEntity() { - super.updateEntity(); - if(count++ >= 40) - { - count = 0; - sList = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - Liquid bellow = Liquid.getLiquidByBlock(bBlock); - - if(bellow != null && this.lStored <= 0) - { - this.type = bellow; - } - //eStored+=200; - if(!worldObj.isRemote) - { - if(bBlock == type.Still && this.eStored >= 200 && this.lStored < this.wMax) - { - eStored -= 200; - lStored += 1; - worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); - - } - } - } - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - if(side != ForgeDirection.DOWN) - { - return true; - } - return false; - } - @Override - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - if(type == this.type && lStored > 0) - { - lStored -= 1; - return 1; - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int facing = 0; - switch(meta) - { - case 0: facing = 2;break; - case 1: facing = 5;break; - case 2: facing = 3;break; - case 3: facing = 4;break; - } - - if(type == this.type && side != ForgeDirection.DOWN && side != ForgeDirection.UP && side != ForgeDirection.getOrientation(facing).getOpposite()) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - }else - if(type == Liquid.LAVA) - { - return 10; - }else - if(type == this.type) - { - return 50; - } - return 0; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == this.type) - { - return true; - } - return false; - } - - @Override - public void onReceive(TileEntity sender, double watts, double voltage, - ForgeDirection side) { - if (wattRequest() > 0 && canConnect(side)) - { - float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); - this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); - } - - } - - @Override - public double wattRequest() { - return Math.max(eMax - eStored,0); - } -} +package basicpipes.machines; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.implement.IElectricityReceiver; +import universalelectricity.prefab.TileEntityElectricityReceiver; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +public class TileEntityPump extends TileEntityElectricityReceiver implements ILiquidProducer,IElectricityReceiver { + int dCount = 0; + float eStored = 0; + float eMax = 2000; + int lStored = 0; + int wMax = 10; + public Liquid type = Liquid.DEFUALT; + public TileEntity[] sList = {null,null,null,null,null,null}; + private int count = 0; + @Override + public void onDisable(int duration) { + dCount = duration; + } + + @Override + public boolean isDisabled() { + if(dCount <= 0) + { + return false; + } + return true; + } + + @Override + public void updateEntity() { + super.updateEntity(); + if(count++ >= 40) + { + count = 0; + sList = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); + Liquid bellow = Liquid.getLiquidByBlock(bBlock); + + if(bellow != null && this.lStored <= 0) + { + this.type = bellow; + } + //eStored+=200; + if(!worldObj.isRemote) + { + if(bBlock == type.Still && this.eStored >= 200 && this.lStored < this.wMax) + { + eStored -= 200; + lStored += 1; + worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); + + } + } + } + } + + @Override + public boolean canReceiveFromSide(ForgeDirection side) { + if(side != ForgeDirection.DOWN) + { + return true; + } + return false; + } + @Override + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { + if(type == this.type && lStored > 0) + { + lStored -= 1; + return 1; + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int facing = 0; + switch(meta) + { + case 0: facing = 2;break; + case 1: facing = 5;break; + case 2: facing = 3;break; + case 3: facing = 4;break; + } + + if(type == this.type && side != ForgeDirection.DOWN && side != ForgeDirection.UP && side != ForgeDirection.getOrientation(facing).getOpposite()) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + }else + if(type == Liquid.LAVA) + { + return 10; + }else + if(type == this.type) + { + return 50; + } + return 0; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == this.type) + { + return true; + } + return false; + } + + @Override + public void onReceive(TileEntity sender, double watts, double voltage, + ForgeDirection side) { + if (wattRequest() > 0 && canConnect(side)) + { + float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); + this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); + } + + } + + @Override + public double wattRequest() { + return Math.max(eMax - eStored,0); + } +} diff --git a/src/common/basicpipes/machines/TileEntityValve.java b/1.4.2/src/common/basicpipes/machines/TileEntityValve.java similarity index 95% rename from src/common/basicpipes/machines/TileEntityValve.java rename to 1.4.2/src/common/basicpipes/machines/TileEntityValve.java index 76739f16..42189fd2 100644 --- a/src/common/basicpipes/machines/TileEntityValve.java +++ b/1.4.2/src/common/basicpipes/machines/TileEntityValve.java @@ -1,109 +1,109 @@ -package basicpipes.machines; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -public class TileEntityValve extends TileEntity implements ILiquidConsumer { -Liquid type = Liquid.DEFUALT; -int liquidStored = 0; -int lMax = 1; -int tickCount = 0; -TileEntity[] connected = {null,null,null,null,null,null}; -boolean on = false; - @Override - public void updateEntity() - { - tickCount++; - if(tickCount >= 10) - { - int deltaX = 0; - int deltaZ = 0; - int deltaY = 0; - int facing = 0; - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - if(meta == 0 && meta == 8) - { - facing = 2; - } - if(meta == 1 && meta == 9) - { - facing = 5; - } - if(meta == 2 && meta == 10) - { - facing = 3; - } - if(meta == 3 && meta == 11) - { - facing = 4; - } - if((meta > 3 && meta < 8)&&(meta> 11 && meta < 16)) - { - facing = 0; - } - switch(facing) - { - case 0: deltaY++;break; - case 1: deltaY--;break; - case 2: deltaZ--;break; - case 5: deltaZ++;break; - case 3: deltaX--;break; - case 4: deltaX++;break; - } - - connected = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - for(int i = 0;i<6;i++) - { - if(!(connected[i] instanceof TileEntityPipe)) - { - connected[i] = null; - } - } - if(!worldObj.isRemote) - { - //TODO send packet - } - tickCount = 0; - } - } - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(this.type == Liquid.DEFUALT) - { - this.type = type; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { - if(type == this.type) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == this.type) - { - return liquidStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == this.type) - { - return lMax; - } - return 0; - } - -} +package basicpipes.machines; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +public class TileEntityValve extends TileEntity implements ILiquidConsumer { +Liquid type = Liquid.DEFUALT; +int liquidStored = 0; +int lMax = 1; +int tickCount = 0; +TileEntity[] connected = {null,null,null,null,null,null}; +boolean on = false; + @Override + public void updateEntity() + { + tickCount++; + if(tickCount >= 10) + { + int deltaX = 0; + int deltaZ = 0; + int deltaY = 0; + int facing = 0; + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + if(meta == 0 && meta == 8) + { + facing = 2; + } + if(meta == 1 && meta == 9) + { + facing = 5; + } + if(meta == 2 && meta == 10) + { + facing = 3; + } + if(meta == 3 && meta == 11) + { + facing = 4; + } + if((meta > 3 && meta < 8)&&(meta> 11 && meta < 16)) + { + facing = 0; + } + switch(facing) + { + case 0: deltaY++;break; + case 1: deltaY--;break; + case 2: deltaZ--;break; + case 5: deltaZ++;break; + case 3: deltaX--;break; + case 4: deltaX++;break; + } + + connected = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + for(int i = 0;i<6;i++) + { + if(!(connected[i] instanceof TileEntityPipe)) + { + connected[i] = null; + } + } + if(!worldObj.isRemote) + { + //TODO send packet + } + tickCount = 0; + } + } + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(this.type == Liquid.DEFUALT) + { + this.type = type; + } + return vol; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { + if(type == this.type) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == this.type) + { + return liquidStored; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == this.type) + { + return lMax; + } + return 0; + } + +} diff --git a/src/common/basicpipes/mcmod.info b/1.4.2/src/common/basicpipes/mcmod.info similarity index 96% rename from src/common/basicpipes/mcmod.info rename to 1.4.2/src/common/basicpipes/mcmod.info index 68358513..80365e90 100644 --- a/src/common/basicpipes/mcmod.info +++ b/1.4.2/src/common/basicpipes/mcmod.info @@ -1,21 +1,21 @@ -[ -{ - "modid": "basicPipes", - "name": "Basic Pipes", - "description": "Simple liquid pumping & storage system for UE based mods. Can pump several types of common liquids including water,lava,oil,and Fuel.", - "version": "1.9", - "mcversion": "1.3.2", - "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", - "updateUrl": "", - "authors": [ - "DarkGuardsman" - ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Textures thanks to Atrain;", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": ["UE" - ] -} +[ +{ + "modid": "basicPipes", + "name": "Basic Pipes", + "description": "Simple liquid pumping & storage system for UE based mods. Can pump several types of common liquids including water,lava,oil,and Fuel.", + "version": "1.9", + "mcversion": "1.3.2", + "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Textures thanks to Atrain;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE" + ] +} ] \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/Beam.java b/1.4.2/src/common/basicpipes/pipes/api/Beam.java similarity index 96% rename from src/common/basicpipes/pipes/api/Beam.java rename to 1.4.2/src/common/basicpipes/pipes/api/Beam.java index 0527ce05..5d827c1c 100644 --- a/src/common/basicpipes/pipes/api/Beam.java +++ b/1.4.2/src/common/basicpipes/pipes/api/Beam.java @@ -1,26 +1,26 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -public class Beam { - //might need a more complex system for this later but for now this will work - public int intensity; //Beam intensity level - public boolean light; //Can prodcue light, might use this later - public ForgeDirection movDir; //Used to find the beams current direction - public Beam() - { - this(0,false,ForgeDirection.UNKNOWN); - } - Beam(int i, boolean light, ForgeDirection dir) - { - intensity = i; - this.light = light; - movDir = dir; - } - public static int getBeamLevel(Beam beam) - { - return beam.intensity; - } - - -} +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +public class Beam { + //might need a more complex system for this later but for now this will work + public int intensity; //Beam intensity level + public boolean light; //Can prodcue light, might use this later + public ForgeDirection movDir; //Used to find the beams current direction + public Beam() + { + this(0,false,ForgeDirection.UNKNOWN); + } + Beam(int i, boolean light, ForgeDirection dir) + { + intensity = i; + this.light = light; + movDir = dir; + } + public static int getBeamLevel(Beam beam) + { + return beam.intensity; + } + + +} diff --git a/src/common/basicpipes/pipes/api/IBeamProducer.java b/1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java similarity index 96% rename from src/common/basicpipes/pipes/api/IBeamProducer.java rename to 1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java index c8e179d7..d3f639c7 100644 --- a/src/common/basicpipes/pipes/api/IBeamProducer.java +++ b/1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java @@ -1,26 +1,26 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -public interface IBeamProducer { - - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param regInt - requested beam intensity - * @param side - The side - * @return New Beam - Return a vol of liquid type that is produced - */ - public int createNewBeam(int type, int reqInt, ForgeDirection side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canCreateBeam(int type, ForgeDirection side); - -} +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +public interface IBeamProducer { + + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param regInt - requested beam intensity + * @param side - The side + * @return New Beam - Return a vol of liquid type that is produced + */ + public int createNewBeam(int type, int reqInt, ForgeDirection side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canCreateBeam(int type, ForgeDirection side); + +} diff --git a/src/common/basicpipes/pipes/api/IHeatProducer.java b/1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java similarity index 97% rename from src/common/basicpipes/pipes/api/IHeatProducer.java rename to 1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java index da97ef71..ae4e397f 100644 --- a/src/common/basicpipes/pipes/api/IHeatProducer.java +++ b/1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java @@ -1,16 +1,16 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - - -public interface IHeatProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param jouls - The maximum jouls can be transfered - * @param up - The side of block in which the conductor is on - * @return jouls - Return jouls to consumer - */ - public float onProduceHeat(float jouls, ForgeDirection up); +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + + +public interface IHeatProducer +{ + /** + * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer + * block. + * @param jouls - The maximum jouls can be transfered + * @param up - The side of block in which the conductor is on + * @return jouls - Return jouls to consumer + */ + public float onProduceHeat(float jouls, ForgeDirection up); } \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/ILiquidConsumer.java b/1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java similarity index 96% rename from src/common/basicpipes/pipes/api/ILiquidConsumer.java rename to 1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java index 33386c0b..d5eb17a2 100644 --- a/src/common/basicpipes/pipes/api/ILiquidConsumer.java +++ b/1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java @@ -1,39 +1,39 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; -/** - * Based off of Calclavia's old wire API - * @author DarkGuardsman - * - */ - -public interface ILiquidConsumer -{ - /** - * onRecieveLiquid - * @param vol - The amount this block received. - * @param side - The side of the block in which the liquid came from. - * @parm type - The type of liquid being received - * @return vol - The amount liquid that can't be recieved - */ - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side); - - /** - * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param forgeDirection - The side in which the volume is coming from. - * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive a volume at this given tick or moment. - */ - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection); - - /** - * @return Return the stored liquid of type in this consumer. - */ - public int getStoredLiquid(Liquid type); - - /** - * @return Return the maximum amount of stored liquid this consumer can get. - */ - public int getLiquidCapacity(Liquid type); - -} +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; +/** + * Based off of Calclavia's old wire API + * @author DarkGuardsman + * + */ + +public interface ILiquidConsumer +{ + /** + * onRecieveLiquid + * @param vol - The amount this block received. + * @param side - The side of the block in which the liquid came from. + * @parm type - The type of liquid being received + * @return vol - The amount liquid that can't be recieved + */ + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side); + + /** + * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics + * @param forgeDirection - The side in which the volume is coming from. + * @parm type - The type of liquid + * @return Returns true or false if this consumer can receive a volume at this given tick or moment. + */ + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection); + + /** + * @return Return the stored liquid of type in this consumer. + */ + public int getStoredLiquid(Liquid type); + + /** + * @return Return the maximum amount of stored liquid this consumer can get. + */ + public int getLiquidCapacity(Liquid type); + +} diff --git a/src/common/basicpipes/pipes/api/ILiquidProducer.java b/1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java similarity index 96% rename from src/common/basicpipes/pipes/api/ILiquidProducer.java rename to 1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java index 4f5a94cd..9e37facf 100644 --- a/src/common/basicpipes/pipes/api/ILiquidProducer.java +++ b/1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java @@ -1,38 +1,38 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -/** - * Based off of Calclavia's old wire API - * @author DarkGuardsman - * - */ -public interface ILiquidProducer -{ - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param maxvol - The maximum vol or requested volume - * @param side - The side - * @return vol - Return a vol of liquid type that is produced - */ - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canProduceLiquid(Liquid type, ForgeDirection side); - public boolean canProducePresure(Liquid type, ForgeDirection side); - /** - * - * @param type - liquid type - * @param side - side this of presure - * @return pressure that is used to output liquid on - */ - public int presureOutput(Liquid type, ForgeDirection side); +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; + +/** + * Based off of Calclavia's old wire API + * @author DarkGuardsman + * + */ +public interface ILiquidProducer +{ + /** + * onProduceLiquid + * block. + * @param type - the type of liquid + * @param maxvol - The maximum vol or requested volume + * @param side - The side + * @return vol - Return a vol of liquid type that is produced + */ + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side); + /** + * canProduceLiquid + * block. + * @param type - the type of liquid + * @param side - The side + * @return boolean - True if can, false if can't produce liquid of type or on that side + * Also used for connection rules of pipes' + */ + public boolean canProduceLiquid(Liquid type, ForgeDirection side); + public boolean canProducePresure(Liquid type, ForgeDirection side); + /** + * + * @param type - liquid type + * @param side - side this of presure + * @return pressure that is used to output liquid on + */ + public int presureOutput(Liquid type, ForgeDirection side); } \ No newline at end of file diff --git a/src/common/basicpipes/pipes/api/IMechanical.java b/1.4.2/src/common/basicpipes/pipes/api/IMechanical.java similarity index 96% rename from src/common/basicpipes/pipes/api/IMechanical.java rename to 1.4.2/src/common/basicpipes/pipes/api/IMechanical.java index 4577388e..ced09be3 100644 --- a/src/common/basicpipes/pipes/api/IMechanical.java +++ b/1.4.2/src/common/basicpipes/pipes/api/IMechanical.java @@ -1,36 +1,36 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; -// mechanical -public interface IMechanical { -/** - * - * @param side the rpm is coming from - * @return rpm that the block is running at - */ - public int getForceSide(ForgeDirection side); - public int getForce(); - /** - * - * @param side - * @return if mechanical force can be outputed from this side - */ - public boolean canOutputSide(ForgeDirection side); - /** - * - * @param side - * @return if mechanical force can be inputed from this side - */ - public boolean canInputSide(ForgeDirection side); - /** - * - * @param RPM being applied to this machine - * @return the rpm after the load has been applied - */ - public int applyForce(int force); - /** - * not required but is handy to get animation position of some mechanical block - * @return int between 0 -7 - */ - public int getAnimationPos(); -} +package basicpipes.pipes.api; + +import net.minecraftforge.common.ForgeDirection; +// mechanical +public interface IMechanical { +/** + * + * @param side the rpm is coming from + * @return rpm that the block is running at + */ + public int getForceSide(ForgeDirection side); + public int getForce(); + /** + * + * @param side + * @return if mechanical force can be outputed from this side + */ + public boolean canOutputSide(ForgeDirection side); + /** + * + * @param side + * @return if mechanical force can be inputed from this side + */ + public boolean canInputSide(ForgeDirection side); + /** + * + * @param RPM being applied to this machine + * @return the rpm after the load has been applied + */ + public int applyForce(int force); + /** + * not required but is handy to get animation position of some mechanical block + * @return int between 0 -7 + */ + public int getAnimationPos(); +} diff --git a/src/common/basicpipes/pipes/api/IStorageTank.java b/1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java similarity index 94% rename from src/common/basicpipes/pipes/api/IStorageTank.java rename to 1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java index a088a831..e110c041 100644 --- a/src/common/basicpipes/pipes/api/IStorageTank.java +++ b/1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java @@ -1,5 +1,5 @@ -package basicpipes.pipes.api; - -public interface IStorageTank extends ILiquidConsumer { - -} +package basicpipes.pipes.api; + +public interface IStorageTank extends ILiquidConsumer { + +} diff --git a/src/common/basicpipes/pipes/api/Liquid.java b/1.4.2/src/common/basicpipes/pipes/api/Liquid.java similarity index 97% rename from src/common/basicpipes/pipes/api/Liquid.java rename to 1.4.2/src/common/basicpipes/pipes/api/Liquid.java index 8312de39..f6a3be46 100644 --- a/src/common/basicpipes/pipes/api/Liquid.java +++ b/1.4.2/src/common/basicpipes/pipes/api/Liquid.java @@ -1,64 +1,64 @@ -package basicpipes.pipes.api; - - -import net.minecraft.src.Block; -/** - * System too easily reference a liquid type and its info - * @author Rseifert - * - */ -public enum Liquid { - // -1 == null || unused - STEAM("Steam",false,true,-1,-1,100), - WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID,32), - LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID,20), - OIL("Oil",true,false,-1,-1,32),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), - Fuel("Fuel",true,false,-1,-1,40), - Air("Air",false,true,0,-1,100), - Methain("Methain",true,true,-1,-1,100), - BioFuel("BioFuel",true,false,-1,-1,40), - Coolent("Coolent",false,false,-1,-1,40), - NukeWaste("NukeWaste",false,false,-1,-1,20), - Ether("Ether",false,false,-1,-1,100), - DEFUALT("Empty",false,false,-1,-1,0); - public final boolean flamable;//can it catch on fire, not used but might be - public final boolean isGas;//is it a gas, used to find if it floats - public final int Still;//if there is a block of still liquid linked to this - public final int Moving;//if there is a block of moving liquid linked to this - public final String lName;//Default name for the liquid - public final int defaultPresure;//default pressure output of the liquid -private Liquid(String name,boolean flame,boolean gas,int block, int Moving,int dPressure) -{ - this.flamable = flame; - this.isGas = gas; - this.Still = block; - this.Moving = Moving; - this.lName = name; - this.defaultPresure = dPressure; -} -/** - * Only use this if you are converting from the old system - * Or have a special need for it - * @param id of liquid - * @return Liquid Object - */ - public static Liquid getLiquid(int id) - { - if (id >= 0 && id < Liquid.values().length) - { - return Liquid.values()[id]; - } - return DEFUALT; - } -public static Liquid getLiquidByBlock(int bBlock) { - for(int i = 0; i < Liquid.values().length;i++) - { - Liquid selected = Liquid.getLiquid(i); - if(bBlock == selected.Still) - { - return selected; - } - } - return Liquid.DEFUALT; -} -} +package basicpipes.pipes.api; + + +import net.minecraft.src.Block; +/** + * System too easily reference a liquid type and its info + * @author Rseifert + * + */ +public enum Liquid { + // -1 == null || unused + STEAM("Steam",false,true,-1,-1,100), + WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID,32), + LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID,20), + OIL("Oil",true,false,-1,-1,32),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), + Fuel("Fuel",true,false,-1,-1,40), + Air("Air",false,true,0,-1,100), + Methain("Methain",true,true,-1,-1,100), + BioFuel("BioFuel",true,false,-1,-1,40), + Coolent("Coolent",false,false,-1,-1,40), + NukeWaste("NukeWaste",false,false,-1,-1,20), + Ether("Ether",false,false,-1,-1,100), + DEFUALT("Empty",false,false,-1,-1,0); + public final boolean flamable;//can it catch on fire, not used but might be + public final boolean isGas;//is it a gas, used to find if it floats + public final int Still;//if there is a block of still liquid linked to this + public final int Moving;//if there is a block of moving liquid linked to this + public final String lName;//Default name for the liquid + public final int defaultPresure;//default pressure output of the liquid +private Liquid(String name,boolean flame,boolean gas,int block, int Moving,int dPressure) +{ + this.flamable = flame; + this.isGas = gas; + this.Still = block; + this.Moving = Moving; + this.lName = name; + this.defaultPresure = dPressure; +} +/** + * Only use this if you are converting from the old system + * Or have a special need for it + * @param id of liquid + * @return Liquid Object + */ + public static Liquid getLiquid(int id) + { + if (id >= 0 && id < Liquid.values().length) + { + return Liquid.values()[id]; + } + return DEFUALT; + } +public static Liquid getLiquidByBlock(int bBlock) { + for(int i = 0; i < Liquid.values().length;i++) + { + Liquid selected = Liquid.getLiquid(i); + if(bBlock == selected.Still) + { + return selected; + } + } + return Liquid.DEFUALT; +} +} diff --git a/src/common/basicpipes/pipes/api/MHelper.java b/1.4.2/src/common/basicpipes/pipes/api/MHelper.java similarity index 96% rename from src/common/basicpipes/pipes/api/MHelper.java rename to 1.4.2/src/common/basicpipes/pipes/api/MHelper.java index de2f3580..922444b7 100644 --- a/src/common/basicpipes/pipes/api/MHelper.java +++ b/1.4.2/src/common/basicpipes/pipes/api/MHelper.java @@ -1,125 +1,125 @@ -package basicpipes.pipes.api; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -public class MHelper { -/** - * you will have to tell your TileEntity to trade up if liquid or down if gas. I suggest having your onRecieveLiquid - * pump liquid one block up if you block is full. - * @param entity - entity at center of search - * @return an Array containing TileEntities around the TileEntity - */ - public static TileEntity[] getSourounding(World world, int x, int y, int z) - { - TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; - for(int i =0; i< 6;i++) - { - ForgeDirection d = ForgeDirection.getOrientation(i); - TileEntity aEntity = world.getBlockTileEntity(x+d.offsetX, y+d.offsetY, z+d.offsetZ); - if(aEntity instanceof TileEntity) - { - list[i] = aEntity; - } - } - return list; - } - /** - * Used to help trade liquid without having to do too much work - * @param blockEntity - tile entity trading the liquid - * @param type - liquid type being traded - * @param vol - the volume to be traded - * @return the remaining untraded liquid - */ - public static int shareLiquid(World world, int x, int y, int z,int vol,int max, Liquid type) - { - TileEntity ent = world.getBlockTileEntity(x, y, z); - int currentVol = vol; - - int tCount = 1; - boolean rise = type.isGas; - if(currentVol <= 0) - { - return 0; - } - - - ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); - TileEntity first = world.getBlockTileEntity(x+st.offsetX, y+st.offsetY, z+st.offsetZ); - //trades to the first, bottom for liquid, top for gas - if(first instanceof IStorageTank && currentVol > 0 && ((IStorageTank) first).getStoredLiquid(type) < ((IStorageTank) first).getLiquidCapacity(type)) - { - currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, currentVol, st); - } - int vAve = currentVol; - TileEntity[] TeA = MHelper.getSourounding(world,x,y,z); - for(int i = 2; i < 6; i++) - { - if(TeA[i] instanceof IStorageTank) - { - vAve += ((IStorageTank)TeA[i]).getStoredLiquid(type); - tCount++; - } - } - vAve = (int)(vAve/tCount); - //trades to side if anything is left - for(int i = 2; i < 6;i++) - { - ForgeDirection side = ForgeDirection.getOrientation(i); - TileEntity sSide = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); - if(currentVol <= 0 || currentVol <= vAve) - { - break; - } - if(sSide instanceof IStorageTank &&((IStorageTank) sSide).getStoredLiquid(type) < vAve) - { - int tA = vAve -Math.max((vAve - currentVol), 0); - currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, tA, st) -tA + currentVol; - } - } - //trades to the opposite of the first if anything is left - /** - * need to find a way to solve it just trading back the ammount on next cycle - if(currentVol > 0) - { - TileEntity last = world.getBlockTileEntity(x+st.getOpposite().offsetX, y+st.getOpposite().offsetY, z+st.getOpposite().offsetZ); - if(last instanceof IStorageTank && currentVol == max) - { - currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, max/10, st.getOpposite()) + currentVol -(max/10); - } - } - */ - return Math.max(currentVol,0); - } - /** - * - * @param entity - entity in question - * @return 1-4 if corner 0 if not a corner - * you have to figure out which is which depending on what your using this for - * 1 should be north east 2 south east - */ - public static int corner(TileEntity entity) - { - TileEntity[] en = getSourounding(entity.worldObj, entity.xCoord,entity.yCoord,entity.zCoord); - if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) - { - return 3; - } - if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) - { - return 4; - } - if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) - { - return 1; - } - if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) - { - return 2; - } - - return 0; - - } -} +package basicpipes.pipes.api; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import net.minecraftforge.common.ForgeDirection; + +public class MHelper { +/** + * you will have to tell your TileEntity to trade up if liquid or down if gas. I suggest having your onRecieveLiquid + * pump liquid one block up if you block is full. + * @param entity - entity at center of search + * @return an Array containing TileEntities around the TileEntity + */ + public static TileEntity[] getSourounding(World world, int x, int y, int z) + { + TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; + for(int i =0; i< 6;i++) + { + ForgeDirection d = ForgeDirection.getOrientation(i); + TileEntity aEntity = world.getBlockTileEntity(x+d.offsetX, y+d.offsetY, z+d.offsetZ); + if(aEntity instanceof TileEntity) + { + list[i] = aEntity; + } + } + return list; + } + /** + * Used to help trade liquid without having to do too much work + * @param blockEntity - tile entity trading the liquid + * @param type - liquid type being traded + * @param vol - the volume to be traded + * @return the remaining untraded liquid + */ + public static int shareLiquid(World world, int x, int y, int z,int vol,int max, Liquid type) + { + TileEntity ent = world.getBlockTileEntity(x, y, z); + int currentVol = vol; + + int tCount = 1; + boolean rise = type.isGas; + if(currentVol <= 0) + { + return 0; + } + + + ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); + TileEntity first = world.getBlockTileEntity(x+st.offsetX, y+st.offsetY, z+st.offsetZ); + //trades to the first, bottom for liquid, top for gas + if(first instanceof IStorageTank && currentVol > 0 && ((IStorageTank) first).getStoredLiquid(type) < ((IStorageTank) first).getLiquidCapacity(type)) + { + currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, currentVol, st); + } + int vAve = currentVol; + TileEntity[] TeA = MHelper.getSourounding(world,x,y,z); + for(int i = 2; i < 6; i++) + { + if(TeA[i] instanceof IStorageTank) + { + vAve += ((IStorageTank)TeA[i]).getStoredLiquid(type); + tCount++; + } + } + vAve = (int)(vAve/tCount); + //trades to side if anything is left + for(int i = 2; i < 6;i++) + { + ForgeDirection side = ForgeDirection.getOrientation(i); + TileEntity sSide = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); + if(currentVol <= 0 || currentVol <= vAve) + { + break; + } + if(sSide instanceof IStorageTank &&((IStorageTank) sSide).getStoredLiquid(type) < vAve) + { + int tA = vAve -Math.max((vAve - currentVol), 0); + currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, tA, st) -tA + currentVol; + } + } + //trades to the opposite of the first if anything is left + /** + * need to find a way to solve it just trading back the ammount on next cycle + if(currentVol > 0) + { + TileEntity last = world.getBlockTileEntity(x+st.getOpposite().offsetX, y+st.getOpposite().offsetY, z+st.getOpposite().offsetZ); + if(last instanceof IStorageTank && currentVol == max) + { + currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, max/10, st.getOpposite()) + currentVol -(max/10); + } + } + */ + return Math.max(currentVol,0); + } + /** + * + * @param entity - entity in question + * @return 1-4 if corner 0 if not a corner + * you have to figure out which is which depending on what your using this for + * 1 should be north east 2 south east + */ + public static int corner(TileEntity entity) + { + TileEntity[] en = getSourounding(entity.worldObj, entity.xCoord,entity.yCoord,entity.zCoord); + if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) + { + return 3; + } + if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) + { + return 4; + } + if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) + { + return 1; + } + if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) + { + return 2; + } + + return 0; + + } +} diff --git a/src/common/mcpmod.info b/1.4.2/src/common/mcpmod.info similarity index 96% rename from src/common/mcpmod.info rename to 1.4.2/src/common/mcpmod.info index 4a0d4ac4..953d942a 100644 --- a/src/common/mcpmod.info +++ b/1.4.2/src/common/mcpmod.info @@ -1,17 +1,17 @@ -[ -{ - "modid": "mcp", - "name": "Minecraft Coder Pack", - "description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.", - "version": "7.19", - "mcversion": "1.4.2", - "logoFile": "/mcp.png", - "url": "http://mcp.ocean-labs.de/", - "updateUrl": "", - "authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"], - "credits": "Made by the MCP team", - "parent": "", - "screenshots": [], - "dependencies": [] -} -] +[ +{ + "modid": "mcp", + "name": "Minecraft Coder Pack", + "description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.", + "version": "7.19", + "mcversion": "1.4.2", + "logoFile": "/mcp.png", + "url": "http://mcp.ocean-labs.de/", + "updateUrl": "", + "authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"], + "credits": "Made by the MCP team", + "parent": "", + "screenshots": [], + "dependencies": [] +} +] diff --git a/src/common/steampower/BlockMachine.java b/1.4.2/src/common/steampower/BlockMachine.java similarity index 97% rename from src/common/steampower/BlockMachine.java rename to 1.4.2/src/common/steampower/BlockMachine.java index 06ea2bda..a0bd2c3d 100644 --- a/src/common/steampower/BlockMachine.java +++ b/1.4.2/src/common/steampower/BlockMachine.java @@ -1,239 +1,239 @@ -package steampower; - -import java.util.Random; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityItem; -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.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.TileEntityFireBox; - -public class BlockMachine extends universalelectricity.prefab.BlockMachine -{ - - private Random mRandom = new Random(); - private static boolean keepFurnaceInventory = true; - - public BlockMachine(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(1f); - this.setResistance(3f); - } - @Override - public int damageDropped(int metadata) - { - return metadata; - } - @Override - public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) - { - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if(tileEntity instanceof TileEntityFireBox) - { - if(((TileEntityFireBox)tileEntity).generateRate > 0) - { - int var6 = ((TileEntityFireBox) tileEntity).getDirection(); - float var7 = (float)x + 0.5F; - float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; - float var9 = (float)z + 0.5F; - float var10 = 0.52F; - float var11 = par5Random.nextFloat() * 0.6F - 0.3F; - - if (var6 == 4) - { - par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 2) - { - par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 1) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 3) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - } - } - } - } - - @Override - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - case 4: tileEntity.setDirection(1); break; - } - - return true; - } - /** - * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the - * block. - */ - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntityBoiler) - { - TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); - } - if(blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); - } - } - - return true; - } - } - @Override - public TileEntity createNewTileEntity(World var1,int meta) - { - switch(meta) - { - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 3: return new TileEntityFireBox(); - case 4: return new TileEntityFireBox(); - case 5: return new TileEntityFireBox(); - } - return null; - } - - /** - * Called when the block is placed in the world. - */ - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) - { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - } - } - /** - * Called whenever the block is removed. - */ - @Override - public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ - if (!keepFurnaceInventory) - { - TileEntityMachine var5 = null; - TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); - if(entityBox instanceof TileEntityFireBox) - { - var5 = (TileEntityFireBox)entityBox; - } - else if(entityBox instanceof TileEntityBoiler) - { - var5 = (TileEntityBoiler)entityBox; - } - if (var5 != null) - { - for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) - { - ItemStack var7 = var5.getStackInSlot(var6); - - if (var7 != null) - { - float var8 = this.mRandom.nextFloat() * 0.8F + 0.1F; - float var9 = this.mRandom.nextFloat() * 0.8F + 0.1F; - float var10 = this.mRandom.nextFloat() * 0.8F + 0.1F; - - while (var7.stackSize > 0) - { - int var11 = this.mRandom.nextInt(21) + 10; - - if (var11 > var7.stackSize) - { - var11 = var7.stackSize; - } - - var7.stackSize -= var11; - EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); - - if (var7.hasTagCompound()) - { - var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); - } - - float var13 = 0.05F; - var12.motionX = (double)((float)this.mRandom.nextGaussian() * var13); - var12.motionY = (double)((float)this.mRandom.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)this.mRandom.nextGaussian() * var13); - par1World.spawnEntityInWorld(var12); - } - } - } - } - } - - super.breakBlock(par1World, par2, par3, par4, par5, par6); - } - - @Override - public String getTextureFile() - { - return "/EUIClient/textures/blocks/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - -} +package steampower; + +import java.util.Random; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityItem; +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.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.TileEntityFireBox; + +public class BlockMachine extends universalelectricity.prefab.BlockMachine +{ + + private Random mRandom = new Random(); + private static boolean keepFurnaceInventory = true; + + public BlockMachine(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setHardness(1f); + this.setResistance(3f); + } + @Override + public int damageDropped(int metadata) + { + return metadata; + } + @Override + public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) + { + TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); + + if(tileEntity instanceof TileEntityFireBox) + { + if(((TileEntityFireBox)tileEntity).generateRate > 0) + { + int var6 = ((TileEntityFireBox) tileEntity).getDirection(); + float var7 = (float)x + 0.5F; + float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; + float var9 = (float)z + 0.5F; + float var10 = 0.52F; + float var11 = par5Random.nextFloat() * 0.6F - 0.3F; + + if (var6 == 4) + { + par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 2) + { + par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 1) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + } + else if (var6 == 3) + { + par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + } + } + } + } + + @Override + public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) + { + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); + + //Reorient the block + switch(tileEntity.getDirection()) + { + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + case 4: tileEntity.setDirection(1); break; + } + + return true; + } + /** + * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the + * block. + */ + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) + { + if (par1World.isRemote) + { + return true; + } + else + { + TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); + + if (blockEntity != null) + { + + if(blockEntity instanceof TileEntityBoiler) + { + TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); + } + if(blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); + par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); + } + } + + return true; + } + } + @Override + public TileEntity createNewTileEntity(World var1,int meta) + { + switch(meta) + { + case 1: return new TileEntityBoiler(); + case 2: return new TileEntityFireBox(); + case 3: return new TileEntityFireBox(); + case 4: return new TileEntityFireBox(); + case 5: return new TileEntityFireBox(); + } + return null; + } + + /** + * Called when the block is placed in the world. + */ + @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; + int metadata = par1World.getBlockMetadata(x, y, z); + TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); + + switch (angle) + { + case 0: tileEntity.setDirection(1); break; + case 1: tileEntity.setDirection(2); break; + case 2: tileEntity.setDirection(3); break; + case 3: tileEntity.setDirection(4); break; + } + } + /** + * Called whenever the block is removed. + */ + @Override + public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ + if (!keepFurnaceInventory) + { + TileEntityMachine var5 = null; + TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); + if(entityBox instanceof TileEntityFireBox) + { + var5 = (TileEntityFireBox)entityBox; + } + else if(entityBox instanceof TileEntityBoiler) + { + var5 = (TileEntityBoiler)entityBox; + } + if (var5 != null) + { + for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) + { + ItemStack var7 = var5.getStackInSlot(var6); + + if (var7 != null) + { + float var8 = this.mRandom.nextFloat() * 0.8F + 0.1F; + float var9 = this.mRandom.nextFloat() * 0.8F + 0.1F; + float var10 = this.mRandom.nextFloat() * 0.8F + 0.1F; + + while (var7.stackSize > 0) + { + int var11 = this.mRandom.nextInt(21) + 10; + + if (var11 > var7.stackSize) + { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); + + if (var7.hasTagCompound()) + { + var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); + } + + float var13 = 0.05F; + var12.motionX = (double)((float)this.mRandom.nextGaussian() * var13); + var12.motionY = (double)((float)this.mRandom.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.mRandom.nextGaussian() * var13); + par1World.spawnEntityInWorld(var12); + } + } + } + } + } + + super.breakBlock(par1World, par2, par3, par4, par5, par6); + } + + @Override + public String getTextureFile() + { + return "/EUIClient/textures/blocks/blocks.png"; + } + @Override + public boolean isOpaqueCube() + { + return false; + } + @Override + public boolean renderAsNormalBlock() + { + return false; + } + @Override + public int getRenderType() + { + return ItemRenderHelperS.renderID; + } + +} diff --git a/src/common/steampower/ContainerFake.java b/1.4.2/src/common/steampower/ContainerFake.java similarity index 96% rename from src/common/steampower/ContainerFake.java rename to 1.4.2/src/common/steampower/ContainerFake.java index 922a6751..132a9246 100644 --- a/src/common/steampower/ContainerFake.java +++ b/1.4.2/src/common/steampower/ContainerFake.java @@ -1,47 +1,47 @@ -package steampower; - -import net.minecraft.src.Container; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Slot; -import net.minecraft.src.TileEntity; - -public class ContainerFake extends Container -{ - private IInventory tileEntity; - - public ContainerFake(InventoryPlayer par1InventoryPlayer, IInventory tileEntity) - { - this.tileEntity = tileEntity; - // this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} +package steampower; + +import net.minecraft.src.Container; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Slot; +import net.minecraft.src.TileEntity; + +public class ContainerFake extends Container +{ + private IInventory tileEntity; + + public ContainerFake(InventoryPlayer par1InventoryPlayer, IInventory tileEntity) + { + this.tileEntity = tileEntity; + // this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + return null; + } +} diff --git a/src/common/steampower/ItemMachine.java b/1.4.2/src/common/steampower/ItemMachine.java similarity index 96% rename from src/common/steampower/ItemMachine.java rename to 1.4.2/src/common/steampower/ItemMachine.java index c80b7cca..9be0d49f 100644 --- a/src/common/steampower/ItemMachine.java +++ b/1.4.2/src/common/steampower/ItemMachine.java @@ -1,65 +1,65 @@ -package steampower; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.src.*; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - this.setIconIndex(21); - this.setCreativeTab(CreativeTabs.tabBlock); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 1)); - par3List.add(new ItemStack(this, 1, 2)); - - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return SteamPowerMain.textureFile+"Items.png"; - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 1: return 23; - case 2: return 22; - case 15: return 25; - } - return this.iconIndex+par1; - } - @Override - public int getMetadata(int metadata) - { - return metadata; - } - @Override - public String getItemName() - { - return "Machine"; - } - @Override - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalProcessor"; - case 1: return "Boiler"; - case 2: return "FireBox"; - case 3: return "SteamGen"; - case 15: return "EnergyNuller"; - } - return this.getItemName(); - } - } - +package steampower; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.src.*; + +public class ItemMachine extends ItemBlock { + + public ItemMachine(int id) { + super(id); + setMaxDamage(0); + setHasSubtypes(true); + this.setIconIndex(21); + this.setCreativeTab(CreativeTabs.tabBlock); + } + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + + par3List.add(new ItemStack(this, 1, 1)); + par3List.add(new ItemStack(this, 1, 2)); + + } + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return SteamPowerMain.textureFile+"Items.png"; + } + @Override + public int getIconFromDamage(int par1) + { + switch(par1) + { + case 1: return 23; + case 2: return 22; + case 15: return 25; + } + return this.iconIndex+par1; + } + @Override + public int getMetadata(int metadata) + { + return metadata; + } + @Override + public String getItemName() + { + return "Machine"; + } + @Override + public String getItemNameIS(ItemStack par1ItemStack) + { + int var3 = par1ItemStack.getItemDamage(); + switch(var3) + { + case 0: return "CoalProcessor"; + case 1: return "Boiler"; + case 2: return "FireBox"; + case 3: return "SteamGen"; + case 15: return "EnergyNuller"; + } + return this.getItemName(); + } + } + diff --git a/src/common/steampower/SteamPowerMain.java b/1.4.2/src/common/steampower/SteamPowerMain.java similarity index 97% rename from src/common/steampower/SteamPowerMain.java rename to 1.4.2/src/common/steampower/SteamPowerMain.java index f3e43eae..7167be40 100644 --- a/src/common/steampower/SteamPowerMain.java +++ b/1.4.2/src/common/steampower/SteamPowerMain.java @@ -1,153 +1,153 @@ -package steampower; - -import java.io.File; - -import net.minecraft.src.Block; -import net.minecraft.src.CraftingManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import net.minecraftforge.oredict.ShapedOreRecipe; -import steampower.turbine.BlockGenerator; -import steampower.turbine.BlockSteamPiston; -import steampower.turbine.ItemEngine; -import steampower.turbine.TileEntitytopGen; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.BasicPipesMain; -import cpw.mods.fml.common.Mod; -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.SidedProxy; -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.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; - -@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") -@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPowerMain { - static Configuration config = new Configuration((new File( - cpw.mods.fml.common.Loader.instance().getConfigDir(), - "/UniversalElectricity/SteamPower.cfg"))); - private static int BlockID = configurationProperties(); - public static int EngineItemID; - public static int EngineID; - public static int genID; - public static int genOutput; - public static int steamOutBoiler; - public static int pipeLoss; - public static int boilerHeat; - public static int fireOutput; - public static final String channel = "SPpack"; - public static Block machine = new BlockMachine(BlockID) - .setBlockName("machine"); - public static Block engine = new BlockSteamPiston(EngineID) - .setBlockName("SteamEngien"); - public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); - public static Item itemEngine = new ItemEngine(EngineItemID) - .setItemName("SteamEngine"); - - public static SteamPowerMain instance; - - @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") - public static SteamProxy proxy; - public static String textureFile = "/textures/"; - - public static int configurationProperties() { - config.load(); - BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "MachinesID", 3030).value); - EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "EngineItem", 30308).value); - EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "SteamEngineID", 3031).value); - genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "ElecGenID", 3032).value); - genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, - "genOutputWattsmax", 1000).value); - steamOutBoiler = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); - boilerHeat = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); - fireOutput = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); - config.save(); - return BlockID; - } - - @PreInit - public void preInit(FMLPreInitializationEvent event) { - instance = this; - NetworkRegistry.instance().registerGuiHandler(this, this.proxy); - proxy.preInit(); - GameRegistry.registerBlock(machine, ItemMachine.class); - GameRegistry.registerBlock(engine); - GameRegistry.registerBlock(gen); - } - - @Init - public void load(FMLInitializationEvent evt) { - proxy.init(); - GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); - // Names............... - LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); - LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); - LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), - "SteamPiston"); - - } - - @PostInit - public void postInit(FMLPostInitializationEvent event) { - - proxy.postInit(); - // Crafting - try { - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(gen, 1), - new Object[] { "@T@", "OVO", "@T@", 'T', - new ItemStack(BasicPipesMain.rod, 1), '@', - "plateSteel", 'O', "basicCircuit", 'V', - "motor" })); - /** - * TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata - * 2-5 - */ - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(machine, 1, 1), - new Object[] { "TT", "VV", "TT", 'T', - new ItemStack(BasicPipesMain.parts, 1, 6), - 'V', - new ItemStack(BasicPipesMain.parts, 1, 7) })); - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(machine, 1, 2), - new Object[] { "@", "F", 'F', Block.stoneOvenIdle, - '@', "plateSteel" })); - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), - new Object[] { "GGG", "VPV", "@T@", 'T', - new ItemStack(BasicPipesMain.parts, 1, 1), - 'G', BasicPipesMain.rod, '@', "plateSteel", - 'P', Block.pistonBase, 'V', - new ItemStack(BasicPipesMain.parts, 1, 7), - 'M', "motor" })); - } catch (Exception e) { - e.printStackTrace(); - System.out.print("UE based recipes not loaded"); - } - } - -} +package steampower; + +import java.io.File; + +import net.minecraft.src.Block; +import net.minecraft.src.CraftingManager; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.oredict.ShapedOreRecipe; +import steampower.turbine.BlockGenerator; +import steampower.turbine.BlockSteamPiston; +import steampower.turbine.ItemEngine; +import steampower.turbine.TileEntitytopGen; +import universalelectricity.prefab.network.PacketManager; +import basicpipes.BasicPipesMain; +import cpw.mods.fml.common.Mod; +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.SidedProxy; +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.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; + +@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") +@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class SteamPowerMain { + static Configuration config = new Configuration((new File( + cpw.mods.fml.common.Loader.instance().getConfigDir(), + "/UniversalElectricity/SteamPower.cfg"))); + private static int BlockID = configurationProperties(); + public static int EngineItemID; + public static int EngineID; + public static int genID; + public static int genOutput; + public static int steamOutBoiler; + public static int pipeLoss; + public static int boilerHeat; + public static int fireOutput; + public static final String channel = "SPpack"; + public static Block machine = new BlockMachine(BlockID) + .setBlockName("machine"); + public static Block engine = new BlockSteamPiston(EngineID) + .setBlockName("SteamEngien"); + public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); + public static Item itemEngine = new ItemEngine(EngineItemID) + .setItemName("SteamEngine"); + + public static SteamPowerMain instance; + + @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") + public static SteamProxy proxy; + public static String textureFile = "/textures/"; + + public static int configurationProperties() { + config.load(); + BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "MachinesID", 3030).value); + EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, + "EngineItem", 30308).value); + EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "SteamEngineID", 3031).value); + genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, + "ElecGenID", 3032).value); + genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, + "genOutputWattsmax", 1000).value); + steamOutBoiler = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); + boilerHeat = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); + fireOutput = Integer.parseInt(config.get( + Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); + config.save(); + return BlockID; + } + + @PreInit + public void preInit(FMLPreInitializationEvent event) { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); + GameRegistry.registerBlock(machine, ItemMachine.class); + GameRegistry.registerBlock(engine); + GameRegistry.registerBlock(gen); + } + + @Init + public void load(FMLInitializationEvent evt) { + proxy.init(); + GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); + // Names............... + LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); + LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); + LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), + "SteamPiston"); + + } + + @PostInit + public void postInit(FMLPostInitializationEvent event) { + + proxy.postInit(); + // Crafting + try { + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(gen, 1), + new Object[] { "@T@", "OVO", "@T@", 'T', + new ItemStack(BasicPipesMain.rod, 1), '@', + "plateSteel", 'O', "basicCircuit", 'V', + "motor" })); + /** + * TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata + * 2-5 + */ + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(machine, 1, 1), + new Object[] { "TT", "VV", "TT", 'T', + new ItemStack(BasicPipesMain.parts, 1, 6), + 'V', + new ItemStack(BasicPipesMain.parts, 1, 7) })); + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(machine, 1, 2), + new Object[] { "@", "F", 'F', Block.stoneOvenIdle, + '@', "plateSteel" })); + CraftingManager + .getInstance() + .getRecipeList() + .add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), + new Object[] { "GGG", "VPV", "@T@", 'T', + new ItemStack(BasicPipesMain.parts, 1, 1), + 'G', BasicPipesMain.rod, '@', "plateSteel", + 'P', Block.pistonBase, 'V', + new ItemStack(BasicPipesMain.parts, 1, 7), + 'M', "motor" })); + } catch (Exception e) { + e.printStackTrace(); + System.out.print("UE based recipes not loaded"); + } + } + +} diff --git a/src/common/steampower/SteamProxy.java b/1.4.2/src/common/steampower/SteamProxy.java similarity index 96% rename from src/common/steampower/SteamProxy.java rename to 1.4.2/src/common/steampower/SteamProxy.java index bd8048a2..9bf6e79e 100644 --- a/src/common/steampower/SteamProxy.java +++ b/1.4.2/src/common/steampower/SteamProxy.java @@ -1,67 +1,67 @@ -package steampower; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.ContainerFireBox; -import steampower.burner.TileEntityFireBox; -import steampower.turbine.TileEntityGen; -import steampower.turbine.TileEntitySteamPiston; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class SteamProxy implements IGuiHandler{ - - public void preInit() - { - - } - public void init() - { - GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); - GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); - GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); - GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); - - } - 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) - { - case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); - } - } - - 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) - { - case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - default: return new ContainerFake(player.inventory, (IInventory) tileEntity); - } - } - - return null; - } -} +package steampower; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.ContainerFireBox; +import steampower.burner.TileEntityFireBox; +import steampower.turbine.TileEntityGen; +import steampower.turbine.TileEntitySteamPiston; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; + +public class SteamProxy implements IGuiHandler{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); + GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); + GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); + + } + 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) + { + case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); + } + } + + 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) + { + case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + default: return new ContainerFake(player.inventory, (IInventory) tileEntity); + } + } + + return null; + } +} diff --git a/src/common/steampower/TileEntityMachine.java b/1.4.2/src/common/steampower/TileEntityMachine.java similarity index 96% rename from src/common/steampower/TileEntityMachine.java rename to 1.4.2/src/common/steampower/TileEntityMachine.java index 59352751..20345c5a 100644 --- a/src/common/steampower/TileEntityMachine.java +++ b/1.4.2/src/common/steampower/TileEntityMachine.java @@ -1,220 +1,220 @@ -package steampower; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.Packet; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.PacketManager; -public class TileEntityMachine extends TileEntity implements IInventory, ISidedInventory -{ - public int facing = 0; - private int count = 0; - public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; - private int getInvSize() { - return 1; - } - public int getDirection() - { - return this.facing; - } - - public void setDirection(int i) - { - this.facing = i; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", this.facing); - //inventory - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.storedItems.length; ++var3) - { - if (this.storedItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.storedItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - //inventory - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.storedItems = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.storedItems.length) - { - this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - //vars - this.facing = par1NBTTagCompound.getInteger("facing"); - } - @Override - public boolean canUpdate() - { - return true; - } - public Object[] getSendData() - { - return new Object[]{}; - } - public boolean needUpdate() - { - return true; - } - @Override - public void updateEntity() - { - super.updateEntity(); - - if(count ++ >= 10 && !worldObj.isRemote && needUpdate()) - {count = 0; - Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); - } - } - - - ////////////////////////// - //I Inventory shit - ///////////////////////// - public int getSizeInventory() - { - return this.storedItems.length; - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.storedItems[par1]; - } - - public ItemStack decrStackSize(int par1, int par2) - { - if (this.storedItems[par1] != null) - { - ItemStack var3; - - if (this.storedItems[par1].stackSize <= par2) - { - var3 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var3; - } - else - { - var3 = this.storedItems[par1].splitStack(par2); - - if (this.storedItems[par1].stackSize == 0) - { - this.storedItems[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.storedItems[par1] != null) - { - ItemStack var2 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.storedItems[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public int getStartInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public String getInvName() { - // TODO Auto-generated method stub - return "SteamMachine"; - } - @Override - public void openChest() { - // TODO Auto-generated method stub - - } - @Override - public void closeChest() { - // TODO Auto-generated method stub - - } +package steampower; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.NBTTagList; +import net.minecraft.src.Packet; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.core.Vector3; +import universalelectricity.prefab.network.PacketManager; +public class TileEntityMachine extends TileEntity implements IInventory, ISidedInventory +{ + public int facing = 0; + private int count = 0; + public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; + private int getInvSize() { + return 1; + } + public int getDirection() + { + return this.facing; + } + + public void setDirection(int i) + { + this.facing = i; + } + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("facing", this.facing); + //inventory + NBTTagList var2 = new NBTTagList(); + + for (int var3 = 0; var3 < this.storedItems.length; ++var3) + { + if (this.storedItems[var3] != null) + { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.storedItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + par1NBTTagCompound.setTag("Items", var2); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + //inventory + NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); + this.storedItems = new ItemStack[this.getSizeInventory()]; + + for (int var3 = 0; var3 < var2.tagCount(); ++var3) + { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + + if (var5 >= 0 && var5 < this.storedItems.length) + { + this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + //vars + this.facing = par1NBTTagCompound.getInteger("facing"); + } + @Override + public boolean canUpdate() + { + return true; + } + public Object[] getSendData() + { + return new Object[]{}; + } + public boolean needUpdate() + { + return true; + } + @Override + public void updateEntity() + { + super.updateEntity(); + + if(count ++ >= 10 && !worldObj.isRemote && needUpdate()) + {count = 0; + Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); + PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); + } + } + + + ////////////////////////// + //I Inventory shit + ///////////////////////// + public int getSizeInventory() + { + return this.storedItems.length; + } + + /** + * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't + * this more of a set than a get?* + */ + public int getInventoryStackLimit() + { + return 64; + } + + + /** + * Do not make give this method the name canInteractWith because it clashes with Container + */ + public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) + { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + /** + * Returns the stack in slot i + */ + public ItemStack getStackInSlot(int par1) + { + return this.storedItems[par1]; + } + + public ItemStack decrStackSize(int par1, int par2) + { + if (this.storedItems[par1] != null) + { + ItemStack var3; + + if (this.storedItems[par1].stackSize <= par2) + { + var3 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var3; + } + else + { + var3 = this.storedItems[par1].splitStack(par2); + + if (this.storedItems[par1].stackSize == 0) + { + this.storedItems[par1] = null; + } + + return var3; + } + } + else + { + return null; + } + } + + /** + * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - + * like when you close a workbench GUI. + */ + public ItemStack getStackInSlotOnClosing(int par1) + { + if (this.storedItems[par1] != null) + { + ItemStack var2 = this.storedItems[par1]; + this.storedItems[par1] = null; + return var2; + } + else + { + return null; + } + } + + /** + * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). + */ + public void setInventorySlotContents(int par1, ItemStack par2ItemStack) + { + this.storedItems[par1] = par2ItemStack; + + if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) + { + par2ItemStack.stackSize = this.getInventoryStackLimit(); + } + } + @Override + public int getStartInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public int getSizeInventorySide(ForgeDirection side) { + // TODO Auto-generated method stub + return 0; + } + @Override + public String getInvName() { + // TODO Auto-generated method stub + return "SteamMachine"; + } + @Override + public void openChest() { + // TODO Auto-generated method stub + + } + @Override + public void closeChest() { + // TODO Auto-generated method stub + + } } \ No newline at end of file diff --git a/src/common/steampower/boiler/TileEntityBoiler.java b/1.4.2/src/common/steampower/boiler/TileEntityBoiler.java similarity index 96% rename from src/common/steampower/boiler/TileEntityBoiler.java rename to 1.4.2/src/common/steampower/boiler/TileEntityBoiler.java index 6639f660..2e783b87 100644 --- a/src/common/steampower/boiler/TileEntityBoiler.java +++ b/1.4.2/src/common/steampower/boiler/TileEntityBoiler.java @@ -1,249 +1,249 @@ -package steampower.boiler; -import net.minecraft.src.Block; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IHeatProducer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IStorageTank; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, IStorageTank -{ - public int steam = 0; - public int water = 0; - public int heat = 0; - public int hullHeat = 0; - public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; - public int tankCount = 0; - public int tickCount = 0; - - //----------------------------- - //Update stuff - //----------------------------- - @Override - public void updateEntity() - { - //update connection list used for rendering - this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - this.tankCount = 0; - for(int i =0; i < connectedBlocks.length; i++) - { - if(connectedBlocks[i] != null) - { - tankCount++; - } - }//end connection update - if(tickCount++ >= 10 && !worldObj.isRemote) - { - tickCount = 0; - - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if(ent instanceof IHeatProducer) - { - this.heat = (int) Math.min(((IHeatProducer)ent).onProduceHeat(250, ForgeDirection.UP)+heat,2000); - }else - if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) - { - this.heat = Math.min(90+heat,2000); - } - if(hullHeat < 10000) - { - int mHeat = 10000 - hullHeat; - int hHeat = mHeat - Math.max((mHeat - this.heat),0); - hullHeat = Math.min(hullHeat + hHeat,10000); - this.heat -=hHeat; - }else - { - if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - this.water--; - this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); - this.heat -= 2000; - } - this.hullHeat-=5; - } - this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); - this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); - } - super.updateEntity(); - } - //----------------------------- - //Liquid stuff - //----------------------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) - { - if(type == Liquid.WATER) - { - if(this.water < this.getLiquidCapacity(Liquid.WATER)) - { - int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); - this.water += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - }else - if(type == Liquid.STEAM) - { - if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); - this.steam += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { - if(type == Liquid.WATER) - { - return true; - }else - if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return 14; - }else - if(type == Liquid.STEAM) - { - return 140; - } - return 0; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - //TODO setup the actual math for this - if(vol < this.steam) - { - this.steam -= vol; - return vol; - }else - if(this.steam >= 1) - { - this.steam -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return 100; - } - return 0; - } - //----------------------------- - //Data - //----------------------------- - public Object[] getSendData() - { - return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try{ - this.water = dataStream.readInt(); - this.steam = dataStream.readInt(); - this.heat = dataStream.readInt(); - this.hullHeat = dataStream.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - } - - } - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("water", this.water); - par1NBTTagCompound.setInteger("steam", this.steam); - par1NBTTagCompound.setInteger("heat", this.heat); - par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.water = par1NBTTagCompound.getInteger("water"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.heat = par1NBTTagCompound.getInteger("heat"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - -} +package steampower.boiler; +import net.minecraft.src.Block; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import universalelectricity.prefab.network.IPacketReceiver; +import basicpipes.pipes.api.IHeatProducer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IStorageTank; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, IStorageTank +{ + public int steam = 0; + public int water = 0; + public int heat = 0; + public int hullHeat = 0; + public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; + public int tankCount = 0; + public int tickCount = 0; + + //----------------------------- + //Update stuff + //----------------------------- + @Override + public void updateEntity() + { + //update connection list used for rendering + this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + this.tankCount = 0; + for(int i =0; i < connectedBlocks.length; i++) + { + if(connectedBlocks[i] != null) + { + tankCount++; + } + }//end connection update + if(tickCount++ >= 10 && !worldObj.isRemote) + { + tickCount = 0; + + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if(ent instanceof IHeatProducer) + { + this.heat = (int) Math.min(((IHeatProducer)ent).onProduceHeat(250, ForgeDirection.UP)+heat,2000); + }else + if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) + { + this.heat = Math.min(90+heat,2000); + } + if(hullHeat < 10000) + { + int mHeat = 10000 - hullHeat; + int hHeat = mHeat - Math.max((mHeat - this.heat),0); + hullHeat = Math.min(hullHeat + hHeat,10000); + this.heat -=hHeat; + }else + { + if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + this.water--; + this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); + this.heat -= 2000; + } + this.hullHeat-=5; + } + this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); + this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); + } + super.updateEntity(); + } + //----------------------------- + //Liquid stuff + //----------------------------- + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) + { + if(type == Liquid.WATER) + { + if(this.water < this.getLiquidCapacity(Liquid.WATER)) + { + int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); + this.water += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } + }else + if(type == Liquid.STEAM) + { + if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); + this.steam += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } + } + return vol; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { + if(type == Liquid.WATER) + { + return true; + }else + if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) + { + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return 14; + }else + if(type == Liquid.STEAM) + { + return 140; + } + return 0; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) + { + //TODO setup the actual math for this + if(vol < this.steam) + { + this.steam -= vol; + return vol; + }else + if(this.steam >= 1) + { + this.steam -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return 100; + } + return 0; + } + //----------------------------- + //Data + //----------------------------- + public Object[] getSendData() + { + return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; + } + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + this.water = dataStream.readInt(); + this.steam = dataStream.readInt(); + this.heat = dataStream.readInt(); + this.hullHeat = dataStream.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + } + + } + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("water", this.water); + par1NBTTagCompound.setInteger("steam", this.steam); + par1NBTTagCompound.setInteger("heat", this.heat); + par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.water = par1NBTTagCompound.getInteger("water"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.heat = par1NBTTagCompound.getInteger("heat"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + +} diff --git a/src/common/steampower/burner/ContainerFireBox.java b/1.4.2/src/common/steampower/burner/ContainerFireBox.java similarity index 96% rename from src/common/steampower/burner/ContainerFireBox.java rename to 1.4.2/src/common/steampower/burner/ContainerFireBox.java index 19b934ec..66353850 100644 --- a/src/common/steampower/burner/ContainerFireBox.java +++ b/1.4.2/src/common/steampower/burner/ContainerFireBox.java @@ -1,42 +1,42 @@ -package steampower.burner; - -import net.minecraft.src.*; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} +package steampower.burner; + +import net.minecraft.src.*; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/src/common/steampower/burner/TileEntityFireBox.java b/1.4.2/src/common/steampower/burner/TileEntityFireBox.java similarity index 96% rename from src/common/steampower/burner/TileEntityFireBox.java rename to 1.4.2/src/common/steampower/burner/TileEntityFireBox.java index 3d0777ac..38fdf37f 100644 --- a/src/common/steampower/burner/TileEntityFireBox.java +++ b/1.4.2/src/common/steampower/burner/TileEntityFireBox.java @@ -1,214 +1,214 @@ -package steampower.burner; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import steampower.SteamPowerMain; -import steampower.TileEntityMachine; -import steampower.boiler.TileEntityBoiler; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IHeatProducer; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer -{ - //max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - //Current generation rate based on hull heat. In TICKS. - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - private int getInvSize() { - return 1; - } - public int getTickInterval() - { - return 5; - - } - public boolean needUpdate() - { - return true; - } - public void updateEntity() - { - super.updateEntity(); - if(count++ >= 10) - { - count = 0; - addConnection(); - if(!worldObj.isRemote) - { - sharCoal(); - } - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if(blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - if (!this.worldObj.isRemote){ - - - maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*10); - - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. - if (this.storedItems[0] != null && isConnected) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - if(isConnected) - { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/10); - } - } - //Loose heat when the generator is not connected or if there is no coal in the inventory. - if(this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate-5, 0); - } - } - } - - //gets all connected fireBoxes and shares its supply of coal - public void sharCoal(){ - for(int i =0; i<6;i++) - { - - if(connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if(this.storedItems[0] != null) - { - if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) - { - if(connectedConsumer.storedItems[0] != null) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; - if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); - connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; - this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(),1,this.storedItems[0].getItemDamage()); - this.storedItems[0].stackSize -= 1; - } - } - } - } - } - - - } - public void addConnection() - { - connectedUnits = 0; - TileEntity[] aEntity = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - for(int i = 0; i<6; i++) - { - - - if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity[i]; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); - } - @Override - public String getInvName() { - return "FireBox"; - } - public float onProduceHeat(float jouls, ForgeDirection side) { - if(side == ForgeDirection.UP) - { - return Math.min(generateRate,jouls); - } - return 0; - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - connectedUnits = dataStream.readInt(); - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} +package steampower.burner; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; +import steampower.boiler.TileEntityBoiler; +import universalelectricity.prefab.network.IPacketReceiver; +import basicpipes.pipes.api.IHeatProducer; +import basicpipes.pipes.api.MHelper; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer +{ + //max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + //Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + private int getInvSize() { + return 1; + } + public int getTickInterval() + { + return 5; + + } + public boolean needUpdate() + { + return true; + } + public void updateEntity() + { + super.updateEntity(); + if(count++ >= 10) + { + count = 0; + addConnection(); + if(!worldObj.isRemote) + { + sharCoal(); + } + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if(blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + if (!this.worldObj.isRemote){ + + + maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*10); + + //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. + if (this.storedItems[0] != null && isConnected) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + //Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime --; + if(isConnected) + { + this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/10); + } + } + //Loose heat when the generator is not connected or if there is no coal in the inventory. + if(this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate-5, 0); + } + } + } + + //gets all connected fireBoxes and shares its supply of coal + public void sharCoal(){ + for(int i =0; i<6;i++) + { + + if(connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if(this.storedItems[0] != null) + { + if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) + { + if(connectedConsumer.storedItems[0] != null) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; + if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); + connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; + this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(),1,this.storedItems[0].getItemDamage()); + this.storedItems[0].stackSize -= 1; + } + } + } + } + } + + + } + public void addConnection() + { + connectedUnits = 0; + TileEntity[] aEntity = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + for(int i = 0; i<6; i++) + { + + + if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity[i]; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + } + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); + } + @Override + public String getInvName() { + return "FireBox"; + } + public float onProduceHeat(float jouls, ForgeDirection side) { + if(side == ForgeDirection.UP) + { + return Math.min(generateRate,jouls); + } + return 0; + } + @Override + public Object[] getSendData() + { + return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + facing = dataStream.readInt(); + connectedUnits = dataStream.readInt(); + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch(Exception e) + { + e.printStackTrace(); + } + + } +} diff --git a/src/common/steampower/mcmod.info b/1.4.2/src/common/steampower/mcmod.info similarity index 96% rename from src/common/steampower/mcmod.info rename to 1.4.2/src/common/steampower/mcmod.info index 14d8b129..922b39f5 100644 --- a/src/common/steampower/mcmod.info +++ b/1.4.2/src/common/steampower/mcmod.info @@ -1,21 +1,21 @@ -[ -{ - "modid": "SteamPower", - "name": "Steam Power", - "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", - "version": "1.8", - "mcversion": "1.3.2", - "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", - "updateUrl": "", - "authors": [ - "DarkGuardsman" - ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": ["UE","BasicPipes" - ] -} +[ +{ + "modid": "SteamPower", + "name": "Steam Power", + "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", + "version": "1.8", + "mcversion": "1.3.2", + "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE","BasicPipes" + ] +} ] \ No newline at end of file diff --git a/src/common/steampower/turbine/BlockGenerator.java b/1.4.2/src/common/steampower/turbine/BlockGenerator.java similarity index 96% rename from src/common/steampower/turbine/BlockGenerator.java rename to 1.4.2/src/common/steampower/turbine/BlockGenerator.java index 8be43d01..008c12a5 100644 --- a/src/common/steampower/turbine/BlockGenerator.java +++ b/1.4.2/src/common/steampower/turbine/BlockGenerator.java @@ -1,68 +1,68 @@ -package steampower.turbine; - -import java.util.ArrayList; - -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 steampower.ItemRenderHelperS; - -public class BlockGenerator extends universalelectricity.prefab.BlockMachine { - - public BlockGenerator(int id) { - super("Generator", id, Material.iron); - this.setCreativeTab(CreativeTabs.tabBlock); - } - - @Override - public void addCreativeItems(ArrayList itemList) { - itemList.add(new ItemStack(this, 1, 0)); - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, - EntityLiving par5EntityLiving) { - int angle = MathHelper - .floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - int angle = MathHelper - .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if (metadata < 3) { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); - } else { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public int getRenderType() { - return ItemRenderHelperS.renderID; - } - - @Override - public TileEntity createNewTileEntity(World world) { - return new TileEntityGen(); - } -} +package steampower.turbine; + +import java.util.ArrayList; + +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 steampower.ItemRenderHelperS; + +public class BlockGenerator extends universalelectricity.prefab.BlockMachine { + + public BlockGenerator(int id) { + super("Generator", id, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + @Override + public void addCreativeItems(ArrayList itemList) { + itemList.add(new ItemStack(this, 1, 0)); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, + EntityLiving par5EntityLiving) { + int angle = MathHelper + .floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); + } + + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + int angle = MathHelper + .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); + } else { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); + } + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return ItemRenderHelperS.renderID; + } + + @Override + public TileEntity createNewTileEntity(World world) { + return new TileEntityGen(); + } +} diff --git a/src/common/steampower/turbine/BlockSteamPiston.java b/1.4.2/src/common/steampower/turbine/BlockSteamPiston.java similarity index 96% rename from src/common/steampower/turbine/BlockSteamPiston.java rename to 1.4.2/src/common/steampower/turbine/BlockSteamPiston.java index 40759920..8a78297d 100644 --- a/src/common/steampower/turbine/BlockSteamPiston.java +++ b/1.4.2/src/common/steampower/turbine/BlockSteamPiston.java @@ -1,114 +1,114 @@ -package steampower.turbine; - -import java.util.Random; - -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; -import steampower.SteamPowerMain; - -public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine { - - public BlockSteamPiston(int par1) { - super("SteamEngine", par1, Material.iron); - - } - - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - return false; - - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - int angle = MathHelper - .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if (metadata < 3) { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); - } else { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - - public TileEntity createNewTileEntity(World var1) { - return null; - } - - public void breakBlock(World world, int x, int y, int z, int par5, int par6) { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if (meta < 4) { - if (world.getBlockId(x, y + 1, z) == this.blockID) { - if (world.getBlockMetadata(x, y, z) > 4) { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } else if (meta > 4) { - if (world.getBlockId(x, y - 1, z) == this.blockID) { - if (world.getBlockMetadata(x, y, z) < 4) { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public int getRenderType() { - return -1; - } - - @Override - public TileEntity createNewTileEntity(World world, int metadata) { - if (metadata >= 0 && metadata < 4) { - return new TileEntitySteamPiston(); - } - if (metadata == 14) { - return new TileEntitytopGen(); - } - return null; - } - - public void onNeighborBlockChange(World par1World, int par2, int par3, - int par4, int par5) { - int meta = par1World.getBlockMetadata(par2, par3, par4); - if (meta < 4) { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } else { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - } - - @Override - public int idDropped(int par1, Random par2Random, int par3) { - return SteamPowerMain.itemEngine.shiftedIndex; - } - - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3 + 1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) - && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); - } -} +package steampower.turbine; + +import java.util.Random; + +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; +import steampower.SteamPowerMain; + +public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine { + + public BlockSteamPiston(int par1) { + super("SteamEngine", par1, Material.iron); + + } + + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + return false; + + } + + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) { + int angle = MathHelper + .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); + } else { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); + } + return true; + } + + public TileEntity createNewTileEntity(World var1) { + return null; + } + + public void breakBlock(World world, int x, int y, int z, int par5, int par6) { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if (meta < 4) { + if (world.getBlockId(x, y + 1, z) == this.blockID) { + if (world.getBlockMetadata(x, y, z) > 4) { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } else if (meta > 4) { + if (world.getBlockId(x, y - 1, z) == this.blockID) { + if (world.getBlockMetadata(x, y, z) < 4) { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return -1; + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) { + if (metadata >= 0 && metadata < 4) { + return new TileEntitySteamPiston(); + } + if (metadata == 14) { + return new TileEntitytopGen(); + } + return null; + } + + public void onNeighborBlockChange(World par1World, int par2, int par3, + int par4, int par5) { + int meta = par1World.getBlockMetadata(par2, par3, par4); + if (meta < 4) { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } else { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + } + + @Override + public int idDropped(int par1, Random par2Random, int par3) { + return SteamPowerMain.itemEngine.shiftedIndex; + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3 + 1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) + && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); + } +} diff --git a/src/common/steampower/turbine/ItemEngine.java b/1.4.2/src/common/steampower/turbine/ItemEngine.java similarity index 96% rename from src/common/steampower/turbine/ItemEngine.java rename to 1.4.2/src/common/steampower/turbine/ItemEngine.java index 3cb43c29..ec8b6ae8 100644 --- a/src/common/steampower/turbine/ItemEngine.java +++ b/1.4.2/src/common/steampower/turbine/ItemEngine.java @@ -1,112 +1,112 @@ -package steampower.turbine; - -import java.util.List; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.World; -import steampower.SteamPowerMain; -import steampower.TileEntityMachine; - -public class ItemEngine extends Item { - public ItemEngine(int par1) { - super(par1); - this.maxStackSize = 5; - this.setCreativeTab(CreativeTabs.tabBlock); - this.setIconIndex(21); - } - - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, - List par3List) { - par3List.add(new ItemStack(this, 1, 0)); - } - - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return SteamPowerMain.textureFile + "Items.png"; - } - - public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, - World world, int x, int y, int z, int par7, float par8, float par9, - float par10) { - int var11 = world.getBlockId(x, y, z); - int BlockID = SteamPowerMain.EngineID; - - if (var11 == Block.snow.blockID) { - par7 = 1; - } else if (var11 != Block.vine.blockID - && var11 != Block.tallGrass.blockID - && var11 != Block.deadBush.blockID - && (Block.blocksList[var11] == null || !Block.blocksList[var11] - .isBlockReplaceable(world, x, y, z))) { - if (par7 == 0) { - --y; - } - - if (par7 == 1) { - ++y; - } - - if (par7 == 2) { - --z; - } - - if (par7 == 3) { - ++z; - } - - if (par7 == 4) { - --x; - } - - if (par7 == 5) { - ++x; - } - } - - if (itemStack.stackSize == 0) { - return false; - } else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) { - return false; - } else if (y == 255 - && Block.blocksList[BlockID].blockMaterial.isSolid()) { - return false; - } else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, - ePlayer)) { - Block var12 = Block.blocksList[BlockID]; - int angle = MathHelper - .floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - switch (angle) { - case 0: - world.setBlockAndMetadata(x, y, z, var12.blockID, 0); - break; - case 1: - world.setBlockAndMetadata(x, y, z, var12.blockID, 1); - break; - case 2: - world.setBlockAndMetadata(x, y, z, var12.blockID, 2); - break; - case 3: - world.setBlockAndMetadata(x, y, z, var12.blockID, 3); - break; - } - int meta = world.getBlockMetadata(x, y, z); - // ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.setBlockAndMetadataWithNotify(x, y + 1, z, var12.blockID, 14); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.editingBlocks = false; - --itemStack.stackSize; - - return true; - } else { - return false; - } - } -} +package steampower.turbine; + +import java.util.List; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.MathHelper; +import net.minecraft.src.World; +import steampower.SteamPowerMain; +import steampower.TileEntityMachine; + +public class ItemEngine extends Item { + public ItemEngine(int par1) { + super(par1); + this.maxStackSize = 5; + this.setCreativeTab(CreativeTabs.tabBlock); + this.setIconIndex(21); + } + + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, + List par3List) { + par3List.add(new ItemStack(this, 1, 0)); + } + + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return SteamPowerMain.textureFile + "Items.png"; + } + + public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, + World world, int x, int y, int z, int par7, float par8, float par9, + float par10) { + int var11 = world.getBlockId(x, y, z); + int BlockID = SteamPowerMain.EngineID; + + if (var11 == Block.snow.blockID) { + par7 = 1; + } else if (var11 != Block.vine.blockID + && var11 != Block.tallGrass.blockID + && var11 != Block.deadBush.blockID + && (Block.blocksList[var11] == null || !Block.blocksList[var11] + .isBlockReplaceable(world, x, y, z))) { + if (par7 == 0) { + --y; + } + + if (par7 == 1) { + ++y; + } + + if (par7 == 2) { + --z; + } + + if (par7 == 3) { + ++z; + } + + if (par7 == 4) { + --x; + } + + if (par7 == 5) { + ++x; + } + } + + if (itemStack.stackSize == 0) { + return false; + } else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) { + return false; + } else if (y == 255 + && Block.blocksList[BlockID].blockMaterial.isSolid()) { + return false; + } else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, + ePlayer)) { + Block var12 = Block.blocksList[BlockID]; + int angle = MathHelper + .floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + switch (angle) { + case 0: + world.setBlockAndMetadata(x, y, z, var12.blockID, 0); + break; + case 1: + world.setBlockAndMetadata(x, y, z, var12.blockID, 1); + break; + case 2: + world.setBlockAndMetadata(x, y, z, var12.blockID, 2); + break; + case 3: + world.setBlockAndMetadata(x, y, z, var12.blockID, 3); + break; + } + int meta = world.getBlockMetadata(x, y, z); + // ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.setBlockAndMetadataWithNotify(x, y + 1, z, var12.blockID, 14); + world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); + world.editingBlocks = false; + --itemStack.stackSize; + + return true; + } else { + return false; + } + } +} diff --git a/src/common/steampower/turbine/TileEntityGen.java b/1.4.2/src/common/steampower/turbine/TileEntityGen.java similarity index 95% rename from src/common/steampower/turbine/TileEntityGen.java rename to 1.4.2/src/common/steampower/turbine/TileEntityGen.java index 96dad40b..166c762b 100644 --- a/src/common/steampower/turbine/TileEntityGen.java +++ b/1.4.2/src/common/steampower/turbine/TileEntityGen.java @@ -1,185 +1,185 @@ -package steampower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.electricity.ElectricityManager; -import universalelectricity.implement.IConductor; -import universalelectricity.implement.IElectricityProducer; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IMechanical; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, IMechanical,IElectricityProducer -{ - ForgeDirection facing = ForgeDirection.DOWN; - - public int force = 0; - public int aForce = 0; - public int pos = 0; - public int disableTicks = 0; - public double genAmmount = 0; - public int tCount = 0; - public boolean empProf = false; - - IConductor[] wires = {null,null,null,null,null,null}; - public boolean needUpdate() - { - return false; - } - @Override - public void updateEntity() - { - - - this.genAmmount = force/this.getVoltage(); - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - int wireCount = 0; - switch(meta) - { - case 0: nMeta = 2;break; - case 1: nMeta = 5;break; - case 2: nMeta = 3;break; - case 3: nMeta = 4;break; - } - facing = ForgeDirection.getOrientation(nMeta).getOpposite(); - if(genAmmount > 0) - { - //worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); - } - for(int i = 0; i < 6; i++) - { - ForgeDirection side = ForgeDirection.UNKNOWN; - switch(i) - { - case 0: side = ForgeDirection.UP;break; - //case 1: side = ForgeDirection.DOWN;break; - case 2: side = ForgeDirection.NORTH;break; - case 3: side = ForgeDirection.EAST;break; - case 4: side = ForgeDirection.SOUTH;break; - case 5: side = ForgeDirection.WEST;break; - } - if(side != facing && side != facing.getOpposite()) - { - TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord+side.offsetX, yCoord+side.offsetY, zCoord+side.offsetZ); - - if (tileEntity instanceof IConductor) - { - if (ElectricityManager.instance.getElectricityRequired(((IConductor)tileEntity).getNetwork()) > 0) - { - this.wires[i] = (IConductor)tileEntity; - wireCount++; - } - else - { - this.wires[i] = null; - } - } - else - { - this.wires[i] = null; - } - } - - } - for(int side =0; side < 6; side++) - { - if(wires[side] instanceof IConductor) - { - double max = wires[side].getMaxAmps(); - ElectricityManager.instance.produceElectricity(this, wires[side],Math.min(genAmmount/wireCount,max), this.getVoltage()); - } - } - super.updateEntity(); - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - // TODO Auto-generated method stub - - } - //------------------------------ - //Mechanics - //------------------------------ - @Override - public int getForceSide(ForgeDirection side) { - if(side == facing.getOpposite()) - { - return aForce; - } - return 0; - } - - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(side == facing.getOpposite()) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(side == facing) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.force = force; - return force; - } - - @Override - public int getAnimationPos() { - return pos; - } - //------------------------------ - //Electric - //------------------------------ - @Override - public void onDisable(int duration) - { - this.disableTicks = duration; - } - - @Override - public boolean isDisabled() { - if(disableTicks-- <= 0) - { - return false; - } - return true; - } - - @Override - public double getVoltage() { - return 120; - } - - @Override - public boolean canConnect(ForgeDirection side) { - if(side != ForgeDirection.DOWN && side != facing && side != facing.getOpposite()) - { - return true; - } - return false; - } - -} +package steampower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import universalelectricity.electricity.ElectricityManager; +import universalelectricity.implement.IConductor; +import universalelectricity.implement.IElectricityProducer; +import universalelectricity.prefab.network.IPacketReceiver; +import basicpipes.pipes.api.IMechanical; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, IMechanical,IElectricityProducer +{ + ForgeDirection facing = ForgeDirection.DOWN; + + public int force = 0; + public int aForce = 0; + public int pos = 0; + public int disableTicks = 0; + public double genAmmount = 0; + public int tCount = 0; + public boolean empProf = false; + + IConductor[] wires = {null,null,null,null,null,null}; + public boolean needUpdate() + { + return false; + } + @Override + public void updateEntity() + { + + + this.genAmmount = force/this.getVoltage(); + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; + int wireCount = 0; + switch(meta) + { + case 0: nMeta = 2;break; + case 1: nMeta = 5;break; + case 2: nMeta = 3;break; + case 3: nMeta = 4;break; + } + facing = ForgeDirection.getOrientation(nMeta).getOpposite(); + if(genAmmount > 0) + { + //worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); + } + for(int i = 0; i < 6; i++) + { + ForgeDirection side = ForgeDirection.UNKNOWN; + switch(i) + { + case 0: side = ForgeDirection.UP;break; + //case 1: side = ForgeDirection.DOWN;break; + case 2: side = ForgeDirection.NORTH;break; + case 3: side = ForgeDirection.EAST;break; + case 4: side = ForgeDirection.SOUTH;break; + case 5: side = ForgeDirection.WEST;break; + } + if(side != facing && side != facing.getOpposite()) + { + TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord+side.offsetX, yCoord+side.offsetY, zCoord+side.offsetZ); + + if (tileEntity instanceof IConductor) + { + if (ElectricityManager.instance.getElectricityRequired(((IConductor)tileEntity).getNetwork()) > 0) + { + this.wires[i] = (IConductor)tileEntity; + wireCount++; + } + else + { + this.wires[i] = null; + } + } + else + { + this.wires[i] = null; + } + } + + } + for(int side =0; side < 6; side++) + { + if(wires[side] instanceof IConductor) + { + double max = wires[side].getMaxAmps(); + ElectricityManager.instance.produceElectricity(this, wires[side],Math.min(genAmmount/wireCount,max), this.getVoltage()); + } + } + super.updateEntity(); + } + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput data) { + // TODO Auto-generated method stub + + } + //------------------------------ + //Mechanics + //------------------------------ + @Override + public int getForceSide(ForgeDirection side) { + if(side == facing.getOpposite()) + { + return aForce; + } + return 0; + } + + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + if(side == facing.getOpposite()) + { + return true; + } + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(side == facing) + { + return true; + } + return false; + } + + @Override + public int applyForce(int force) { + this.force = force; + return force; + } + + @Override + public int getAnimationPos() { + return pos; + } + //------------------------------ + //Electric + //------------------------------ + @Override + public void onDisable(int duration) + { + this.disableTicks = duration; + } + + @Override + public boolean isDisabled() { + if(disableTicks-- <= 0) + { + return false; + } + return true; + } + + @Override + public double getVoltage() { + return 120; + } + + @Override + public boolean canConnect(ForgeDirection side) { + if(side != ForgeDirection.DOWN && side != facing && side != facing.getOpposite()) + { + return true; + } + return false; + } + +} diff --git a/src/common/steampower/turbine/TileEntitySteamPiston.java b/1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java similarity index 95% rename from src/common/steampower/turbine/TileEntitySteamPiston.java rename to 1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java index 1e9df301..b3f84578 100644 --- a/src/common/steampower/turbine/TileEntitySteamPiston.java +++ b/1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java @@ -1,330 +1,330 @@ -package steampower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IMechanical; -import basicpipes.pipes.api.Liquid; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechanical -{ - public int force = 0; - public int aForce = 0; - public int bForce = 0; - private int frictionLoad = 10; - public int steam = 0; - public int water = 0; - 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; - public int tCount = 0; - private ForgeDirection frontDir; - public TileEntity ff; - public TileEntity bb; - private int pWater = 0; - private int pSteam = 0; - private int pForce = 0; - public int pCount = 0; - public boolean running= false; - - @Override - public void updateEntity() - { - super.updateEntity(); - if(tickCount++ >=10) - {tickCount = 0; - //this.pos += 1; if(pos >= 8){pos = 0;} - //++tCount;if(tCount > 120){tCount = 0;} - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - - switch(meta) - { - case 0: nMeta = 2;break; - case 1: nMeta = 5;break; - case 2: nMeta = 3;break; - case 3: nMeta = 4;break; - } - frontDir = ForgeDirection.getOrientation(nMeta); - ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); - bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().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(!worldObj.isRemote) - { - if(this.runTime < 1 && this.steam > 0) - { - this.steam--; - this.runTime=60; - } - if(bb instanceof IMechanical) - { - if(((IMechanical) bb).canOutputSide(frontDir)) - { - this.bForce = ((IMechanical) bb).getForce(); - }else - if( bb instanceof TileEntitySteamPiston) - { - if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) - { - this.bForce = ((TileEntitySteamPiston) bb).getForce(); - } - } - else - { - this.bForce = 0; - } - } - if(this.runTime > 0) - { - genRate=Math.min(genRate + 1, 100); - this.runTime-=1; - this.force = Math.min(genRate * 10,1000); - this.aForce = Math.max(force - this.frictionLoad+bForce,0); - } - if(runTime == 0 && this.steam == 0) - { - genRate = Math.max(genRate--, 0); - force= Math.max(force-=10, 0);; - } - - if(ff instanceof IMechanical) - { - if(((IMechanical) ff).canInputSide(frontDir.getOpposite())) - { - ((IMechanical) ff).applyForce(this.aForce); - }else - { - - } - } - pWater = this.water; - pSteam = this.steam; - pForce = this.force; - - - } - } - } - - - //------------------- - //Liquid and mechanical stuff - //---------------- - @Override - public int getForceSide(ForgeDirection side) { - return aForce; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(frontDir.getOpposite() == side) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(frontDir == side) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.bForce = force; - return aForce; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.WATER) - { - if(this.water > 0) - { - this.water -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); - this.steam += vol - rejectedSteam; - return rejectedSteam; - } - return 0; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return this.maxWater; - }else - if(type == Liquid.STEAM) - { - return this.maxSteam; - } - return 0; - } - //------------------- - //Data - //---------------- - public Object[] getSendData() - { - return new Object[]{steam,water,force,aForce,genRate,runTime}; - } - public boolean needUpdate() - { - if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) - { - return true; - } - return false; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - this.steam = dataStream.readInt(); - this.water = dataStream.readInt(); - this.force = dataStream.readInt(); - this.aForce = dataStream.readInt(); - this.genRate= dataStream.readInt(); - this.runTime = dataStream.readInt(); - ++pCount; - } - catch(Exception e) - { - System.out.print("SteamPistonDataFail"); - e.printStackTrace(); - } - - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.runTime = par1NBTTagCompound.getInteger("time"); - this.genRate = par1NBTTagCompound.getInteger("gen"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.water = par1NBTTagCompound.getInteger("water"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("time", (int)this.runTime); - par1NBTTagCompound.setInteger("gen", (int)this.genRate); - par1NBTTagCompound.setInteger("steam", (int)this.steam); - par1NBTTagCompound.setInteger("water", (int)this.water); - - } - - - @Override - public int getAnimationPos() { - // TODO Auto-generated method stub - return this.pos; - } - - - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } - public int getMeta() { - return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - } -} +package steampower.turbine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import universalelectricity.prefab.network.IPacketReceiver; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.IMechanical; +import basicpipes.pipes.api.Liquid; + +import com.google.common.io.ByteArrayDataInput; + +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechanical +{ + public int force = 0; + public int aForce = 0; + public int bForce = 0; + private int frictionLoad = 10; + public int steam = 0; + public int water = 0; + 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; + public int tCount = 0; + private ForgeDirection frontDir; + public TileEntity ff; + public TileEntity bb; + private int pWater = 0; + private int pSteam = 0; + private int pForce = 0; + public int pCount = 0; + public boolean running= false; + + @Override + public void updateEntity() + { + super.updateEntity(); + if(tickCount++ >=10) + {tickCount = 0; + //this.pos += 1; if(pos >= 8){pos = 0;} + //++tCount;if(tCount > 120){tCount = 0;} + + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; + + switch(meta) + { + case 0: nMeta = 2;break; + case 1: nMeta = 5;break; + case 2: nMeta = 3;break; + case 3: nMeta = 4;break; + } + frontDir = ForgeDirection.getOrientation(nMeta); + ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); + bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().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(!worldObj.isRemote) + { + if(this.runTime < 1 && this.steam > 0) + { + this.steam--; + this.runTime=60; + } + if(bb instanceof IMechanical) + { + if(((IMechanical) bb).canOutputSide(frontDir)) + { + this.bForce = ((IMechanical) bb).getForce(); + }else + if( bb instanceof TileEntitySteamPiston) + { + if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) + { + this.bForce = ((TileEntitySteamPiston) bb).getForce(); + } + } + else + { + this.bForce = 0; + } + } + if(this.runTime > 0) + { + genRate=Math.min(genRate + 1, 100); + this.runTime-=1; + this.force = Math.min(genRate * 10,1000); + this.aForce = Math.max(force - this.frictionLoad+bForce,0); + } + if(runTime == 0 && this.steam == 0) + { + genRate = Math.max(genRate--, 0); + force= Math.max(force-=10, 0);; + } + + if(ff instanceof IMechanical) + { + if(((IMechanical) ff).canInputSide(frontDir.getOpposite())) + { + ((IMechanical) ff).applyForce(this.aForce); + }else + { + + } + } + pWater = this.water; + pSteam = this.steam; + pForce = this.force; + + + } + } + } + + + //------------------- + //Liquid and mechanical stuff + //---------------- + @Override + public int getForceSide(ForgeDirection side) { + return aForce; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + if(frontDir.getOpposite() == side) + { + return true; + } + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(frontDir == side) + { + return true; + } + return false; + } + + @Override + public int applyForce(int force) { + this.bForce = force; + return aForce; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.WATER) + { + if(this.water > 0) + { + this.water -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) + { + int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); + this.steam += vol - rejectedSteam; + return rejectedSteam; + } + return 0; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) + { + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return this.maxWater; + }else + if(type == Liquid.STEAM) + { + return this.maxSteam; + } + return 0; + } + //------------------- + //Data + //---------------- + public Object[] getSendData() + { + return new Object[]{steam,water,force,aForce,genRate,runTime}; + } + public boolean needUpdate() + { + if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) + { + return true; + } + return false; + } + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + this.steam = dataStream.readInt(); + this.water = dataStream.readInt(); + this.force = dataStream.readInt(); + this.aForce = dataStream.readInt(); + this.genRate= dataStream.readInt(); + this.runTime = dataStream.readInt(); + ++pCount; + } + catch(Exception e) + { + System.out.print("SteamPistonDataFail"); + e.printStackTrace(); + } + + } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.runTime = par1NBTTagCompound.getInteger("time"); + this.genRate = par1NBTTagCompound.getInteger("gen"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.water = par1NBTTagCompound.getInteger("water"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("time", (int)this.runTime); + par1NBTTagCompound.setInteger("gen", (int)this.genRate); + par1NBTTagCompound.setInteger("steam", (int)this.steam); + par1NBTTagCompound.setInteger("water", (int)this.water); + + } + + + @Override + public int getAnimationPos() { + // TODO Auto-generated method stub + return this.pos; + } + + + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } + public int getMeta() { + return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + } +} diff --git a/src/common/steampower/turbine/TileEntitytopGen.java b/1.4.2/src/common/steampower/turbine/TileEntitytopGen.java similarity index 96% rename from src/common/steampower/turbine/TileEntitytopGen.java rename to 1.4.2/src/common/steampower/turbine/TileEntitytopGen.java index 9c6e957e..c0f7dbd9 100644 --- a/src/common/steampower/turbine/TileEntitytopGen.java +++ b/1.4.2/src/common/steampower/turbine/TileEntitytopGen.java @@ -1,12 +1,12 @@ -package steampower.turbine; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -public class TileEntitytopGen extends TileEntityMachine { - -} +package steampower.turbine; + +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import steampower.TileEntityMachine; +import basicpipes.pipes.api.ILiquidConsumer; +import basicpipes.pipes.api.ILiquidProducer; +import basicpipes.pipes.api.Liquid; + +public class TileEntitytopGen extends TileEntityMachine { + +} diff --git a/src/minecraft/basicpipes/ItemRenderHelper.java b/1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java similarity index 97% rename from src/minecraft/basicpipes/ItemRenderHelper.java rename to 1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java index 036bb39a..82b99bec 100644 --- a/src/minecraft/basicpipes/ItemRenderHelper.java +++ b/1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java @@ -1,56 +1,56 @@ -package basicpipes; - -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.RenderBlocks; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class ItemRenderHelper implements ISimpleBlockRenderingHandler { - public static ItemRenderHelper instance = new ItemRenderHelper(); - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - private ModelPump modelPump = new ModelPump(); - private ModelGearRod modelRod = new ModelGearRod(); - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == BasicPipesMain.machineID && metadata < 4) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/pumps/Pump.png")); - modelPump.renderMain(0.0725F); - modelPump.renderC1(0.0725F); - modelPump.renderC2(0.0725F); - modelPump.renderC3(0.0725F); - GL11.glPopMatrix(); - } - if(block.blockID == BasicPipesMain.rodID) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.5F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/GearRod.png")); - modelRod.render(0.0825F,0); - GL11.glPopMatrix(); - } - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - return false; - } - - public boolean shouldRender3DInInventory() { - - return true; - } - - public int getRenderId() - { - return renderID; - } -} +package basicpipes; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.RenderBlocks; + +import org.lwjgl.opengl.GL11; + +import basicpipes.conductors.TileEntityPipe; +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; + +public class ItemRenderHelper implements ISimpleBlockRenderingHandler { + public static ItemRenderHelper instance = new ItemRenderHelper(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelPump modelPump = new ModelPump(); + private ModelGearRod modelRod = new ModelGearRod(); + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + if(block.blockID == BasicPipesMain.machineID && metadata < 4) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/pumps/Pump.png")); + modelPump.renderMain(0.0725F); + modelPump.renderC1(0.0725F); + modelPump.renderC2(0.0725F); + modelPump.renderC3(0.0725F); + GL11.glPopMatrix(); + } + if(block.blockID == BasicPipesMain.rodID) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.5F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/GearRod.png")); + modelRod.render(0.0825F,0); + GL11.glPopMatrix(); + } + } + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + public boolean shouldRender3DInInventory() { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/minecraft/basicpipes/ModelGearRod.java b/1.4.2/src/minecraft/basicpipes/ModelGearRod.java similarity index 96% rename from src/minecraft/basicpipes/ModelGearRod.java rename to 1.4.2/src/minecraft/basicpipes/ModelGearRod.java index 7e85322f..4a8f6330 100644 --- a/src/minecraft/basicpipes/ModelGearRod.java +++ b/1.4.2/src/minecraft/basicpipes/ModelGearRod.java @@ -1,139 +1,139 @@ -// Date: 9/25/2012 4:29:17 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGearRod extends ModelBase -{ - //fields - ModelRenderer Rod; - ModelRenderer front; - ModelRenderer back; - ModelRenderer f2; - ModelRenderer b2; - ModelRenderer b3; - ModelRenderer b4; - ModelRenderer b1; - ModelRenderer f1; - ModelRenderer f4; - ModelRenderer f3; - ModelRenderer Rod2; - - public ModelGearRod() - { - textureWidth = 64; - textureHeight = 32; - - Rod = new ModelRenderer(this, 0, 0); - Rod.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); - Rod.setRotationPoint(0F, 16F, -6F); - Rod.setTextureSize(64, 32); - Rod.mirror = true; - setRotation(Rod, 0F, 0F, 0F); - front = new ModelRenderer(this, 35, 0); - front.addBox(-2F, -2F, -2F, 4, 4, 2); - front.setRotationPoint(0F, 16F, -6F); - front.setTextureSize(64, 32); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - back = new ModelRenderer(this, 35, 0); - back.addBox(-2F, -2F, 0F, 4, 4, 2); - back.setRotationPoint(0F, 16F, 6F); - back.setTextureSize(64, 32); - back.mirror = true; - setRotation(back, 0F, 0F, 0.7853982F); - f2 = new ModelRenderer(this, 0, 17); - f2.addBox(0F, 0F, 0F, 1, 1, 2); - f2.setRotationPoint(1F, 17F, -10F); - f2.setTextureSize(64, 32); - f2.mirror = true; - setRotation(f2, 0F, 0F, 0F); - b2 = new ModelRenderer(this, 0, 17); - b2.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b2.setRotationPoint(0F, 18F, 8F); - b2.setTextureSize(64, 32); - b2.mirror = true; - setRotation(b2, 0F, 0F, 0.7853982F); - b3 = new ModelRenderer(this, 0, 17); - b3.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b3.setRotationPoint(-2F, 16F, 8F); - b3.setTextureSize(64, 32); - b3.mirror = true; - setRotation(b3, 0F, 0F, 0.7853982F); - b4 = new ModelRenderer(this, 0, 17); - b4.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b4.setRotationPoint(2F, 16F, 8F); - b4.setTextureSize(64, 32); - b4.mirror = true; - setRotation(b4, 0F, 0F, 0.7853982F); - b1 = new ModelRenderer(this, 0, 17); - b1.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b1.setRotationPoint(0F, 14F, 8F); - b1.setTextureSize(64, 32); - b1.mirror = true; - setRotation(b1, 0F, 0F, 0.7853982F); - f1 = new ModelRenderer(this, 0, 17); - f1.addBox(0F, 0F, 0F, 1, 1, 2); - f1.setRotationPoint(1F, 14F, -10F); - f1.setTextureSize(64, 32); - f1.mirror = true; - setRotation(f1, 0F, 0F, 0F); - f4 = new ModelRenderer(this, 0, 17); - f4.addBox(0F, 0F, 0F, 1, 1, 2); - f4.setRotationPoint(-2F, 17F, -10F); - f4.setTextureSize(64, 32); - f4.mirror = true; - setRotation(f4, 0F, 0F, 0F); - f3 = new ModelRenderer(this, 0, 17); - f3.addBox(0F, 0F, 0F, 1, 1, 2); - f3.setRotationPoint(-2F, 14F, -10F); - f3.setTextureSize(64, 32); - f3.mirror = true; - setRotation(f3, 0F, 0F, 0F); - Rod2 = new ModelRenderer(this, 0, 0); - Rod2.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); - Rod2.setRotationPoint(0F, 16F, -6F); - Rod2.setTextureSize(64, 32); - Rod2.mirror = true; - setRotation(Rod2, 0F, 0F, 0.7853982F); - } - public void render(float f5,int r) - { - - Rod.rotateAngleZ= 45 * r; - Rod2.rotateAngleZ= Rod.rotateAngleZ + 45; - Rod.render(f5); - Rod2.render(f5); - //TODO add rotation to rods - front.render(f5); - back.render(f5); - f2.render(f5); - b2.render(f5); - b3.render(f5); - b4.render(f5); - b1.render(f5); - f1.render(f5); - f4.render(f5); - f3.render(f5); - - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 9/25/2012 4:29:17 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGearRod extends ModelBase +{ + //fields + ModelRenderer Rod; + ModelRenderer front; + ModelRenderer back; + ModelRenderer f2; + ModelRenderer b2; + ModelRenderer b3; + ModelRenderer b4; + ModelRenderer b1; + ModelRenderer f1; + ModelRenderer f4; + ModelRenderer f3; + ModelRenderer Rod2; + + public ModelGearRod() + { + textureWidth = 64; + textureHeight = 32; + + Rod = new ModelRenderer(this, 0, 0); + Rod.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); + Rod.setRotationPoint(0F, 16F, -6F); + Rod.setTextureSize(64, 32); + Rod.mirror = true; + setRotation(Rod, 0F, 0F, 0F); + front = new ModelRenderer(this, 35, 0); + front.addBox(-2F, -2F, -2F, 4, 4, 2); + front.setRotationPoint(0F, 16F, -6F); + front.setTextureSize(64, 32); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + back = new ModelRenderer(this, 35, 0); + back.addBox(-2F, -2F, 0F, 4, 4, 2); + back.setRotationPoint(0F, 16F, 6F); + back.setTextureSize(64, 32); + back.mirror = true; + setRotation(back, 0F, 0F, 0.7853982F); + f2 = new ModelRenderer(this, 0, 17); + f2.addBox(0F, 0F, 0F, 1, 1, 2); + f2.setRotationPoint(1F, 17F, -10F); + f2.setTextureSize(64, 32); + f2.mirror = true; + setRotation(f2, 0F, 0F, 0F); + b2 = new ModelRenderer(this, 0, 17); + b2.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b2.setRotationPoint(0F, 18F, 8F); + b2.setTextureSize(64, 32); + b2.mirror = true; + setRotation(b2, 0F, 0F, 0.7853982F); + b3 = new ModelRenderer(this, 0, 17); + b3.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b3.setRotationPoint(-2F, 16F, 8F); + b3.setTextureSize(64, 32); + b3.mirror = true; + setRotation(b3, 0F, 0F, 0.7853982F); + b4 = new ModelRenderer(this, 0, 17); + b4.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b4.setRotationPoint(2F, 16F, 8F); + b4.setTextureSize(64, 32); + b4.mirror = true; + setRotation(b4, 0F, 0F, 0.7853982F); + b1 = new ModelRenderer(this, 0, 17); + b1.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); + b1.setRotationPoint(0F, 14F, 8F); + b1.setTextureSize(64, 32); + b1.mirror = true; + setRotation(b1, 0F, 0F, 0.7853982F); + f1 = new ModelRenderer(this, 0, 17); + f1.addBox(0F, 0F, 0F, 1, 1, 2); + f1.setRotationPoint(1F, 14F, -10F); + f1.setTextureSize(64, 32); + f1.mirror = true; + setRotation(f1, 0F, 0F, 0F); + f4 = new ModelRenderer(this, 0, 17); + f4.addBox(0F, 0F, 0F, 1, 1, 2); + f4.setRotationPoint(-2F, 17F, -10F); + f4.setTextureSize(64, 32); + f4.mirror = true; + setRotation(f4, 0F, 0F, 0F); + f3 = new ModelRenderer(this, 0, 17); + f3.addBox(0F, 0F, 0F, 1, 1, 2); + f3.setRotationPoint(-2F, 14F, -10F); + f3.setTextureSize(64, 32); + f3.mirror = true; + setRotation(f3, 0F, 0F, 0F); + Rod2 = new ModelRenderer(this, 0, 0); + Rod2.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); + Rod2.setRotationPoint(0F, 16F, -6F); + Rod2.setTextureSize(64, 32); + Rod2.mirror = true; + setRotation(Rod2, 0F, 0F, 0.7853982F); + } + public void render(float f5,int r) + { + + Rod.rotateAngleZ= 45 * r; + Rod2.rotateAngleZ= Rod.rotateAngleZ + 45; + Rod.render(f5); + Rod2.render(f5); + //TODO add rotation to rods + front.render(f5); + back.render(f5); + f2.render(f5); + b2.render(f5); + b3.render(f5); + b4.render(f5); + b1.render(f5); + f1.render(f5); + f4.render(f5); + f3.render(f5); + + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/ModelLargePipe.java b/1.4.2/src/minecraft/basicpipes/ModelLargePipe.java similarity index 97% rename from src/minecraft/basicpipes/ModelLargePipe.java rename to 1.4.2/src/minecraft/basicpipes/ModelLargePipe.java index 212b10db..cc8e8f02 100644 --- a/src/minecraft/basicpipes/ModelLargePipe.java +++ b/1.4.2/src/minecraft/basicpipes/ModelLargePipe.java @@ -1,177 +1,177 @@ -// Date: 9/20/2012 12:00:21 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelLargePipe extends ModelBase -{ - //fields - ModelRenderer Mid; - ModelRenderer RightPipe; - ModelRenderer RightInter; - ModelRenderer RightConnect; - ModelRenderer LeftInter; - ModelRenderer LeftPipe; - ModelRenderer LeftConnect; - ModelRenderer TopInter; - ModelRenderer TopPipe; - ModelRenderer TopConnect; - ModelRenderer BottomPipe; - ModelRenderer BottomInter; - ModelRenderer BottomConnect; - ModelRenderer BackPipe; - ModelRenderer BackInter; - ModelRenderer BackConnect; - ModelRenderer FrontInter; - ModelRenderer FrontPipe; - ModelRenderer FrontConnect; - - public ModelLargePipe() - { - textureWidth = 128; - textureHeight = 32; - - Mid = new ModelRenderer(this, 50, 13); - Mid.addBox(-3F, -3F, -3F, 6, 6, 6); - Mid.setRotationPoint(0F, 16F, 0F); - Mid.setTextureSize(128, 32); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - RightPipe = new ModelRenderer(this, 25, 0); - RightPipe.addBox(0F, -3F, -3F, 4, 6, 6); - RightPipe.setRotationPoint(3F, 16F, 0F); - RightPipe.setTextureSize(128, 32); - RightPipe.mirror = true; - setRotation(RightPipe, 0F, 0F, 0F); - RightInter = new ModelRenderer(this, 98, 0); - RightInter.addBox(0F, -4F, -4F, 1, 8, 8); - RightInter.setRotationPoint(2F, 16F, 0F); - RightInter.setTextureSize(128, 32); - RightInter.mirror = true; - setRotation(RightInter, 0F, 0F, 0F); - RightConnect = new ModelRenderer(this, 98, 0); - RightConnect.addBox(0F, -4F, -4F, 1, 8, 8); - RightConnect.setRotationPoint(7F, 16F, 0F); - RightConnect.setTextureSize(128, 32); - RightConnect.mirror = true; - setRotation(RightConnect, 0F, 0F, 0F); - LeftInter = new ModelRenderer(this, 98, 0); - LeftInter.addBox(-1F, -4F, -4F, 1, 8, 8); - LeftInter.setRotationPoint(-2F, 16F, 0F); - LeftInter.setTextureSize(128, 32); - LeftInter.mirror = true; - setRotation(LeftInter, 0F, 0F, 0F); - LeftPipe = new ModelRenderer(this, 25, 0); - LeftPipe.addBox(-4F, -3F, -3F, 4, 6, 6); - LeftPipe.setRotationPoint(-3F, 16F, 0F); - LeftPipe.setTextureSize(128, 32); - LeftPipe.mirror = true; - setRotation(LeftPipe, 0F, 0F, 0F); - LeftConnect = new ModelRenderer(this, 98, 0); - LeftConnect.addBox(-1F, -4F, -4F, 1, 8, 8); - LeftConnect.setRotationPoint(-7F, 16F, 0F); - LeftConnect.setTextureSize(128, 32); - LeftConnect.mirror = true; - setRotation(LeftConnect, 0F, 0F, 0F); - TopInter = new ModelRenderer(this, 77, 17); - TopInter.addBox(-4F, -1F, -4F, 8, 1, 8); - TopInter.setRotationPoint(0F, 14F, 0F); - TopInter.setTextureSize(128, 32); - TopInter.mirror = true; - setRotation(TopInter, 0F, 0F, 0F); - TopPipe = new ModelRenderer(this, 50, 0); - TopPipe.addBox(-3F, -4F, -3F, 6, 4, 6); - TopPipe.setRotationPoint(0F, 13F, 0F); - TopPipe.setTextureSize(128, 32); - TopPipe.mirror = true; - setRotation(TopPipe, 0F, 0F, 0F); - TopConnect = new ModelRenderer(this, 77, 17); - TopConnect.addBox(-4F, -1F, -4F, 8, 1, 8); - TopConnect.setRotationPoint(0F, 9F, 0F); - TopConnect.setTextureSize(128, 32); - TopConnect.mirror = true; - setRotation(TopConnect, 0F, 0F, 0F); - BottomPipe = new ModelRenderer(this, 50, 0); - BottomPipe.addBox(-3F, 0F, -3F, 6, 4, 6); - BottomPipe.setRotationPoint(0F, 19F, 0F); - BottomPipe.setTextureSize(128, 32); - BottomPipe.mirror = true; - setRotation(BottomPipe, 0F, 0F, 0F); - BottomInter = new ModelRenderer(this, 77, 17); - BottomInter.addBox(-4F, 0F, -4F, 8, 1, 8); - BottomInter.setRotationPoint(0F, 18F, 0F); - BottomInter.setTextureSize(128, 32); - BottomInter.mirror = true; - setRotation(BottomInter, 0F, 0F, 0F); - BottomConnect = new ModelRenderer(this, 77, 17); - BottomConnect.addBox(-4F, 0F, -4F, 8, 1, 8); - BottomConnect.setRotationPoint(0F, 23F, 0F); - BottomConnect.setTextureSize(128, 32); - BottomConnect.mirror = true; - setRotation(BottomConnect, 0F, 0F, 0F); - BackPipe = new ModelRenderer(this, 0, 0); - BackPipe.addBox(-3F, -3F, 0F, 6, 6, 4); - BackPipe.setRotationPoint(0F, 16F, 3F); - BackPipe.setTextureSize(128, 32); - BackPipe.mirror = true; - setRotation(BackPipe, 0F, 0F, 0F); - BackInter = new ModelRenderer(this, 0, 23); - BackInter.addBox(-4F, -4F, 0F, 8, 8, 1); - BackInter.setRotationPoint(0F, 16F, 2F); - BackInter.setTextureSize(128, 32); - BackInter.mirror = true; - setRotation(BackInter, 0F, 0F, 0F); - BackConnect = new ModelRenderer(this, 0, 23); - BackConnect.addBox(-4F, -4F, 0F, 8, 8, 1); - BackConnect.setRotationPoint(0F, 16F, 7F); - BackConnect.setTextureSize(128, 32); - BackConnect.mirror = true; - setRotation(BackConnect, 0F, 0F, 0F); - FrontInter = new ModelRenderer(this, 0, 23); - FrontInter.addBox(-4F, -4F, -1F, 8, 8, 1); - FrontInter.setRotationPoint(0F, 16F, -2F); - FrontInter.setTextureSize(128, 32); - FrontInter.mirror = true; - setRotation(FrontInter, 0F, 0F, 0F); - FrontPipe = new ModelRenderer(this, 0, 0); - FrontPipe.addBox(-3F, -3F, -4F, 6, 6, 4); - FrontPipe.setRotationPoint(0F, 16F, -3F); - FrontPipe.setTextureSize(128, 32); - FrontPipe.mirror = true; - setRotation(FrontPipe, 0F, 0F, 0F); - FrontConnect = new ModelRenderer(this, 0, 23); - FrontConnect.addBox(-4F, -4F, -1F, 8, 8, 1); - FrontConnect.setRotationPoint(0F, 16F, -7F); - FrontConnect.setTextureSize(128, 32); - FrontConnect.mirror = true; - setRotation(FrontConnect, 0F, 0F, 0F); - } - public void renderMiddle() { Mid.render(0.0625F); } - public void renderBottom() { BottomPipe.render(0.0625F); BottomConnect.render(0.0625F); BottomInter.render(0.0625F);} - public void renderTop() { TopPipe.render(0.0625F);TopConnect.render(0.0625F); TopInter.render(0.0625F);} - public void renderLeft() { LeftPipe.render(0.0625F);LeftConnect.render(0.0625F); LeftInter.render(0.0625F);} - public void renderRight() { RightPipe.render(0.0625F);RightConnect.render(0.0625F); RightInter.render(0.0625F);} - public void renderBack() { BackPipe.render(0.0625F); BackConnect.render(0.0625F);BackInter.render(0.0625F); } - public void renderFront() { FrontPipe.render(0.0625F);FrontConnect.render(0.0625F);FrontInter.render(0.0625F);} - - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 9/20/2012 12:00:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelLargePipe extends ModelBase +{ + //fields + ModelRenderer Mid; + ModelRenderer RightPipe; + ModelRenderer RightInter; + ModelRenderer RightConnect; + ModelRenderer LeftInter; + ModelRenderer LeftPipe; + ModelRenderer LeftConnect; + ModelRenderer TopInter; + ModelRenderer TopPipe; + ModelRenderer TopConnect; + ModelRenderer BottomPipe; + ModelRenderer BottomInter; + ModelRenderer BottomConnect; + ModelRenderer BackPipe; + ModelRenderer BackInter; + ModelRenderer BackConnect; + ModelRenderer FrontInter; + ModelRenderer FrontPipe; + ModelRenderer FrontConnect; + + public ModelLargePipe() + { + textureWidth = 128; + textureHeight = 32; + + Mid = new ModelRenderer(this, 50, 13); + Mid.addBox(-3F, -3F, -3F, 6, 6, 6); + Mid.setRotationPoint(0F, 16F, 0F); + Mid.setTextureSize(128, 32); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 25, 0); + RightPipe.addBox(0F, -3F, -3F, 4, 6, 6); + RightPipe.setRotationPoint(3F, 16F, 0F); + RightPipe.setTextureSize(128, 32); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + RightInter = new ModelRenderer(this, 98, 0); + RightInter.addBox(0F, -4F, -4F, 1, 8, 8); + RightInter.setRotationPoint(2F, 16F, 0F); + RightInter.setTextureSize(128, 32); + RightInter.mirror = true; + setRotation(RightInter, 0F, 0F, 0F); + RightConnect = new ModelRenderer(this, 98, 0); + RightConnect.addBox(0F, -4F, -4F, 1, 8, 8); + RightConnect.setRotationPoint(7F, 16F, 0F); + RightConnect.setTextureSize(128, 32); + RightConnect.mirror = true; + setRotation(RightConnect, 0F, 0F, 0F); + LeftInter = new ModelRenderer(this, 98, 0); + LeftInter.addBox(-1F, -4F, -4F, 1, 8, 8); + LeftInter.setRotationPoint(-2F, 16F, 0F); + LeftInter.setTextureSize(128, 32); + LeftInter.mirror = true; + setRotation(LeftInter, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 25, 0); + LeftPipe.addBox(-4F, -3F, -3F, 4, 6, 6); + LeftPipe.setRotationPoint(-3F, 16F, 0F); + LeftPipe.setTextureSize(128, 32); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + LeftConnect = new ModelRenderer(this, 98, 0); + LeftConnect.addBox(-1F, -4F, -4F, 1, 8, 8); + LeftConnect.setRotationPoint(-7F, 16F, 0F); + LeftConnect.setTextureSize(128, 32); + LeftConnect.mirror = true; + setRotation(LeftConnect, 0F, 0F, 0F); + TopInter = new ModelRenderer(this, 77, 17); + TopInter.addBox(-4F, -1F, -4F, 8, 1, 8); + TopInter.setRotationPoint(0F, 14F, 0F); + TopInter.setTextureSize(128, 32); + TopInter.mirror = true; + setRotation(TopInter, 0F, 0F, 0F); + TopPipe = new ModelRenderer(this, 50, 0); + TopPipe.addBox(-3F, -4F, -3F, 6, 4, 6); + TopPipe.setRotationPoint(0F, 13F, 0F); + TopPipe.setTextureSize(128, 32); + TopPipe.mirror = true; + setRotation(TopPipe, 0F, 0F, 0F); + TopConnect = new ModelRenderer(this, 77, 17); + TopConnect.addBox(-4F, -1F, -4F, 8, 1, 8); + TopConnect.setRotationPoint(0F, 9F, 0F); + TopConnect.setTextureSize(128, 32); + TopConnect.mirror = true; + setRotation(TopConnect, 0F, 0F, 0F); + BottomPipe = new ModelRenderer(this, 50, 0); + BottomPipe.addBox(-3F, 0F, -3F, 6, 4, 6); + BottomPipe.setRotationPoint(0F, 19F, 0F); + BottomPipe.setTextureSize(128, 32); + BottomPipe.mirror = true; + setRotation(BottomPipe, 0F, 0F, 0F); + BottomInter = new ModelRenderer(this, 77, 17); + BottomInter.addBox(-4F, 0F, -4F, 8, 1, 8); + BottomInter.setRotationPoint(0F, 18F, 0F); + BottomInter.setTextureSize(128, 32); + BottomInter.mirror = true; + setRotation(BottomInter, 0F, 0F, 0F); + BottomConnect = new ModelRenderer(this, 77, 17); + BottomConnect.addBox(-4F, 0F, -4F, 8, 1, 8); + BottomConnect.setRotationPoint(0F, 23F, 0F); + BottomConnect.setTextureSize(128, 32); + BottomConnect.mirror = true; + setRotation(BottomConnect, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 0, 0); + BackPipe.addBox(-3F, -3F, 0F, 6, 6, 4); + BackPipe.setRotationPoint(0F, 16F, 3F); + BackPipe.setTextureSize(128, 32); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + BackInter = new ModelRenderer(this, 0, 23); + BackInter.addBox(-4F, -4F, 0F, 8, 8, 1); + BackInter.setRotationPoint(0F, 16F, 2F); + BackInter.setTextureSize(128, 32); + BackInter.mirror = true; + setRotation(BackInter, 0F, 0F, 0F); + BackConnect = new ModelRenderer(this, 0, 23); + BackConnect.addBox(-4F, -4F, 0F, 8, 8, 1); + BackConnect.setRotationPoint(0F, 16F, 7F); + BackConnect.setTextureSize(128, 32); + BackConnect.mirror = true; + setRotation(BackConnect, 0F, 0F, 0F); + FrontInter = new ModelRenderer(this, 0, 23); + FrontInter.addBox(-4F, -4F, -1F, 8, 8, 1); + FrontInter.setRotationPoint(0F, 16F, -2F); + FrontInter.setTextureSize(128, 32); + FrontInter.mirror = true; + setRotation(FrontInter, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 0, 0); + FrontPipe.addBox(-3F, -3F, -4F, 6, 6, 4); + FrontPipe.setRotationPoint(0F, 16F, -3F); + FrontPipe.setTextureSize(128, 32); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + FrontConnect = new ModelRenderer(this, 0, 23); + FrontConnect.addBox(-4F, -4F, -1F, 8, 8, 1); + FrontConnect.setRotationPoint(0F, 16F, -7F); + FrontConnect.setTextureSize(128, 32); + FrontConnect.mirror = true; + setRotation(FrontConnect, 0F, 0F, 0F); + } + public void renderMiddle() { Mid.render(0.0625F); } + public void renderBottom() { BottomPipe.render(0.0625F); BottomConnect.render(0.0625F); BottomInter.render(0.0625F);} + public void renderTop() { TopPipe.render(0.0625F);TopConnect.render(0.0625F); TopInter.render(0.0625F);} + public void renderLeft() { LeftPipe.render(0.0625F);LeftConnect.render(0.0625F); LeftInter.render(0.0625F);} + public void renderRight() { RightPipe.render(0.0625F);RightConnect.render(0.0625F); RightInter.render(0.0625F);} + public void renderBack() { BackPipe.render(0.0625F); BackConnect.render(0.0625F);BackInter.render(0.0625F); } + public void renderFront() { FrontPipe.render(0.0625F);FrontConnect.render(0.0625F);FrontInter.render(0.0625F);} + + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/ModelPipe.java b/1.4.2/src/minecraft/basicpipes/ModelPipe.java similarity index 96% rename from src/minecraft/basicpipes/ModelPipe.java rename to 1.4.2/src/minecraft/basicpipes/ModelPipe.java index b6122956..6ddce333 100644 --- a/src/minecraft/basicpipes/ModelPipe.java +++ b/1.4.2/src/minecraft/basicpipes/ModelPipe.java @@ -1,93 +1,93 @@ -package basicpipes; - -import net.minecraft.src.*; - -public class ModelPipe extends ModelBase -{ - //fields - ModelRenderer Middle; - ModelRenderer Right; - ModelRenderer Left; - ModelRenderer Back; - ModelRenderer Front; - ModelRenderer Top; - ModelRenderer Bottom; - - public ModelPipe() - { - textureWidth = 64; - textureHeight = 32; - - Middle = new ModelRenderer(this, 0, 0); - Middle.addBox(-1F, -1F, -1F, 4, 4, 4); - Middle.setRotationPoint(-1F, 15F, -1F); - Middle.setTextureSize(64, 32); - Middle.mirror = true; - setRotation(Middle, 0F, 0F, 0F); - Right = new ModelRenderer(this, 21, 0); - Right.addBox(0F, 0F, 0F, 6, 4, 4); - Right.setRotationPoint(2F, 14F, -2F); - Right.setTextureSize(64, 32); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - Left = new ModelRenderer(this, 21, 0); - Left.addBox(0F, 0F, 0F, 6, 4, 4); - Left.setRotationPoint(-8F, 14F, -2F); - Left.setTextureSize(64, 32); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - Back = new ModelRenderer(this, 0, 11); - Back.addBox(0F, 0F, 0F, 4, 4, 6); - Back.setRotationPoint(-2F, 14F, 2F); - Back.setTextureSize(64, 32); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - Front = new ModelRenderer(this, 0, 11); - Front.addBox(0F, 0F, 0F, 4, 4, 6); - Front.setRotationPoint(-2F, 14F, -8F); - Front.setTextureSize(64, 32); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - Top = new ModelRenderer(this, 21, 11); - Top.addBox(0F, 0F, 0F, 4, 6, 4); - Top.setRotationPoint(-2F, 8F, -2F); - Top.setTextureSize(64, 32); - Top.mirror = true; - setRotation(Top, 0F, 0F, 0F); - Bottom = new ModelRenderer(this, 21, 11); - Bottom.addBox(0F, 0F, 0F, 4, 6, 4); - Bottom.setRotationPoint(-2F, 18F, -2F); - Bottom.setTextureSize(64, 32); - Bottom.mirror = true; - setRotation(Bottom, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.renderMiddle(); - this.renderBottom(); - this.renderTop(); - this.renderLeft(); - this.renderRight(); - this.renderBack(); - this.renderFront(); - } - - public void renderMiddle() { Middle.render(0.0625F); } - public void renderBottom() { Bottom.render(0.0625F); } - public void renderTop() { Top.render(0.0625F); } - public void renderLeft() { Left.render(0.0625F); } - public void renderRight() { Right.render(0.0625F); } - public void renderBack() { Back.render(0.0625F); } - public void renderFront() { Front.render(0.0625F);} - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +package basicpipes; + +import net.minecraft.src.*; + +public class ModelPipe extends ModelBase +{ + //fields + ModelRenderer Middle; + ModelRenderer Right; + ModelRenderer Left; + ModelRenderer Back; + ModelRenderer Front; + ModelRenderer Top; + ModelRenderer Bottom; + + public ModelPipe() + { + textureWidth = 64; + textureHeight = 32; + + Middle = new ModelRenderer(this, 0, 0); + Middle.addBox(-1F, -1F, -1F, 4, 4, 4); + Middle.setRotationPoint(-1F, 15F, -1F); + Middle.setTextureSize(64, 32); + Middle.mirror = true; + setRotation(Middle, 0F, 0F, 0F); + Right = new ModelRenderer(this, 21, 0); + Right.addBox(0F, 0F, 0F, 6, 4, 4); + Right.setRotationPoint(2F, 14F, -2F); + Right.setTextureSize(64, 32); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + Left = new ModelRenderer(this, 21, 0); + Left.addBox(0F, 0F, 0F, 6, 4, 4); + Left.setRotationPoint(-8F, 14F, -2F); + Left.setTextureSize(64, 32); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + Back = new ModelRenderer(this, 0, 11); + Back.addBox(0F, 0F, 0F, 4, 4, 6); + Back.setRotationPoint(-2F, 14F, 2F); + Back.setTextureSize(64, 32); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + Front = new ModelRenderer(this, 0, 11); + Front.addBox(0F, 0F, 0F, 4, 4, 6); + Front.setRotationPoint(-2F, 14F, -8F); + Front.setTextureSize(64, 32); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + Top = new ModelRenderer(this, 21, 11); + Top.addBox(0F, 0F, 0F, 4, 6, 4); + Top.setRotationPoint(-2F, 8F, -2F); + Top.setTextureSize(64, 32); + Top.mirror = true; + setRotation(Top, 0F, 0F, 0F); + Bottom = new ModelRenderer(this, 21, 11); + Bottom.addBox(0F, 0F, 0F, 4, 6, 4); + Bottom.setRotationPoint(-2F, 18F, -2F); + Bottom.setTextureSize(64, 32); + Bottom.mirror = true; + setRotation(Bottom, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + this.renderMiddle(); + this.renderBottom(); + this.renderTop(); + this.renderLeft(); + this.renderRight(); + this.renderBack(); + this.renderFront(); + } + + public void renderMiddle() { Middle.render(0.0625F); } + public void renderBottom() { Bottom.render(0.0625F); } + public void renderTop() { Top.render(0.0625F); } + public void renderLeft() { Left.render(0.0625F); } + public void renderRight() { Right.render(0.0625F); } + public void renderBack() { Back.render(0.0625F); } + public void renderFront() { Front.render(0.0625F);} + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/ModelPump.java b/1.4.2/src/minecraft/basicpipes/ModelPump.java similarity index 96% rename from src/minecraft/basicpipes/ModelPump.java rename to 1.4.2/src/minecraft/basicpipes/ModelPump.java index 88cb2af9..53a2af45 100644 --- a/src/minecraft/basicpipes/ModelPump.java +++ b/1.4.2/src/minecraft/basicpipes/ModelPump.java @@ -1,140 +1,140 @@ -// Date: 9/3/2012 6:12:15 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelPump extends ModelBase -{ - //fields - ModelRenderer Main; - ModelRenderer sidePort; - ModelRenderer FrontPort; - ModelRenderer pivit; - ModelRenderer crank; - ModelRenderer Rope; - ModelRenderer pivit2; - ModelRenderer Piston; - ModelRenderer pPlate; - ModelRenderer Rope2; - ModelRenderer BackPort; - - public ModelPump() - { - textureWidth = 128; - textureHeight = 128; - - Main = new ModelRenderer(this, 0, 0); - Main.addBox(-5F, 0F, -5F, 10, 13, 10); - Main.setRotationPoint(1F, 11F, 0F); - Main.setTextureSize(128, 128); - Main.mirror = true; - setRotation(Main, 0F, 0F, 0F); - sidePort = new ModelRenderer(this, 0, 76); - sidePort.addBox(-6F, -3F, -3F, 6, 6, 6); - sidePort.setRotationPoint(8F, 16F, 0F); - sidePort.setTextureSize(128, 128); - sidePort.mirror = true; - setRotation(sidePort, 0F, 0F, 0F); - FrontPort = new ModelRenderer(this, 0, 63); - FrontPort.addBox(-3F, -3F, 0F, 6, 6, 6); - FrontPort.setRotationPoint(0F, 16F, -8F); - FrontPort.setTextureSize(128, 128); - FrontPort.mirror = true; - setRotation(FrontPort, 0F, 0F, 0F); - pivit = new ModelRenderer(this, 0, 40); - pivit.addBox(-1F, 0F, -1F, 2, 3, 1); - pivit.setRotationPoint(0F, 8F, 1F); - pivit.setTextureSize(128, 128); - pivit.mirror = true; - setRotation(pivit, 0F, 0F, 0F); - crank = new ModelRenderer(this, 48, 0); - crank.addBox(-8F, 0F, -1F, 14, 2, 1); - crank.setRotationPoint(0F, 7F, 0F); - crank.setTextureSize(128, 128); - crank.mirror = true; - setRotation(crank, 0F, 0F, 0F); - Rope = new ModelRenderer(this, 0, 28); - Rope.addBox(0F, 0F, 0F, 1, 7, 1); - Rope.setRotationPoint(4F, 8F, -1F); - Rope.setTextureSize(128, 128); - Rope.mirror = true; - setRotation(Rope, 0F, 0F, 0F); - pivit2 = new ModelRenderer(this, 0, 40); - pivit2.addBox(-1F, 0F, -1F, 2, 3, 1); - pivit2.setRotationPoint(0F, 8F, -1F); - pivit2.setTextureSize(128, 128); - pivit2.mirror = true; - setRotation(pivit2, 0F, 0F, 0F); - pPlate = new ModelRenderer(this, 34, 30); - pPlate.addBox(0F, 0F, 0F, 1, 12, 1); - pPlate.setRotationPoint(-5F, 12F, -1F); - pPlate.setTextureSize(128, 128); - pPlate.mirror = true; - setRotation(pPlate, 0F, 0F, 0F); - Piston = new ModelRenderer(this, 20, 30); - Piston.addBox(0F, 0F, 0F, 3, 12, 3); - Piston.setRotationPoint(-8F, 12F, -2F); - Piston.setTextureSize(128, 128); - Piston.mirror = true; - setRotation(Piston, 0F, 0F, 0F); - Rope2 = new ModelRenderer(this, 0, 28); - Rope2.addBox(0F, 0F, 0F, 1, 7, 1); - Rope2.setRotationPoint(-7F, 8F, -1F); - Rope2.setTextureSize(128, 128); - Rope2.mirror = true; - setRotation(Rope2, 0F, 0F, 0F); - BackPort = new ModelRenderer(this, 0, 50); - BackPort.addBox(-3F, -3F, -6F, 6, 6, 6); - BackPort.setRotationPoint(0F, 16F, 8F); - BackPort.setTextureSize(128, 128); - BackPort.mirror = true; - setRotation(BackPort, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - public void renderMain(float f5) - { - Main.render(f5); - pivit.render(f5); - crank.render(f5); - Rope.render(f5); - pivit2.render(f5); - Piston.render(f5); - pPlate.render(f5); - Rope2.render(f5); - } - public void renderC1(float f5) - { - sidePort.render(f5); - } - public void renderC2(float f5) - { - FrontPort.render(f5); - } - public void renderC3(float f5) - { - BackPort.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} +// Date: 9/3/2012 6:12:15 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelPump extends ModelBase +{ + //fields + ModelRenderer Main; + ModelRenderer sidePort; + ModelRenderer FrontPort; + ModelRenderer pivit; + ModelRenderer crank; + ModelRenderer Rope; + ModelRenderer pivit2; + ModelRenderer Piston; + ModelRenderer pPlate; + ModelRenderer Rope2; + ModelRenderer BackPort; + + public ModelPump() + { + textureWidth = 128; + textureHeight = 128; + + Main = new ModelRenderer(this, 0, 0); + Main.addBox(-5F, 0F, -5F, 10, 13, 10); + Main.setRotationPoint(1F, 11F, 0F); + Main.setTextureSize(128, 128); + Main.mirror = true; + setRotation(Main, 0F, 0F, 0F); + sidePort = new ModelRenderer(this, 0, 76); + sidePort.addBox(-6F, -3F, -3F, 6, 6, 6); + sidePort.setRotationPoint(8F, 16F, 0F); + sidePort.setTextureSize(128, 128); + sidePort.mirror = true; + setRotation(sidePort, 0F, 0F, 0F); + FrontPort = new ModelRenderer(this, 0, 63); + FrontPort.addBox(-3F, -3F, 0F, 6, 6, 6); + FrontPort.setRotationPoint(0F, 16F, -8F); + FrontPort.setTextureSize(128, 128); + FrontPort.mirror = true; + setRotation(FrontPort, 0F, 0F, 0F); + pivit = new ModelRenderer(this, 0, 40); + pivit.addBox(-1F, 0F, -1F, 2, 3, 1); + pivit.setRotationPoint(0F, 8F, 1F); + pivit.setTextureSize(128, 128); + pivit.mirror = true; + setRotation(pivit, 0F, 0F, 0F); + crank = new ModelRenderer(this, 48, 0); + crank.addBox(-8F, 0F, -1F, 14, 2, 1); + crank.setRotationPoint(0F, 7F, 0F); + crank.setTextureSize(128, 128); + crank.mirror = true; + setRotation(crank, 0F, 0F, 0F); + Rope = new ModelRenderer(this, 0, 28); + Rope.addBox(0F, 0F, 0F, 1, 7, 1); + Rope.setRotationPoint(4F, 8F, -1F); + Rope.setTextureSize(128, 128); + Rope.mirror = true; + setRotation(Rope, 0F, 0F, 0F); + pivit2 = new ModelRenderer(this, 0, 40); + pivit2.addBox(-1F, 0F, -1F, 2, 3, 1); + pivit2.setRotationPoint(0F, 8F, -1F); + pivit2.setTextureSize(128, 128); + pivit2.mirror = true; + setRotation(pivit2, 0F, 0F, 0F); + pPlate = new ModelRenderer(this, 34, 30); + pPlate.addBox(0F, 0F, 0F, 1, 12, 1); + pPlate.setRotationPoint(-5F, 12F, -1F); + pPlate.setTextureSize(128, 128); + pPlate.mirror = true; + setRotation(pPlate, 0F, 0F, 0F); + Piston = new ModelRenderer(this, 20, 30); + Piston.addBox(0F, 0F, 0F, 3, 12, 3); + Piston.setRotationPoint(-8F, 12F, -2F); + Piston.setTextureSize(128, 128); + Piston.mirror = true; + setRotation(Piston, 0F, 0F, 0F); + Rope2 = new ModelRenderer(this, 0, 28); + Rope2.addBox(0F, 0F, 0F, 1, 7, 1); + Rope2.setRotationPoint(-7F, 8F, -1F); + Rope2.setTextureSize(128, 128); + Rope2.mirror = true; + setRotation(Rope2, 0F, 0F, 0F); + BackPort = new ModelRenderer(this, 0, 50); + BackPort.addBox(-3F, -3F, -6F, 6, 6, 6); + BackPort.setRotationPoint(0F, 16F, 8F); + BackPort.setTextureSize(128, 128); + BackPort.mirror = true; + setRotation(BackPort, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + public void renderMain(float f5) + { + Main.render(f5); + pivit.render(f5); + crank.render(f5); + Rope.render(f5); + pivit2.render(f5); + Piston.render(f5); + pPlate.render(f5); + Rope2.render(f5); + } + public void renderC1(float f5) + { + sidePort.render(f5); + } + public void renderC2(float f5) + { + FrontPort.render(f5); + } + public void renderC3(float f5) + { + BackPort.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/minecraft/basicpipes/PipeClientProxy.java b/1.4.2/src/minecraft/basicpipes/PipeClientProxy.java similarity index 97% rename from src/minecraft/basicpipes/PipeClientProxy.java rename to 1.4.2/src/minecraft/basicpipes/PipeClientProxy.java index 2f737a87..6c65d868 100644 --- a/src/minecraft/basicpipes/PipeClientProxy.java +++ b/1.4.2/src/minecraft/basicpipes/PipeClientProxy.java @@ -1,34 +1,34 @@ -package basicpipes; - -import steampower.SteamPowerMain; -import basicpipes.PipeProxy; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import basicpipes.renderTank.RenderLTank; -import net.minecraftforge.client.MinecraftForgeClient; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.common.registry.GameRegistry; - -public class PipeClientProxy extends PipeProxy -{ - @Override - public void preInit() - { - //Preload textures - MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/Items.png"); - MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/blocks.png"); - RenderingRegistry.registerBlockHandler(new ItemRenderHelper()); - } - - @Override - public void init() - { - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPump.class, new RenderPump()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLTank.class, new RenderLTank()); - } -} +package basicpipes; + +import steampower.SteamPowerMain; +import basicpipes.PipeProxy; +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; +import basicpipes.machines.TileEntityPump; +import basicpipes.renderTank.RenderLTank; +import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.registry.GameRegistry; + +public class PipeClientProxy extends PipeProxy +{ + @Override + public void preInit() + { + //Preload textures + MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/Items.png"); + MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/blocks.png"); + RenderingRegistry.registerBlockHandler(new ItemRenderHelper()); + } + + @Override + public void init() + { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPump.class, new RenderPump()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLTank.class, new RenderLTank()); + } +} diff --git a/src/minecraft/basicpipes/RenderGearRod.java b/1.4.2/src/minecraft/basicpipes/RenderGearRod.java similarity index 96% rename from src/minecraft/basicpipes/RenderGearRod.java rename to 1.4.2/src/minecraft/basicpipes/RenderGearRod.java index 9531d470..85e52659 100644 --- a/src/minecraft/basicpipes/RenderGearRod.java +++ b/1.4.2/src/minecraft/basicpipes/RenderGearRod.java @@ -1,49 +1,49 @@ -package basicpipes; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.geared.ModelGearPiston; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; - - -public class RenderGearRod extends TileEntitySpecialRenderer -{ - private ModelGearRod model; - public RenderGearRod() - { - model = new ModelGearRod(); - } - public void renderAModelAt(TileEntityRod tileEntity, double d, double d1, double d2, float f) - { - bindTextureByName("/textures/GearRod.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(meta) - { - case 0: GL11.glRotatef(90f, 1f, 0f, 0f);break; - case 1: GL11.glRotatef(-90f, 1f, 0f, 0f);break; - case 2:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 5: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.render(0.0625F,tileEntity.pos); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityRod)tileEntity, var2, var4, var6, var8); - } - +package basicpipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.geared.ModelGearPiston; + +import basicpipes.conductors.TileEntityPipe; +import basicpipes.conductors.TileEntityRod; +import basicpipes.machines.TileEntityPump; +import basicpipes.pipes.api.Liquid; + + +public class RenderGearRod extends TileEntitySpecialRenderer +{ + private ModelGearRod model; + public RenderGearRod() + { + model = new ModelGearRod(); + } + public void renderAModelAt(TileEntityRod tileEntity, double d, double d1, double d2, float f) + { + bindTextureByName("/textures/GearRod.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(meta) + { + case 0: GL11.glRotatef(90f, 1f, 0f, 0f);break; + case 1: GL11.glRotatef(-90f, 1f, 0f, 0f);break; + case 2:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 5: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.render(0.0625F,tileEntity.pos); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityRod)tileEntity, var2, var4, var6, var8); + } + } \ No newline at end of file diff --git a/src/minecraft/basicpipes/RenderPipe.java b/1.4.2/src/minecraft/basicpipes/RenderPipe.java similarity index 97% rename from src/minecraft/basicpipes/RenderPipe.java rename to 1.4.2/src/minecraft/basicpipes/RenderPipe.java index 39eaa0b9..b1a76cbb 100644 --- a/src/minecraft/basicpipes/RenderPipe.java +++ b/1.4.2/src/minecraft/basicpipes/RenderPipe.java @@ -1,62 +1,62 @@ -package basicpipes; - -import net.minecraft.src.ModelBase; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.Liquid; - - -public class RenderPipe extends TileEntitySpecialRenderer -{ - Liquid type; - int size = 6; - - private ModelPipe fourPipe; - private ModelLargePipe SixPipe; - private ModelBase model = fourPipe; - - public RenderPipe() - { - fourPipe = new ModelPipe(); - SixPipe = new ModelLargePipe(); - } - - public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) - { - //Texture file - - type = tileEntity.getType(); - - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - switch(type.ordinal()) - { - case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; - case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixWaterPipe.png");break; - case 2: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixLavaPipe.png");break; - case 3: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixOilPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; - } - if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) SixPipe.renderTop(); - if(tileEntity.connectedBlocks[3] != null) SixPipe.renderFront(); - if(tileEntity.connectedBlocks[2] != null) SixPipe.renderBack(); - if(tileEntity.connectedBlocks[5] != null) SixPipe.renderRight(); - if(tileEntity.connectedBlocks[4] != null) SixPipe.renderLeft(); - SixPipe.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); - } - +package basicpipes; + +import net.minecraft.src.ModelBase; +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.conductors.TileEntityPipe; +import basicpipes.pipes.api.Liquid; + + +public class RenderPipe extends TileEntitySpecialRenderer +{ + Liquid type; + int size = 6; + + private ModelPipe fourPipe; + private ModelLargePipe SixPipe; + private ModelBase model = fourPipe; + + public RenderPipe() + { + fourPipe = new ModelPipe(); + SixPipe = new ModelLargePipe(); + } + + public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) + { + //Texture file + + type = tileEntity.getType(); + + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + switch(type.ordinal()) + { + case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; + case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixWaterPipe.png");break; + case 2: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixLavaPipe.png");break; + case 3: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixOilPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; + } + if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); + if(tileEntity.connectedBlocks[1] != null) SixPipe.renderTop(); + if(tileEntity.connectedBlocks[3] != null) SixPipe.renderFront(); + if(tileEntity.connectedBlocks[2] != null) SixPipe.renderBack(); + if(tileEntity.connectedBlocks[5] != null) SixPipe.renderRight(); + if(tileEntity.connectedBlocks[4] != null) SixPipe.renderLeft(); + SixPipe.renderMiddle(); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); + } + } \ No newline at end of file diff --git a/src/minecraft/basicpipes/RenderPump.java b/1.4.2/src/minecraft/basicpipes/RenderPump.java similarity index 96% rename from src/minecraft/basicpipes/RenderPump.java rename to 1.4.2/src/minecraft/basicpipes/RenderPump.java index 49de4753..47daad6b 100644 --- a/src/minecraft/basicpipes/RenderPump.java +++ b/1.4.2/src/minecraft/basicpipes/RenderPump.java @@ -1,59 +1,59 @@ -package basicpipes; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; - - -public class RenderPump extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelPump model; - - public RenderPump() - { - model = new ModelPump(); - } - - public void renderAModelAt(TileEntityPump tileEntity, double d, double d1, double d2, float f) - { - Liquid type = tileEntity.type; - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(type.ordinal()) - { - default: bindTextureByName("/textures/pumps/Pump.png");break; - //case 0://steam - case 1:bindTextureByName("/textures/pumps/WaterPump.png");break;//water - case 2:bindTextureByName("/textures/pumps/LavaPump.png");break;//lava - case 3:bindTextureByName("/textures/pumps/OilPump.png");break;//oil - //case 4://fuel - } - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.renderMain(0.0625F); - model.renderC1(0.0625F); - model.renderC2(0.0625F); - model.renderC3(0.0625F); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPump)tileEntity, var2, var4, var6, var8); - } - +package basicpipes; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import basicpipes.conductors.TileEntityPipe; +import basicpipes.machines.TileEntityPump; +import basicpipes.pipes.api.Liquid; + + +public class RenderPump extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelPump model; + + public RenderPump() + { + model = new ModelPump(); + } + + public void renderAModelAt(TileEntityPump tileEntity, double d, double d1, double d2, float f) + { + Liquid type = tileEntity.type; + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(type.ordinal()) + { + default: bindTextureByName("/textures/pumps/Pump.png");break; + //case 0://steam + case 1:bindTextureByName("/textures/pumps/WaterPump.png");break;//water + case 2:bindTextureByName("/textures/pumps/LavaPump.png");break;//lava + case 3:bindTextureByName("/textures/pumps/OilPump.png");break;//oil + //case 4://fuel + } + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.renderMain(0.0625F); + model.renderC1(0.0625F); + model.renderC2(0.0625F); + model.renderC3(0.0625F); + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityPump)tileEntity, var2, var4, var6, var8); + } + } \ No newline at end of file diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java similarity index 97% rename from src/minecraft/basicpipes/renderTank/ModelLiquidTank.java rename to 1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java index e4d217c2..a2a31d3c 100644 --- a/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java +++ b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java @@ -1,422 +1,422 @@ -// Date: 10/8/2012 7:31:40 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes.renderTank; - -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; - -public class ModelLiquidTank extends ModelBase -{ - //fields - ModelRenderer Mid; - ModelRenderer Corner; - ModelRenderer Corner2; - ModelRenderer Corner3; - ModelRenderer Corner4; - ModelRenderer C8; - ModelRenderer C7; - ModelRenderer C6; - ModelRenderer C5; - ModelRenderer C4; - ModelRenderer C; - ModelRenderer C3; - ModelRenderer C2; - ModelRenderer GuageT; - ModelRenderer GuageB; - ModelRenderer Guage; - ModelRenderer GuageR; - ModelRenderer GuageGlass; - ModelRenderer GuageL; - - ModelRenderer GuageT2; - ModelRenderer GuageB2; - ModelRenderer Guage2; - ModelRenderer GuageR2; - ModelRenderer GuageGlass2; - ModelRenderer GuageL2; - - ModelRenderer GuageT3; - ModelRenderer GuageB3; - ModelRenderer Guage3; - ModelRenderer GuageR3; - ModelRenderer GuageGlass3; - ModelRenderer GuageL3; - - ModelRenderer GuageT4; - ModelRenderer GuageB4; - ModelRenderer Guage4; - ModelRenderer GuageR4; - ModelRenderer GuageGlass4; - ModelRenderer GuageL4; - - ModelRenderer CCBottom; - ModelRenderer CCRight; - ModelRenderer CCLeft; - ModelRenderer CCFront; - ModelRenderer CCBack; - ModelRenderer CCTop; - - public ModelLiquidTank() - { - textureWidth = 128; - textureHeight = 128; - - Mid = new ModelRenderer(this, 0, 50); - Mid.addBox(-6F, 0F, -6F, 12, 14, 12); - Mid.setRotationPoint(0F, 9F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Corner = new ModelRenderer(this, 0, 30); - Corner.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner.setRotationPoint(-7F, 8F, 7F); - Corner.setTextureSize(128, 128); - Corner.mirror = true; - setRotation(Corner, 0F, 0F, 0F); - Corner2 = new ModelRenderer(this, 0, 30); - Corner2.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner2.setRotationPoint(-7F, 8F, -7F); - Corner2.setTextureSize(128, 128); - Corner2.mirror = true; - setRotation(Corner2, 0F, 0F, 0F); - Corner3 = new ModelRenderer(this, 0, 30); - Corner3.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner3.setRotationPoint(7F, 8F, -7F); - Corner3.setTextureSize(128, 128); - Corner3.mirror = true; - setRotation(Corner3, 0F, 0F, 0F); - Corner4 = new ModelRenderer(this, 0, 30); - Corner4.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner4.setRotationPoint(7F, 8F, 7F); - Corner4.setTextureSize(128, 128); - Corner4.mirror = true; - setRotation(Corner4, 0F, 0F, 0F); - C8 = new ModelRenderer(this, 9, 35); - C8.addBox(-1F, 0F, -1F, 2, 2, 12); - C8.setRotationPoint(6F, 22F, -5F); - C8.setTextureSize(128, 128); - C8.mirror = true; - setRotation(C8, 0F, 0F, 0F); - C7 = new ModelRenderer(this, 9, 35); - C7.addBox(-1F, 0F, -1F, 2, 2, 12); - C7.setRotationPoint(-6F, 8F, -5F); - C7.setTextureSize(128, 128); - C7.mirror = true; - setRotation(C7, 0F, 0F, 0F); - C6 = new ModelRenderer(this, 9, 35); - C6.addBox(-1F, 0F, -1F, 2, 2, 12); - C6.setRotationPoint(6F, 8F, -5F); - C6.setTextureSize(128, 128); - C6.mirror = true; - setRotation(C6, 0F, 0F, 0F); - C5 = new ModelRenderer(this, 9, 30); - C5.addBox(-1F, 0F, -1F, 12, 2, 2); - C5.setRotationPoint(-5F, 8F, 6F); - C5.setTextureSize(128, 128); - C5.mirror = true; - setRotation(C5, 0F, 0F, 0F); - C4 = new ModelRenderer(this, 9, 35); - C4.addBox(-1F, 0F, -1F, 2, 2, 12); - C4.setRotationPoint(-6F, 22F, -5F); - C4.setTextureSize(128, 128); - C4.mirror = true; - setRotation(C4, 0F, 0F, 0F); - C = new ModelRenderer(this, 9, 30); - C.addBox(-1F, 0F, -1F, 12, 2, 2); - C.setRotationPoint(-5F, 22F, 6F); - C.setTextureSize(128, 128); - C.mirror = true; - setRotation(C, 0F, 0F, 0F); - C3 = new ModelRenderer(this, 9, 30); - C3.addBox(-1F, 0F, -1F, 12, 2, 2); - C3.setRotationPoint(-5F, 8F, -6F); - C3.setTextureSize(128, 128); - C3.mirror = true; - setRotation(C3, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 9, 30); - C2.addBox(-1F, 0F, -1F, 12, 2, 2); - C2.setRotationPoint(-5F, 22F, -6F); - C2.setTextureSize(128, 128); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - //G1-------------------------------------- - GuageT = new ModelRenderer(this, 54, 42); - GuageT.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT.setRotationPoint(0F, 12F, -8F); - GuageT.setTextureSize(128, 128); - GuageT.mirror = true; - setRotation(GuageT, 0F, 0F, 0F); - GuageB = new ModelRenderer(this, 54, 42); - GuageB.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB.setRotationPoint(0F, 12F, -8F); - GuageB.setTextureSize(128, 128); - GuageB.mirror = true; - setRotation(GuageB, 0F, 0F, 0F); - Guage = new ModelRenderer(this, 54, 32); - Guage.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage.setRotationPoint(0F, 12F, -7F); - Guage.setTextureSize(128, 128); - Guage.mirror = true; - setRotation(Guage, 0F, 0F, 0F); - GuageR = new ModelRenderer(this, 44, 32); - GuageR.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR.setRotationPoint(0F, 12F, -7F); - GuageR.setTextureSize(128, 128); - GuageR.mirror = true; - setRotation(GuageR, 0F, 0F, 0F); - GuageGlass = new ModelRenderer(this, 60, 32); - GuageGlass.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass.setRotationPoint(0F, 12F, -8F); - GuageGlass.setTextureSize(128, 128); - GuageGlass.mirror = true; - setRotation(GuageGlass, 0F, 0F, 0F); - GuageL = new ModelRenderer(this, 44, 32); - GuageL.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL.setRotationPoint(0F, 12F, -7F); - GuageL.setTextureSize(128, 128); - GuageL.mirror = true; - setRotation(GuageL, 0F, 0F, 0F); - //G2---------------------------------- - GuageT2 = new ModelRenderer(this, 54, 42); - GuageT2.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT2.setRotationPoint(-8F, 12F, 0F); - GuageT2.setTextureSize(128, 128); - GuageT2.mirror = true; - setRotation(GuageT2, 0F, 1.570796F, 0F); - GuageB2 = new ModelRenderer(this, 54, 42); - GuageB2.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB2.setRotationPoint(-8F, 12F, 0F); - GuageB2.setTextureSize(128, 128); - GuageB2.mirror = true; - setRotation(GuageB2, 0F, 1.570796F, 0F); - Guage2 = new ModelRenderer(this, 54, 32); - Guage2.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage2.setRotationPoint(-7F, 12F, 0F); - Guage2.setTextureSize(128, 128); - Guage2.mirror = true; - setRotation(Guage2, 0F, 1.570796F, 0F); - GuageR2 = new ModelRenderer(this, 44, 32); - GuageR2.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR2.setRotationPoint(-7F, 12F, 0F); - GuageR2.setTextureSize(128, 128); - GuageR2.mirror = true; - setRotation(GuageR2, 0F, 1.570796F, 0F); - GuageGlass2 = new ModelRenderer(this, 60, 32); - GuageGlass2.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass2.setRotationPoint(-8F, 12F, 0F); - GuageGlass2.setTextureSize(128, 128); - GuageGlass2.mirror = true; - setRotation(GuageGlass2, 0F, 1.570796F, 0F); - GuageL2 = new ModelRenderer(this, 44, 32); - GuageL2.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL2.setRotationPoint(-7F, 12F, 0F); - GuageL2.setTextureSize(128, 128); - GuageL2.mirror = true; - setRotation(GuageL2, 0F, 1.570796F, 0F); - //G3-------------------------------------- - GuageT3 = new ModelRenderer(this, 54, 42); - GuageT3.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT3.setRotationPoint(0F, 12F, 8F); - GuageT3.setTextureSize(128, 128); - GuageT3.mirror = true; - setRotation(GuageT3, 0F, 3.141593F, 0F); - GuageB3 = new ModelRenderer(this, 54, 42); - GuageB3.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB3.setRotationPoint(0F, 12F, 8F); - GuageB3.setTextureSize(128, 128); - GuageB3.mirror = true; - setRotation(GuageB3, 0F, 3.141593F, 0F); - Guage3 = new ModelRenderer(this, 54, 32); - Guage3.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage3.setRotationPoint(0F, 12F, 7F); - Guage3.setTextureSize(128, 128); - Guage3.mirror = true; - setRotation(Guage3, 0F, 3.141593F, 0F); - GuageR3 = new ModelRenderer(this, 44, 32); - GuageR3.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR3.setRotationPoint(0F, 12F, 7F); - GuageR3.setTextureSize(128, 128); - GuageR3.mirror = true; - setRotation(GuageR3, 0F, 3.141593F, 0F); - GuageGlass3 = new ModelRenderer(this, 60, 32); - GuageGlass3.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass3.setRotationPoint(0F, 12F, 8F); - GuageGlass3.setTextureSize(128, 128); - GuageGlass3.mirror = true; - setRotation(GuageGlass3, 0F, 3.141593F, 0F); - GuageL3 = new ModelRenderer(this, 44, 32); - GuageL3.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL3.setRotationPoint(0F, 12F, 7F); - GuageL3.setTextureSize(128, 128); - GuageL3.mirror = true; - setRotation(GuageL3, 0F, 3.141593F, 0F); - //G4------------------------------- - GuageT4 = new ModelRenderer(this, 54, 42); - GuageT4.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT4.setRotationPoint(8F, 12F, 0F); - GuageT4.setTextureSize(128, 128); - GuageT4.mirror = true; - setRotation(GuageT4, 0F, -1.570796F, 0F); - GuageB4 = new ModelRenderer(this, 54, 42); - GuageB4.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB4.setRotationPoint(8F, 12F, 0F); - GuageB4.setTextureSize(128, 128); - GuageB4.mirror = true; - setRotation(GuageB4, 0F, -1.570796F, 0F); - Guage4 = new ModelRenderer(this, 54, 32); - Guage4.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage4.setRotationPoint(7F, 12F, 0F); - Guage4.setTextureSize(128, 128); - Guage4.mirror = true; - setRotation(Guage4, 0F, -1.570796F, 0F); - GuageR4 = new ModelRenderer(this, 44, 32); - GuageR4.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR4.setRotationPoint(7F, 12F, 0F); - GuageR4.setTextureSize(128, 128); - GuageR4.mirror = true; - setRotation(GuageR4, 0F, -1.570796F, 0F); - GuageGlass4 = new ModelRenderer(this, 60, 32); - GuageGlass4.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass4.setRotationPoint(8F, 12F, 0F); - GuageGlass4.setTextureSize(128, 128); - GuageGlass4.mirror = true; - setRotation(GuageGlass4, 0F, -1.570796F, 0F); - GuageL4 = new ModelRenderer(this, 44, 32); - GuageL4.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL4.setRotationPoint(7F, 12F, 0F); - GuageL4.setTextureSize(128, 128); - GuageL4.mirror = true; - setRotation(GuageL4, 0F, -1.570796F, 0F); - //Pipe Connectors - CCBottom = new ModelRenderer(this, 0, 0); - CCBottom.addBox(-3F, -9F, -3F, 6, 1, 6); - CCBottom.setRotationPoint(0F, 15F, 0F); - CCBottom.setTextureSize(128, 128); - CCBottom.mirror = true; - setRotation(CCBottom, 3.141593F, 0F, 0F); - CCRight = new ModelRenderer(this, 0, 0); - CCRight.addBox(-3F, -8F, -3F, 6, 2, 6); - CCRight.setRotationPoint(0F, 15F, 0F); - CCRight.setTextureSize(128, 128); - CCRight.mirror = true; - setRotation(CCRight, 0F, 0F, -1.570796F); - CCLeft = new ModelRenderer(this, 0, 0); - CCLeft.addBox(-3F, -8F, -3F, 6, 2, 6); - CCLeft.setRotationPoint(0F, 15F, 0F); - CCLeft.setTextureSize(128, 128); - CCLeft.mirror = true; - setRotation(CCLeft, 0F, 0F, 1.570796F); - CCFront = new ModelRenderer(this, 0, 0); - CCFront.addBox(-3F, -8F, -3F, 6, 2, 6); - CCFront.setRotationPoint(0F, 15F, 0F); - CCFront.setTextureSize(128, 128); - CCFront.mirror = true; - setRotation(CCFront, 1.570796F, 0F, 0F); - CCBack = new ModelRenderer(this, 0, 0); - CCBack.addBox(-3F, -8F, -3F, 6, 2, 6); - CCBack.setRotationPoint(0F, 15F, 0F); - CCBack.setTextureSize(128, 128); - CCBack.mirror = true; - setRotation(CCBack, -1.570796F, 0F, 0F); - CCTop = new ModelRenderer(this, 0, 0); - CCTop.addBox(-3F, -7F, -3F, 6, 1, 6); - CCTop.setRotationPoint(0F, 15F, 0F); - CCTop.setTextureSize(128, 128); - CCTop.mirror = true; - setRotation(CCTop, 0F, 0F, 0F); - } - - public void renderMain(TileEntityLTank te ,float f5) - { - //render regardless of sides - Mid.render(f5); - Corner.render(f5); - Corner2.render(f5); - Corner3.render(f5); - Corner4.render(f5); - C8.render(f5); - C7.render(f5); - C6.render(f5); - C5.render(f5); - C4.render(f5); - C.render(f5); - C3.render(f5); - C2.render(f5); - CCTop.render(f5);CCBottom.render(f5); - //Front - if(te.cc[2] instanceof TileEntityPipe) - { - CCFront.render(f5); - }else - { - GuageT.render(f5); - GuageB.render(f5); - Guage.render(f5); - GuageR.render(f5); - GuageGlass.render(f5); - GuageL.render(f5); - } - //back - if(te.cc[3] instanceof TileEntityPipe) - { - CCBack.render(f5); - }else - { - GuageT3.render(f5); - Guage3.render(f5); - Guage3.render(f5); - GuageR3.render(f5); - GuageGlass3.render(f5); - GuageL3.render(f5); - } - //right - if(te.cc[4] instanceof TileEntityPipe) - { - CCRight.render(f5); - }else - { - GuageT4.render(f5); - Guage4.render(f5); - Guage4.render(f5); - GuageR4.render(f5); - GuageGlass4.render(f5); - GuageL4.render(f5); - } - //left - if(te.cc[5] instanceof TileEntityPipe) - { - CCLeft.render(f5); - }else - { - GuageT2.render(f5); - Guage2.render(f5); - Guage2.render(f5); - GuageR2.render(f5); - GuageGlass2.render(f5); - GuageL2.render(f5); - - } - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 10/8/2012 7:31:40 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package basicpipes.renderTank; + +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.TileEntityPipe; +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; + +public class ModelLiquidTank extends ModelBase +{ + //fields + ModelRenderer Mid; + ModelRenderer Corner; + ModelRenderer Corner2; + ModelRenderer Corner3; + ModelRenderer Corner4; + ModelRenderer C8; + ModelRenderer C7; + ModelRenderer C6; + ModelRenderer C5; + ModelRenderer C4; + ModelRenderer C; + ModelRenderer C3; + ModelRenderer C2; + ModelRenderer GuageT; + ModelRenderer GuageB; + ModelRenderer Guage; + ModelRenderer GuageR; + ModelRenderer GuageGlass; + ModelRenderer GuageL; + + ModelRenderer GuageT2; + ModelRenderer GuageB2; + ModelRenderer Guage2; + ModelRenderer GuageR2; + ModelRenderer GuageGlass2; + ModelRenderer GuageL2; + + ModelRenderer GuageT3; + ModelRenderer GuageB3; + ModelRenderer Guage3; + ModelRenderer GuageR3; + ModelRenderer GuageGlass3; + ModelRenderer GuageL3; + + ModelRenderer GuageT4; + ModelRenderer GuageB4; + ModelRenderer Guage4; + ModelRenderer GuageR4; + ModelRenderer GuageGlass4; + ModelRenderer GuageL4; + + ModelRenderer CCBottom; + ModelRenderer CCRight; + ModelRenderer CCLeft; + ModelRenderer CCFront; + ModelRenderer CCBack; + ModelRenderer CCTop; + + public ModelLiquidTank() + { + textureWidth = 128; + textureHeight = 128; + + Mid = new ModelRenderer(this, 0, 50); + Mid.addBox(-6F, 0F, -6F, 12, 14, 12); + Mid.setRotationPoint(0F, 9F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Corner = new ModelRenderer(this, 0, 30); + Corner.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner.setRotationPoint(-7F, 8F, 7F); + Corner.setTextureSize(128, 128); + Corner.mirror = true; + setRotation(Corner, 0F, 0F, 0F); + Corner2 = new ModelRenderer(this, 0, 30); + Corner2.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner2.setRotationPoint(-7F, 8F, -7F); + Corner2.setTextureSize(128, 128); + Corner2.mirror = true; + setRotation(Corner2, 0F, 0F, 0F); + Corner3 = new ModelRenderer(this, 0, 30); + Corner3.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner3.setRotationPoint(7F, 8F, -7F); + Corner3.setTextureSize(128, 128); + Corner3.mirror = true; + setRotation(Corner3, 0F, 0F, 0F); + Corner4 = new ModelRenderer(this, 0, 30); + Corner4.addBox(-1F, 0F, -1F, 2, 16, 2); + Corner4.setRotationPoint(7F, 8F, 7F); + Corner4.setTextureSize(128, 128); + Corner4.mirror = true; + setRotation(Corner4, 0F, 0F, 0F); + C8 = new ModelRenderer(this, 9, 35); + C8.addBox(-1F, 0F, -1F, 2, 2, 12); + C8.setRotationPoint(6F, 22F, -5F); + C8.setTextureSize(128, 128); + C8.mirror = true; + setRotation(C8, 0F, 0F, 0F); + C7 = new ModelRenderer(this, 9, 35); + C7.addBox(-1F, 0F, -1F, 2, 2, 12); + C7.setRotationPoint(-6F, 8F, -5F); + C7.setTextureSize(128, 128); + C7.mirror = true; + setRotation(C7, 0F, 0F, 0F); + C6 = new ModelRenderer(this, 9, 35); + C6.addBox(-1F, 0F, -1F, 2, 2, 12); + C6.setRotationPoint(6F, 8F, -5F); + C6.setTextureSize(128, 128); + C6.mirror = true; + setRotation(C6, 0F, 0F, 0F); + C5 = new ModelRenderer(this, 9, 30); + C5.addBox(-1F, 0F, -1F, 12, 2, 2); + C5.setRotationPoint(-5F, 8F, 6F); + C5.setTextureSize(128, 128); + C5.mirror = true; + setRotation(C5, 0F, 0F, 0F); + C4 = new ModelRenderer(this, 9, 35); + C4.addBox(-1F, 0F, -1F, 2, 2, 12); + C4.setRotationPoint(-6F, 22F, -5F); + C4.setTextureSize(128, 128); + C4.mirror = true; + setRotation(C4, 0F, 0F, 0F); + C = new ModelRenderer(this, 9, 30); + C.addBox(-1F, 0F, -1F, 12, 2, 2); + C.setRotationPoint(-5F, 22F, 6F); + C.setTextureSize(128, 128); + C.mirror = true; + setRotation(C, 0F, 0F, 0F); + C3 = new ModelRenderer(this, 9, 30); + C3.addBox(-1F, 0F, -1F, 12, 2, 2); + C3.setRotationPoint(-5F, 8F, -6F); + C3.setTextureSize(128, 128); + C3.mirror = true; + setRotation(C3, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 9, 30); + C2.addBox(-1F, 0F, -1F, 12, 2, 2); + C2.setRotationPoint(-5F, 22F, -6F); + C2.setTextureSize(128, 128); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + //G1-------------------------------------- + GuageT = new ModelRenderer(this, 54, 42); + GuageT.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT.setRotationPoint(0F, 12F, -8F); + GuageT.setTextureSize(128, 128); + GuageT.mirror = true; + setRotation(GuageT, 0F, 0F, 0F); + GuageB = new ModelRenderer(this, 54, 42); + GuageB.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB.setRotationPoint(0F, 12F, -8F); + GuageB.setTextureSize(128, 128); + GuageB.mirror = true; + setRotation(GuageB, 0F, 0F, 0F); + Guage = new ModelRenderer(this, 54, 32); + Guage.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage.setRotationPoint(0F, 12F, -7F); + Guage.setTextureSize(128, 128); + Guage.mirror = true; + setRotation(Guage, 0F, 0F, 0F); + GuageR = new ModelRenderer(this, 44, 32); + GuageR.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR.setRotationPoint(0F, 12F, -7F); + GuageR.setTextureSize(128, 128); + GuageR.mirror = true; + setRotation(GuageR, 0F, 0F, 0F); + GuageGlass = new ModelRenderer(this, 60, 32); + GuageGlass.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass.setRotationPoint(0F, 12F, -8F); + GuageGlass.setTextureSize(128, 128); + GuageGlass.mirror = true; + setRotation(GuageGlass, 0F, 0F, 0F); + GuageL = new ModelRenderer(this, 44, 32); + GuageL.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL.setRotationPoint(0F, 12F, -7F); + GuageL.setTextureSize(128, 128); + GuageL.mirror = true; + setRotation(GuageL, 0F, 0F, 0F); + //G2---------------------------------- + GuageT2 = new ModelRenderer(this, 54, 42); + GuageT2.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT2.setRotationPoint(-8F, 12F, 0F); + GuageT2.setTextureSize(128, 128); + GuageT2.mirror = true; + setRotation(GuageT2, 0F, 1.570796F, 0F); + GuageB2 = new ModelRenderer(this, 54, 42); + GuageB2.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB2.setRotationPoint(-8F, 12F, 0F); + GuageB2.setTextureSize(128, 128); + GuageB2.mirror = true; + setRotation(GuageB2, 0F, 1.570796F, 0F); + Guage2 = new ModelRenderer(this, 54, 32); + Guage2.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage2.setRotationPoint(-7F, 12F, 0F); + Guage2.setTextureSize(128, 128); + Guage2.mirror = true; + setRotation(Guage2, 0F, 1.570796F, 0F); + GuageR2 = new ModelRenderer(this, 44, 32); + GuageR2.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR2.setRotationPoint(-7F, 12F, 0F); + GuageR2.setTextureSize(128, 128); + GuageR2.mirror = true; + setRotation(GuageR2, 0F, 1.570796F, 0F); + GuageGlass2 = new ModelRenderer(this, 60, 32); + GuageGlass2.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass2.setRotationPoint(-8F, 12F, 0F); + GuageGlass2.setTextureSize(128, 128); + GuageGlass2.mirror = true; + setRotation(GuageGlass2, 0F, 1.570796F, 0F); + GuageL2 = new ModelRenderer(this, 44, 32); + GuageL2.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL2.setRotationPoint(-7F, 12F, 0F); + GuageL2.setTextureSize(128, 128); + GuageL2.mirror = true; + setRotation(GuageL2, 0F, 1.570796F, 0F); + //G3-------------------------------------- + GuageT3 = new ModelRenderer(this, 54, 42); + GuageT3.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT3.setRotationPoint(0F, 12F, 8F); + GuageT3.setTextureSize(128, 128); + GuageT3.mirror = true; + setRotation(GuageT3, 0F, 3.141593F, 0F); + GuageB3 = new ModelRenderer(this, 54, 42); + GuageB3.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB3.setRotationPoint(0F, 12F, 8F); + GuageB3.setTextureSize(128, 128); + GuageB3.mirror = true; + setRotation(GuageB3, 0F, 3.141593F, 0F); + Guage3 = new ModelRenderer(this, 54, 32); + Guage3.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage3.setRotationPoint(0F, 12F, 7F); + Guage3.setTextureSize(128, 128); + Guage3.mirror = true; + setRotation(Guage3, 0F, 3.141593F, 0F); + GuageR3 = new ModelRenderer(this, 44, 32); + GuageR3.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR3.setRotationPoint(0F, 12F, 7F); + GuageR3.setTextureSize(128, 128); + GuageR3.mirror = true; + setRotation(GuageR3, 0F, 3.141593F, 0F); + GuageGlass3 = new ModelRenderer(this, 60, 32); + GuageGlass3.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass3.setRotationPoint(0F, 12F, 8F); + GuageGlass3.setTextureSize(128, 128); + GuageGlass3.mirror = true; + setRotation(GuageGlass3, 0F, 3.141593F, 0F); + GuageL3 = new ModelRenderer(this, 44, 32); + GuageL3.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL3.setRotationPoint(0F, 12F, 7F); + GuageL3.setTextureSize(128, 128); + GuageL3.mirror = true; + setRotation(GuageL3, 0F, 3.141593F, 0F); + //G4------------------------------- + GuageT4 = new ModelRenderer(this, 54, 42); + GuageT4.addBox(-1F, -1F, 0F, 2, 1, 2); + GuageT4.setRotationPoint(8F, 12F, 0F); + GuageT4.setTextureSize(128, 128); + GuageT4.mirror = true; + setRotation(GuageT4, 0F, -1.570796F, 0F); + GuageB4 = new ModelRenderer(this, 54, 42); + GuageB4.addBox(-1F, 8F, 0F, 2, 1, 2); + GuageB4.setRotationPoint(8F, 12F, 0F); + GuageB4.setTextureSize(128, 128); + GuageB4.mirror = true; + setRotation(GuageB4, 0F, -1.570796F, 0F); + Guage4 = new ModelRenderer(this, 54, 32); + Guage4.addBox(-1F, 0F, 0F, 2, 8, 1); + Guage4.setRotationPoint(7F, 12F, 0F); + Guage4.setTextureSize(128, 128); + Guage4.mirror = true; + setRotation(Guage4, 0F, -1.570796F, 0F); + GuageR4 = new ModelRenderer(this, 44, 32); + GuageR4.addBox(1F, -1F, -1F, 2, 10, 2); + GuageR4.setRotationPoint(7F, 12F, 0F); + GuageR4.setTextureSize(128, 128); + GuageR4.mirror = true; + setRotation(GuageR4, 0F, -1.570796F, 0F); + GuageGlass4 = new ModelRenderer(this, 60, 32); + GuageGlass4.addBox(-1F, 0F, 0F, 2, 8, 1); + GuageGlass4.setRotationPoint(8F, 12F, 0F); + GuageGlass4.setTextureSize(128, 128); + GuageGlass4.mirror = true; + setRotation(GuageGlass4, 0F, -1.570796F, 0F); + GuageL4 = new ModelRenderer(this, 44, 32); + GuageL4.addBox(-3F, -1F, -1F, 2, 10, 2); + GuageL4.setRotationPoint(7F, 12F, 0F); + GuageL4.setTextureSize(128, 128); + GuageL4.mirror = true; + setRotation(GuageL4, 0F, -1.570796F, 0F); + //Pipe Connectors + CCBottom = new ModelRenderer(this, 0, 0); + CCBottom.addBox(-3F, -9F, -3F, 6, 1, 6); + CCBottom.setRotationPoint(0F, 15F, 0F); + CCBottom.setTextureSize(128, 128); + CCBottom.mirror = true; + setRotation(CCBottom, 3.141593F, 0F, 0F); + CCRight = new ModelRenderer(this, 0, 0); + CCRight.addBox(-3F, -8F, -3F, 6, 2, 6); + CCRight.setRotationPoint(0F, 15F, 0F); + CCRight.setTextureSize(128, 128); + CCRight.mirror = true; + setRotation(CCRight, 0F, 0F, -1.570796F); + CCLeft = new ModelRenderer(this, 0, 0); + CCLeft.addBox(-3F, -8F, -3F, 6, 2, 6); + CCLeft.setRotationPoint(0F, 15F, 0F); + CCLeft.setTextureSize(128, 128); + CCLeft.mirror = true; + setRotation(CCLeft, 0F, 0F, 1.570796F); + CCFront = new ModelRenderer(this, 0, 0); + CCFront.addBox(-3F, -8F, -3F, 6, 2, 6); + CCFront.setRotationPoint(0F, 15F, 0F); + CCFront.setTextureSize(128, 128); + CCFront.mirror = true; + setRotation(CCFront, 1.570796F, 0F, 0F); + CCBack = new ModelRenderer(this, 0, 0); + CCBack.addBox(-3F, -8F, -3F, 6, 2, 6); + CCBack.setRotationPoint(0F, 15F, 0F); + CCBack.setTextureSize(128, 128); + CCBack.mirror = true; + setRotation(CCBack, -1.570796F, 0F, 0F); + CCTop = new ModelRenderer(this, 0, 0); + CCTop.addBox(-3F, -7F, -3F, 6, 1, 6); + CCTop.setRotationPoint(0F, 15F, 0F); + CCTop.setTextureSize(128, 128); + CCTop.mirror = true; + setRotation(CCTop, 0F, 0F, 0F); + } + + public void renderMain(TileEntityLTank te ,float f5) + { + //render regardless of sides + Mid.render(f5); + Corner.render(f5); + Corner2.render(f5); + Corner3.render(f5); + Corner4.render(f5); + C8.render(f5); + C7.render(f5); + C6.render(f5); + C5.render(f5); + C4.render(f5); + C.render(f5); + C3.render(f5); + C2.render(f5); + CCTop.render(f5);CCBottom.render(f5); + //Front + if(te.cc[2] instanceof TileEntityPipe) + { + CCFront.render(f5); + }else + { + GuageT.render(f5); + GuageB.render(f5); + Guage.render(f5); + GuageR.render(f5); + GuageGlass.render(f5); + GuageL.render(f5); + } + //back + if(te.cc[3] instanceof TileEntityPipe) + { + CCBack.render(f5); + }else + { + GuageT3.render(f5); + Guage3.render(f5); + Guage3.render(f5); + GuageR3.render(f5); + GuageGlass3.render(f5); + GuageL3.render(f5); + } + //right + if(te.cc[4] instanceof TileEntityPipe) + { + CCRight.render(f5); + }else + { + GuageT4.render(f5); + Guage4.render(f5); + Guage4.render(f5); + GuageR4.render(f5); + GuageGlass4.render(f5); + GuageL4.render(f5); + } + //left + if(te.cc[5] instanceof TileEntityPipe) + { + CCLeft.render(f5); + }else + { + GuageT2.render(f5); + Guage2.render(f5); + Guage2.render(f5); + GuageR2.render(f5); + GuageGlass2.render(f5); + GuageL2.render(f5); + + } + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java similarity index 96% rename from src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java rename to 1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java index b666d216..83587214 100644 --- a/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java +++ b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java @@ -1,133 +1,133 @@ -package basicpipes.renderTank; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelLiquidTankCorner extends ModelBase -{ - //fields - ModelRenderer sOne; - ModelRenderer sTwo; - ModelRenderer d7; - ModelRenderer d5; - ModelRenderer d3; - ModelRenderer d4; - ModelRenderer d1; - ModelRenderer d6; - ModelRenderer d2; - ModelRenderer d8; - ModelRenderer d9; - ModelRenderer d10; - ModelRenderer face; - - public ModelLiquidTankCorner() - { - textureWidth = 128; - textureHeight = 128; - - sOne = new ModelRenderer(this, 0, 30); - sOne.addBox(-1F, 0F, -1F, 2, 16, 2); - sOne.setRotationPoint(-7F, 8F, 7F); - sOne.setTextureSize(128, 128); - sOne.mirror = true; - setRotation(sOne, 0F, 0F, 0F); - sTwo = new ModelRenderer(this, 0, 30); - sTwo.addBox(-1F, 0F, -1F, 2, 16, 2); - sTwo.setRotationPoint(-7F, 8F, -7F); - sTwo.setTextureSize(128, 128); - sTwo.mirror = true; - setRotation(sTwo, 0F, 0F, 0F); - d7 = new ModelRenderer(this, 43, 2); - d7.addBox(-1F, 0F, -1F, 2, 16, 12); - d7.setRotationPoint(-7F, 8F, -5F); - d7.setTextureSize(128, 128); - d7.mirror = true; - setRotation(d7, 0F, 0F, 0F); - d5 = new ModelRenderer(this, 9, 12); - d5.addBox(-1F, 0F, -1F, 14, 16, 2); - d5.setRotationPoint(-5F, 8F, 7F); - d5.setTextureSize(128, 128); - d5.mirror = true; - setRotation(d5, 0F, 0F, 0F); - d3 = new ModelRenderer(this, 9, 67); - d3.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); - d3.setRotationPoint(-6F, 22F, -6F); - d3.setTextureSize(128, 128); - d3.mirror = true; - setRotation(d3, 0F, -0.7853982F, 0F); - d4 = new ModelRenderer(this, 9, 88); - d4.addBox(0F, 0F, -9F, 5, 2, 4); - d4.setRotationPoint(-6F, 22F, 6F); - d4.setTextureSize(128, 128); - d4.mirror = true; - setRotation(d4, 0F, 0F, 0F); - d1 = new ModelRenderer(this, 9, 67); - d1.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); - d1.setRotationPoint(-6F, 8F, -6F); - d1.setTextureSize(128, 128); - d1.mirror = true; - setRotation(d1, 0F, -0.7853982F, 0F); - d6 = new ModelRenderer(this, 9, 75); - d6.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); - d6.setRotationPoint(-6F, 22F, -4F); - d6.setTextureSize(128, 128); - d6.mirror = true; - setRotation(d6, 0F, -0.7853982F, 0F); - d2 = new ModelRenderer(this, 9, 80); - d2.addBox(0F, 0F, -5F, 9, 2, 5); - d2.setRotationPoint(-6F, 22F, 6F); - d2.setTextureSize(128, 128); - d2.mirror = true; - setRotation(d2, 0F, 0F, 0F); - d8 = new ModelRenderer(this, 9, 75); - d8.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); - d8.setRotationPoint(-6F, 8F, -4F); - d8.setTextureSize(128, 128); - d8.mirror = true; - setRotation(d8, 0F, -0.7853982F, 0F); - d9 = new ModelRenderer(this, 9, 88); - d9.addBox(0F, 0F, -9F, 5, 2, 4); - d9.setRotationPoint(-6F, 8F, 6F); - d9.setTextureSize(128, 128); - d9.mirror = true; - setRotation(d9, 0F, 0F, 0F); - d10 = new ModelRenderer(this, 9, 80); - d10.addBox(0F, 0F, -5F, 9, 2, 5); - d10.setRotationPoint(-6F, 8F, 6F); - d10.setTextureSize(128, 128); - d10.mirror = true; - setRotation(d10, 0F, 0F, 0F); - face = new ModelRenderer(this, 0, 50); - face.addBox(-8.5F, 0F, 0F, 17, 14, 2); - face.setRotationPoint(0F, 9F, 0F); - face.setTextureSize(128, 128); - face.mirror = true; - setRotation(face, 0F, -0.7853982F, 0F); - } - - public void render(float f5) - { - sOne.render(f5); - sTwo.render(f5); - d7.render(f5); - d5.render(f5); - d3.render(f5); - d4.render(f5); - d1.render(f5); - d6.render(f5); - d2.render(f5); - d8.render(f5); - d9.render(f5); - d10.render(f5); - face.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +package basicpipes.renderTank; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelLiquidTankCorner extends ModelBase +{ + //fields + ModelRenderer sOne; + ModelRenderer sTwo; + ModelRenderer d7; + ModelRenderer d5; + ModelRenderer d3; + ModelRenderer d4; + ModelRenderer d1; + ModelRenderer d6; + ModelRenderer d2; + ModelRenderer d8; + ModelRenderer d9; + ModelRenderer d10; + ModelRenderer face; + + public ModelLiquidTankCorner() + { + textureWidth = 128; + textureHeight = 128; + + sOne = new ModelRenderer(this, 0, 30); + sOne.addBox(-1F, 0F, -1F, 2, 16, 2); + sOne.setRotationPoint(-7F, 8F, 7F); + sOne.setTextureSize(128, 128); + sOne.mirror = true; + setRotation(sOne, 0F, 0F, 0F); + sTwo = new ModelRenderer(this, 0, 30); + sTwo.addBox(-1F, 0F, -1F, 2, 16, 2); + sTwo.setRotationPoint(-7F, 8F, -7F); + sTwo.setTextureSize(128, 128); + sTwo.mirror = true; + setRotation(sTwo, 0F, 0F, 0F); + d7 = new ModelRenderer(this, 43, 2); + d7.addBox(-1F, 0F, -1F, 2, 16, 12); + d7.setRotationPoint(-7F, 8F, -5F); + d7.setTextureSize(128, 128); + d7.mirror = true; + setRotation(d7, 0F, 0F, 0F); + d5 = new ModelRenderer(this, 9, 12); + d5.addBox(-1F, 0F, -1F, 14, 16, 2); + d5.setRotationPoint(-5F, 8F, 7F); + d5.setTextureSize(128, 128); + d5.mirror = true; + setRotation(d5, 0F, 0F, 0F); + d3 = new ModelRenderer(this, 9, 67); + d3.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); + d3.setRotationPoint(-6F, 22F, -6F); + d3.setTextureSize(128, 128); + d3.mirror = true; + setRotation(d3, 0F, -0.7853982F, 0F); + d4 = new ModelRenderer(this, 9, 88); + d4.addBox(0F, 0F, -9F, 5, 2, 4); + d4.setRotationPoint(-6F, 22F, 6F); + d4.setTextureSize(128, 128); + d4.mirror = true; + setRotation(d4, 0F, 0F, 0F); + d1 = new ModelRenderer(this, 9, 67); + d1.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); + d1.setRotationPoint(-6F, 8F, -6F); + d1.setTextureSize(128, 128); + d1.mirror = true; + setRotation(d1, 0F, -0.7853982F, 0F); + d6 = new ModelRenderer(this, 9, 75); + d6.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); + d6.setRotationPoint(-6F, 22F, -4F); + d6.setTextureSize(128, 128); + d6.mirror = true; + setRotation(d6, 0F, -0.7853982F, 0F); + d2 = new ModelRenderer(this, 9, 80); + d2.addBox(0F, 0F, -5F, 9, 2, 5); + d2.setRotationPoint(-6F, 22F, 6F); + d2.setTextureSize(128, 128); + d2.mirror = true; + setRotation(d2, 0F, 0F, 0F); + d8 = new ModelRenderer(this, 9, 75); + d8.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); + d8.setRotationPoint(-6F, 8F, -4F); + d8.setTextureSize(128, 128); + d8.mirror = true; + setRotation(d8, 0F, -0.7853982F, 0F); + d9 = new ModelRenderer(this, 9, 88); + d9.addBox(0F, 0F, -9F, 5, 2, 4); + d9.setRotationPoint(-6F, 8F, 6F); + d9.setTextureSize(128, 128); + d9.mirror = true; + setRotation(d9, 0F, 0F, 0F); + d10 = new ModelRenderer(this, 9, 80); + d10.addBox(0F, 0F, -5F, 9, 2, 5); + d10.setRotationPoint(-6F, 8F, 6F); + d10.setTextureSize(128, 128); + d10.mirror = true; + setRotation(d10, 0F, 0F, 0F); + face = new ModelRenderer(this, 0, 50); + face.addBox(-8.5F, 0F, 0F, 17, 14, 2); + face.setRotationPoint(0F, 9F, 0F); + face.setTextureSize(128, 128); + face.mirror = true; + setRotation(face, 0F, -0.7853982F, 0F); + } + + public void render(float f5) + { + sOne.render(f5); + sTwo.render(f5); + d7.render(f5); + d5.render(f5); + d3.render(f5); + d4.render(f5); + d1.render(f5); + d6.render(f5); + d2.render(f5); + d8.render(f5); + d9.render(f5); + d10.render(f5); + face.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/basicpipes/renderTank/RenderLTank.java b/1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java similarity index 96% rename from src/minecraft/basicpipes/renderTank/RenderLTank.java rename to 1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java index 44500397..10d87ef8 100644 --- a/src/minecraft/basicpipes/renderTank/RenderLTank.java +++ b/1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java @@ -1,71 +1,71 @@ -package basicpipes.renderTank; - -import net.minecraft.src.ModelBase; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.SteamPowerMain; - -import basicpipes.BasicPipesMain; -import basicpipes.ModelLargePipe; -import basicpipes.ModelPipe; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - - -public class RenderLTank extends TileEntitySpecialRenderer -{ - private Liquid type = Liquid.DEFUALT; - private ModelLiquidTank model; - private ModelLiquidTankCorner modelC; - private int pos = 0; - - public RenderLTank() - { - model = new ModelLiquidTank(); - modelC = new ModelLiquidTankCorner(); - } - - public void renderAModelAt(TileEntityLTank te, double d, double d1, double d2, float f) - { - type = te.getType(); - pos = Math.min(te.getStoredLiquid(type),4); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - if(MHelper.corner(te) > 0) - { - bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTankCorner.png"); - int corner = MHelper.corner(te); - switch(corner) - { - case 2: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 1: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - modelC.render(0.0625F); - } - else - { - switch(type.ordinal()) - { - //case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTank"+pos+".png"); break; - } - model.renderMain(te, 0.0625F); - } - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityLTank)tileEntity, var2, var4, var6, var8); - } - +package basicpipes.renderTank; + +import net.minecraft.src.ModelBase; +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.SteamPowerMain; + +import basicpipes.BasicPipesMain; +import basicpipes.ModelLargePipe; +import basicpipes.ModelPipe; +import basicpipes.LTanks.TileEntityLTank; +import basicpipes.conductors.TileEntityPipe; +import basicpipes.pipes.api.Liquid; +import basicpipes.pipes.api.MHelper; + + +public class RenderLTank extends TileEntitySpecialRenderer +{ + private Liquid type = Liquid.DEFUALT; + private ModelLiquidTank model; + private ModelLiquidTankCorner modelC; + private int pos = 0; + + public RenderLTank() + { + model = new ModelLiquidTank(); + modelC = new ModelLiquidTankCorner(); + } + + public void renderAModelAt(TileEntityLTank te, double d, double d1, double d2, float f) + { + type = te.getType(); + pos = Math.min(te.getStoredLiquid(type),4); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + if(MHelper.corner(te) > 0) + { + bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTankCorner.png"); + int corner = MHelper.corner(te); + switch(corner) + { + case 2: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 1: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + modelC.render(0.0625F); + } + else + { + switch(type.ordinal()) + { + //case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; + default:bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTank"+pos+".png"); break; + } + model.renderMain(te, 0.0625F); + } + GL11.glPopMatrix(); + + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { + this.renderAModelAt((TileEntityLTank)tileEntity, var2, var4, var6, var8); + } + } \ No newline at end of file diff --git a/src/minecraft/mcp.png b/1.4.2/src/minecraft/mcp.png similarity index 100% rename from src/minecraft/mcp.png rename to 1.4.2/src/minecraft/mcp.png diff --git a/src/minecraft/steampower/GUIFireBox.java b/1.4.2/src/minecraft/steampower/GUIFireBox.java similarity index 96% rename from src/minecraft/steampower/GUIFireBox.java rename to 1.4.2/src/minecraft/steampower/GUIFireBox.java index 71b1253e..8abc60a6 100644 --- a/src/minecraft/steampower/GUIFireBox.java +++ b/1.4.2/src/minecraft/steampower/GUIFireBox.java @@ -1,92 +1,92 @@ -package steampower; - -import java.text.DecimalFormat; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import steampower.burner.ContainerFireBox; -import steampower.burner.TileEntityFireBox; - -public class GUIFireBox extends GuiContainer -{ - private TileEntityFireBox tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("FireBox", 55, 6, 4210752); - this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); - String displayText = ""; - if(!tileEntity.isConnected) - { - displayText = "No Boiler"; - } - else if(tileEntity.storedItems[0] != null) - { - if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) - { - displayText = "No Fuel"; - } - else{ - if(tileEntity.generateRate*20 < 20) - { - displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = getWattDisplay((tileEntity.generateRate*20)); - } - } - } - this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" KJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} +package steampower; + +import java.text.DecimalFormat; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.burner.ContainerFireBox; +import steampower.burner.TileEntityFireBox; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if(!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if(tileEntity.storedItems[0] != null) + { + if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Fuel"; + } + else{ + if(tileEntity.generateRate*20 < 20) + { + displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate*20)); + } + } + } + this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" KJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/minecraft/steampower/GUISteamPiston.java b/1.4.2/src/minecraft/steampower/GUISteamPiston.java similarity index 97% rename from src/minecraft/steampower/GUISteamPiston.java rename to 1.4.2/src/minecraft/steampower/GUISteamPiston.java index 1fda55ad..61bb8bb8 100644 --- a/src/minecraft/steampower/GUISteamPiston.java +++ b/1.4.2/src/minecraft/steampower/GUISteamPiston.java @@ -1,79 +1,79 @@ -package steampower; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import steampower.turbine.TileEntitySteamPiston; -import universalelectricity.electricity.ElectricInfo; -import universalelectricity.electricity.ElectricInfo.ElectricUnit; - - public class GUISteamPiston extends GuiContainer - { - private TileEntitySteamPiston tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUISteamPiston(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) - { - super(new ContainerFake(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Steam Piston Guage Read outs", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - /** - if(tileEntity.connectedElectricUnit == null) - { - displayText = "Not Connected"; - } - else*/ - if(!tileEntity.running) - { - if(tileEntity.steam> 0) - { - displayText = "No Load"; - } - if(tileEntity.steam<= 0) - { - displayText = "No Steam"; - } - } - else - { - //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); - displayText = "ForceOut: "+tileEntity.force+"N"; - displayText2 = "water" + "-" + tileEntity.water; - displayText3 = "steam" + "-" + tileEntity.steam; - } - - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } +package steampower; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.turbine.TileEntitySteamPiston; +import universalelectricity.electricity.ElectricInfo; +import universalelectricity.electricity.ElectricInfo.ElectricUnit; + + public class GUISteamPiston extends GuiContainer + { + private TileEntitySteamPiston tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUISteamPiston(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) + { + super(new ContainerFake(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Steam Piston Guage Read outs", 55, 6, 4210752); + this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); + String displayText = ""; + String displayText2 = ""; + String displayText3 = ""; + /** + if(tileEntity.connectedElectricUnit == null) + { + displayText = "Not Connected"; + } + else*/ + if(!tileEntity.running) + { + if(tileEntity.steam> 0) + { + displayText = "No Load"; + } + if(tileEntity.steam<= 0) + { + displayText = "No Steam"; + } + } + else + { + //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); + displayText = "ForceOut: "+tileEntity.force+"N"; + displayText2 = "water" + "-" + tileEntity.water; + displayText3 = "steam" + "-" + tileEntity.steam; + } + + 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + } diff --git a/src/minecraft/steampower/GuiBoiler.java b/1.4.2/src/minecraft/steampower/GuiBoiler.java similarity index 97% rename from src/minecraft/steampower/GuiBoiler.java rename to 1.4.2/src/minecraft/steampower/GuiBoiler.java index 1a5a3a6d..c6038f9f 100644 --- a/src/minecraft/steampower/GuiBoiler.java +++ b/1.4.2/src/minecraft/steampower/GuiBoiler.java @@ -1,94 +1,94 @@ -package steampower; -import java.text.DecimalFormat; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import steampower.boiler.TileEntityBoiler; -import basicpipes.pipes.api.Liquid; - -public class GuiBoiler extends GuiContainer -{ - private TileEntityBoiler boilerInventory; - - public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) - { - super(new ContainerFake(par1InventoryPlayer, par2TileEntityGrinder)); - this.boilerInventory = par2TileEntityGrinder; - } - - /** - * Draw the foreground layer for the GuiContainer (everythin in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Boiler", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); - if(boilerInventory.hullHeat >=10000) - { - //this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); - } - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - int var5 = (this.width - this.xSize) / 2; - int var6 = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); - int var7; - int var8; - int var9; - int var10; - if (this.boilerInventory.getStoredLiquid(Liquid.WATER)> 0) - { - var7 = boilerInventory.getStoredLiquid(Liquid.WATER)*4 + 1; - this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); - } - if (this.boilerInventory.getStoredLiquid(Liquid.STEAM) > 0) - { - var8 = boilerInventory.getStoredLiquid(Liquid.STEAM)/14*4 + 1; - this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); - } - - float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); - var9 = (int) Math.min(precentH*3.0F,30); - this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); - float precentSH = this.boilerInventory.heat/1000; - var10 = (int) Math.round(precentSH*5.33); - this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); - //debug - this.fontRenderer.drawString("NonGraphic Debug", (int)(200), 90, 000000); - this.fontRenderer.drawString("Water:"+this.boilerInventory.water+"/14", (int)(200), 100, 000000); - this.fontRenderer.drawString("Steam:"+this.boilerInventory.steam+"/140", (int)(200), 110, 000000); - - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" kJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} +package steampower; +import java.text.DecimalFormat; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import steampower.boiler.TileEntityBoiler; +import basicpipes.pipes.api.Liquid; + +public class GuiBoiler extends GuiContainer +{ + private TileEntityBoiler boilerInventory; + + public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) + { + super(new ContainerFake(par1InventoryPlayer, par2TileEntityGrinder)); + this.boilerInventory = par2TileEntityGrinder; + } + + /** + * Draw the foreground layer for the GuiContainer (everythin in front of the items) + */ + protected void drawGuiContainerForegroundLayer() + { + this.fontRenderer.drawString("Boiler", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + if(boilerInventory.hullHeat >=10000) + { + //this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); + } + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); + int var7; + int var8; + int var9; + int var10; + if (this.boilerInventory.getStoredLiquid(Liquid.WATER)> 0) + { + var7 = boilerInventory.getStoredLiquid(Liquid.WATER)*4 + 1; + this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); + } + if (this.boilerInventory.getStoredLiquid(Liquid.STEAM) > 0) + { + var8 = boilerInventory.getStoredLiquid(Liquid.STEAM)/14*4 + 1; + this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); + } + + float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); + var9 = (int) Math.min(precentH*3.0F,30); + this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); + float precentSH = this.boilerInventory.heat/1000; + var10 = (int) Math.round(precentSH*5.33); + this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); + //debug + this.fontRenderer.drawString("NonGraphic Debug", (int)(200), 90, 000000); + this.fontRenderer.drawString("Water:"+this.boilerInventory.water+"/14", (int)(200), 100, 000000); + this.fontRenderer.drawString("Steam:"+this.boilerInventory.steam+"/140", (int)(200), 110, 000000); + + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" kJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/minecraft/steampower/ItemRenderHelperS.java b/1.4.2/src/minecraft/steampower/ItemRenderHelperS.java similarity index 97% rename from src/minecraft/steampower/ItemRenderHelperS.java rename to 1.4.2/src/minecraft/steampower/ItemRenderHelperS.java index 11041fbf..247aa927 100644 --- a/src/minecraft/steampower/ItemRenderHelperS.java +++ b/1.4.2/src/minecraft/steampower/ItemRenderHelperS.java @@ -1,62 +1,62 @@ -package steampower; - -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.RenderBlocks; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -//ItemRenderHelperS.renderID -public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { - public static ItemRenderHelperS instance = new ItemRenderHelperS(); - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - private ModelGenerator modelGen = new ModelGenerator(); - private ModelTank modelTank = new ModelTank(0f); - private ModelFurnace modelFurnace = new ModelFurnace(); - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == SteamPowerMain.genID) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.3F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Generator.png")); - modelGen.RenderMain(0.0725F); - GL11.glPopMatrix(); - } - if(block.blockID == SteamPowerMain.machine.blockID && metadata == 1) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); - modelTank.generalRender(0.0625F); - GL11.glPopMatrix(); - } - if(block.blockID == SteamPowerMain.machine.blockID && metadata > 1 && metadata < 6) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); - modelFurnace.genRender(0.0625F); - GL11.glPopMatrix(); - } - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - return false; - } - - public boolean shouldRender3DInInventory() { - - return true; - } - - public int getRenderId() - { - return renderID; - } -} +package steampower; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.RenderBlocks; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +//ItemRenderHelperS.renderID +public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { + public static ItemRenderHelperS instance = new ItemRenderHelperS(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelGenerator modelGen = new ModelGenerator(); + private ModelTank modelTank = new ModelTank(0f); + private ModelFurnace modelFurnace = new ModelFurnace(); + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + if(block.blockID == SteamPowerMain.genID) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1.3F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Generator.png")); + modelGen.RenderMain(0.0725F); + GL11.glPopMatrix(); + } + if(block.blockID == SteamPowerMain.machine.blockID && metadata == 1) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); + modelTank.generalRender(0.0625F); + GL11.glPopMatrix(); + } + if(block.blockID == SteamPowerMain.machine.blockID && metadata > 1 && metadata < 6) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); + modelFurnace.genRender(0.0625F); + GL11.glPopMatrix(); + } + } + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + public boolean shouldRender3DInInventory() { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/minecraft/steampower/ModelCenterTank.java b/1.4.2/src/minecraft/steampower/ModelCenterTank.java similarity index 95% rename from src/minecraft/steampower/ModelCenterTank.java rename to 1.4.2/src/minecraft/steampower/ModelCenterTank.java index 370aa183..c8bc81cd 100644 --- a/src/minecraft/steampower/ModelCenterTank.java +++ b/1.4.2/src/minecraft/steampower/ModelCenterTank.java @@ -1,53 +1,53 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCenterTank extends ModelBase -{ - - ModelRenderer Block; - - public ModelCenterTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //block - Block = new ModelRenderer(this, 0, 0); - Block.addBox(0F, 0F, 0F, 16, 16, 16); - Block.setRotationPoint(-8F, 8F, -8F); - Block.setTextureSize(128, 32); - Block.mirror = true; - setRotation(Block, 0F, 0F, 0F); - } - public void renderBlock(float f5) - { - Block.render(f5); - } - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCenterTank extends ModelBase +{ + + ModelRenderer Block; + + public ModelCenterTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //block + Block = new ModelRenderer(this, 0, 0); + Block.addBox(0F, 0F, 0F, 16, 16, 16); + Block.setRotationPoint(-8F, 8F, -8F); + Block.setTextureSize(128, 32); + Block.mirror = true; + setRotation(Block, 0F, 0F, 0F); + } + public void renderBlock(float f5) + { + Block.render(f5); + } + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/minecraft/steampower/ModelCornerTank.java b/1.4.2/src/minecraft/steampower/ModelCornerTank.java similarity index 96% rename from src/minecraft/steampower/ModelCornerTank.java rename to 1.4.2/src/minecraft/steampower/ModelCornerTank.java index 0f1c670a..b3bcd70d 100644 --- a/src/minecraft/steampower/ModelCornerTank.java +++ b/1.4.2/src/minecraft/steampower/ModelCornerTank.java @@ -1,95 +1,95 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCornerTank extends ModelBase -{ - //Corner - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape4; - - public ModelCornerTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //corner - Shape1 = new ModelRenderer(this, 0, 1); - Shape1.addBox(0F, 0F, 0F, 1, 16, 20); - Shape1.setRotationPoint(7F, 8F, -7F); - Shape1.setTextureSize(128, 128); - Shape1.mirror = true; - setRotation(Shape1, 0F, -0.7853982F, 0F); - Shape2 = new ModelRenderer(this, 44, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, 6F); - Shape2.setTextureSize(128, 128); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 44, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(6F, 8F, -8F); - Shape3.setTextureSize(128, 128); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 44); - Shape6.addBox(0F, 0F, 0F, 1, 15, 13); - Shape6.setRotationPoint(-8F, 9F, -7F); - Shape6.setTextureSize(128, 128); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 73); - Shape7.addBox(0F, 0F, 0F, 14, 15, 1); - Shape7.setRotationPoint(-8F, 9F, -8F); - Shape7.setTextureSize(128, 128); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 92); - Shape4.addBox(0F, 0F, 0F, 16, 1, 16); - Shape4.setRotationPoint(-8F, 8F, -8F); - Shape4.setTextureSize(128, 128); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - public void renderCorner(float f5) - { - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape4.render(f5); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCornerTank extends ModelBase +{ + //Corner + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape4; + + public ModelCornerTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //corner + Shape1 = new ModelRenderer(this, 0, 1); + Shape1.addBox(0F, 0F, 0F, 1, 16, 20); + Shape1.setRotationPoint(7F, 8F, -7F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, -0.7853982F, 0F); + Shape2 = new ModelRenderer(this, 44, 0); + Shape2.addBox(0F, 0F, 0F, 2, 16, 2); + Shape2.setRotationPoint(-8F, 8F, 6F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 44, 0); + Shape3.addBox(0F, 0F, 0F, 2, 16, 2); + Shape3.setRotationPoint(6F, 8F, -8F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 44); + Shape6.addBox(0F, 0F, 0F, 1, 15, 13); + Shape6.setRotationPoint(-8F, 9F, -7F); + Shape6.setTextureSize(128, 128); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 0, 73); + Shape7.addBox(0F, 0F, 0F, 14, 15, 1); + Shape7.setRotationPoint(-8F, 9F, -8F); + Shape7.setTextureSize(128, 128); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 92); + Shape4.addBox(0F, 0F, 0F, 16, 1, 16); + Shape4.setRotationPoint(-8F, 8F, -8F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + } + public void renderCorner(float f5) + { + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape4.render(f5); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/steampower/ModelEngine.java b/1.4.2/src/minecraft/steampower/ModelEngine.java similarity index 96% rename from src/minecraft/steampower/ModelEngine.java rename to 1.4.2/src/minecraft/steampower/ModelEngine.java index 07f815e3..449c6f17 100644 --- a/src/minecraft/steampower/ModelEngine.java +++ b/1.4.2/src/minecraft/steampower/ModelEngine.java @@ -1,109 +1,109 @@ -// Date: 8/24/2012 1:44:37 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelEngine extends ModelBase -{ - //fields - ModelRenderer Base; - ModelRenderer top; - ModelRenderer TopPiston; - ModelRenderer BottomPiston; - ModelRenderer center; - ModelRenderer C1; - ModelRenderer C2; - - public ModelEngine() - { - textureWidth = 64; - textureHeight = 64; - - Base = new ModelRenderer(this, 0, 20); - Base.addBox(-6F, 0F, -6F, 12, 8, 12); - Base.setRotationPoint(0F, 16F, 0F); - Base.setTextureSize(64, 64); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - top = new ModelRenderer(this, 0, 0); - top.addBox(-6F, 0F, -6F, 12, 8, 12); - top.setRotationPoint(0F, -8F, 0F); - top.setTextureSize(64, 64); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - TopPiston = new ModelRenderer(this, 0, 52); - TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - TopPiston.setRotationPoint(0F, 0F, 0F); - TopPiston.setTextureSize(64, 64); - TopPiston.mirror = true; - setRotation(TopPiston, 0F, 0F, 0F); - BottomPiston = new ModelRenderer(this, 16, 52); - BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - BottomPiston.setRotationPoint(0F, 8F, 0F); - BottomPiston.setTextureSize(64, 64); - BottomPiston.mirror = true; - setRotation(BottomPiston, 0F, 0F, 0F); - center = new ModelRenderer(this, 32, 52); - center.addBox(-3F, 0F, -3F, 6, 6, 6); - //center.setRotationPoint(0F, 5F, 0F); - center.setTextureSize(64, 64); - center.mirror = true; - setRotation(center, 0F, 0F, 0F); - C1 = new ModelRenderer(this, 0, 41); - C1.addBox(-2F, -3F, 0F, 4, 6, 3); - C1.setRotationPoint(0F, 8F, 3F); - C1.setTextureSize(64, 64); - C1.mirror = true; - setRotation(C1, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 15, 41); - C2.addBox(-2F, -3F, -3F, 4, 6, 3); - C2.setRotationPoint(0F, 8F, -3F); - C2.setTextureSize(64, 64); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - //renderBot(f5); - //renderTop(f5); - } - public void renderBot(float f5) - { - Base.render(f5); - BottomPiston.render(f5); - } - public void renderTop(float f5) - { - top.render(f5); - TopPiston.render(f5); - C1.render(f5); - C2.render(f5); - } - public void renderMid(float f5,float p) - { - - center.setRotationPoint(0F, p, 0F); - center.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} +// Date: 8/24/2012 1:44:37 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer Base; + ModelRenderer top; + ModelRenderer TopPiston; + ModelRenderer BottomPiston; + ModelRenderer center; + ModelRenderer C1; + ModelRenderer C2; + + public ModelEngine() + { + textureWidth = 64; + textureHeight = 64; + + Base = new ModelRenderer(this, 0, 20); + Base.addBox(-6F, 0F, -6F, 12, 8, 12); + Base.setRotationPoint(0F, 16F, 0F); + Base.setTextureSize(64, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + top = new ModelRenderer(this, 0, 0); + top.addBox(-6F, 0F, -6F, 12, 8, 12); + top.setRotationPoint(0F, -8F, 0F); + top.setTextureSize(64, 64); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + TopPiston = new ModelRenderer(this, 0, 52); + TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + TopPiston.setRotationPoint(0F, 0F, 0F); + TopPiston.setTextureSize(64, 64); + TopPiston.mirror = true; + setRotation(TopPiston, 0F, 0F, 0F); + BottomPiston = new ModelRenderer(this, 16, 52); + BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + BottomPiston.setRotationPoint(0F, 8F, 0F); + BottomPiston.setTextureSize(64, 64); + BottomPiston.mirror = true; + setRotation(BottomPiston, 0F, 0F, 0F); + center = new ModelRenderer(this, 32, 52); + center.addBox(-3F, 0F, -3F, 6, 6, 6); + //center.setRotationPoint(0F, 5F, 0F); + center.setTextureSize(64, 64); + center.mirror = true; + setRotation(center, 0F, 0F, 0F); + C1 = new ModelRenderer(this, 0, 41); + C1.addBox(-2F, -3F, 0F, 4, 6, 3); + C1.setRotationPoint(0F, 8F, 3F); + C1.setTextureSize(64, 64); + C1.mirror = true; + setRotation(C1, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 15, 41); + C2.addBox(-2F, -3F, -3F, 4, 6, 3); + C2.setRotationPoint(0F, 8F, -3F); + C2.setTextureSize(64, 64); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + //renderBot(f5); + //renderTop(f5); + } + public void renderBot(float f5) + { + Base.render(f5); + BottomPiston.render(f5); + } + public void renderTop(float f5) + { + top.render(f5); + TopPiston.render(f5); + C1.render(f5); + C2.render(f5); + } + public void renderMid(float f5,float p) + { + + center.setRotationPoint(0F, p, 0F); + center.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/minecraft/steampower/ModelFurnace.java b/1.4.2/src/minecraft/steampower/ModelFurnace.java similarity index 96% rename from src/minecraft/steampower/ModelFurnace.java rename to 1.4.2/src/minecraft/steampower/ModelFurnace.java index f69c8596..ec58045d 100644 --- a/src/minecraft/steampower/ModelFurnace.java +++ b/1.4.2/src/minecraft/steampower/ModelFurnace.java @@ -1,77 +1,77 @@ -// Date: 8/14/2012 3:02:31 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelFurnace extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer top; - ModelRenderer bottom; - ModelRenderer Shape1; - - public ModelFurnace() - { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(64, 32); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(64, 32); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(64, 32); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 27); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - genRender(f5); - } - public void genRender(float f5) - { - Body.render(f5); - top.render(f5); - bottom.render(f5); - Shape1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelFurnace extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public ModelFurnace() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(64, 32); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(64, 32); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(64, 32); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 27); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(64, 32); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + genRender(f5); + } + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/steampower/ModelGenerator.java b/1.4.2/src/minecraft/steampower/ModelGenerator.java similarity index 96% rename from src/minecraft/steampower/ModelGenerator.java rename to 1.4.2/src/minecraft/steampower/ModelGenerator.java index 0fd3f747..508294ac 100644 --- a/src/minecraft/steampower/ModelGenerator.java +++ b/1.4.2/src/minecraft/steampower/ModelGenerator.java @@ -1,131 +1,131 @@ -// Date: 8/27/2012 3:20:21 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGenerator extends ModelBase -{ - //fields - ModelRenderer BasePlate; - ModelRenderer LeftConnection; - ModelRenderer RightConnection; - ModelRenderer Mid; - ModelRenderer Mid2; - ModelRenderer front; - ModelRenderer front2; - ModelRenderer front3; - ModelRenderer Mid3; - ModelRenderer FrontConnector; - - public ModelGenerator() - { - textureWidth = 128; - textureHeight = 128; - - BasePlate = new ModelRenderer(this, 0, 0); - BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); - BasePlate.setRotationPoint(0F, 23F, 0F); - BasePlate.setTextureSize(128, 128); - BasePlate.mirror = true; - setRotation(BasePlate, 0F, 0F, 0F); - LeftConnection = new ModelRenderer(this, 0, 112); - LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); - LeftConnection.setRotationPoint(-6F, 16F, 0F); - LeftConnection.setTextureSize(128, 128); - LeftConnection.mirror = true; - setRotation(LeftConnection, 0F, 0F, 0F); - RightConnection = new ModelRenderer(this, 12, 112); - RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); - RightConnection.setRotationPoint(6F, 16F, 0F); - RightConnection.setTextureSize(128, 128); - RightConnection.mirror = true; - setRotation(RightConnection, 0F, 0F, 0F); - Mid = new ModelRenderer(this, 0, 29); - Mid.addBox(-4F, 0F, -6F, 8, 12, 12); - Mid.setRotationPoint(0F, 10F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Mid2 = new ModelRenderer(this, 0, 53); - Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); - Mid2.setRotationPoint(0F, 12F, 0F); - Mid2.setTextureSize(128, 128); - Mid2.mirror = true; - setRotation(Mid2, 0F, 0F, 0F); - front = new ModelRenderer(this, 20, 15); - front.addBox(-2F, -4F, 0F, 4, 8, 1); - front.setRotationPoint(0F, 16F, -7F); - front.setTextureSize(128, 128); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - front2 = new ModelRenderer(this, 0, 24); - front2.addBox(-4F, -2F, 0F, 8, 4, 1); - front2.setRotationPoint(0F, 16F, -7F); - front2.setTextureSize(128, 128); - front2.mirror = true; - setRotation(front2, 0F, 0F, 0F); - front3 = new ModelRenderer(this, 0, 16); - front3.addBox(-3F, -3F, 0F, 6, 6, 1); - front3.setRotationPoint(0F, 16F, -7F); - front3.setTextureSize(128, 128); - front3.mirror = true; - setRotation(front3, 0F, 0F, 0F); - Mid3 = new ModelRenderer(this, 40, 29); - Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); - Mid3.setRotationPoint(0F, 12F, 0F); - Mid3.setTextureSize(128, 128); - Mid3.mirror = true; - setRotation(Mid3, 0F, 0F, 0F); - FrontConnector = new ModelRenderer(this, 0, 120); - FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); - FrontConnector.setRotationPoint(0F, 14F, -6F); - FrontConnector.setTextureSize(128, 128); - FrontConnector.mirror = true; - setRotation(FrontConnector, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - } - public void RenderMain(float f5) - { - BasePlate.render(f5); - Mid.render(f5); - Mid2.render(f5); - front.render(f5); - front2.render(f5); - front3.render(f5); - Mid3.render(f5); - FrontConnector.render(f5); - } - public void RenderLeft(float f5) - { - LeftConnection.render(f5); - } - public void RenderRight(float f5) - { - RightConnection.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 8/27/2012 3:20:21 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGenerator extends ModelBase +{ + //fields + ModelRenderer BasePlate; + ModelRenderer LeftConnection; + ModelRenderer RightConnection; + ModelRenderer Mid; + ModelRenderer Mid2; + ModelRenderer front; + ModelRenderer front2; + ModelRenderer front3; + ModelRenderer Mid3; + ModelRenderer FrontConnector; + + public ModelGenerator() + { + textureWidth = 128; + textureHeight = 128; + + BasePlate = new ModelRenderer(this, 0, 0); + BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); + BasePlate.setRotationPoint(0F, 23F, 0F); + BasePlate.setTextureSize(128, 128); + BasePlate.mirror = true; + setRotation(BasePlate, 0F, 0F, 0F); + LeftConnection = new ModelRenderer(this, 0, 112); + LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); + LeftConnection.setRotationPoint(-6F, 16F, 0F); + LeftConnection.setTextureSize(128, 128); + LeftConnection.mirror = true; + setRotation(LeftConnection, 0F, 0F, 0F); + RightConnection = new ModelRenderer(this, 12, 112); + RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); + RightConnection.setRotationPoint(6F, 16F, 0F); + RightConnection.setTextureSize(128, 128); + RightConnection.mirror = true; + setRotation(RightConnection, 0F, 0F, 0F); + Mid = new ModelRenderer(this, 0, 29); + Mid.addBox(-4F, 0F, -6F, 8, 12, 12); + Mid.setRotationPoint(0F, 10F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Mid2 = new ModelRenderer(this, 0, 53); + Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); + Mid2.setRotationPoint(0F, 12F, 0F); + Mid2.setTextureSize(128, 128); + Mid2.mirror = true; + setRotation(Mid2, 0F, 0F, 0F); + front = new ModelRenderer(this, 20, 15); + front.addBox(-2F, -4F, 0F, 4, 8, 1); + front.setRotationPoint(0F, 16F, -7F); + front.setTextureSize(128, 128); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + front2 = new ModelRenderer(this, 0, 24); + front2.addBox(-4F, -2F, 0F, 8, 4, 1); + front2.setRotationPoint(0F, 16F, -7F); + front2.setTextureSize(128, 128); + front2.mirror = true; + setRotation(front2, 0F, 0F, 0F); + front3 = new ModelRenderer(this, 0, 16); + front3.addBox(-3F, -3F, 0F, 6, 6, 1); + front3.setRotationPoint(0F, 16F, -7F); + front3.setTextureSize(128, 128); + front3.mirror = true; + setRotation(front3, 0F, 0F, 0F); + Mid3 = new ModelRenderer(this, 40, 29); + Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); + Mid3.setRotationPoint(0F, 12F, 0F); + Mid3.setTextureSize(128, 128); + Mid3.mirror = true; + setRotation(Mid3, 0F, 0F, 0F); + FrontConnector = new ModelRenderer(this, 0, 120); + FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); + FrontConnector.setRotationPoint(0F, 14F, -6F); + FrontConnector.setTextureSize(128, 128); + FrontConnector.mirror = true; + setRotation(FrontConnector, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + } + public void RenderMain(float f5) + { + BasePlate.render(f5); + Mid.render(f5); + Mid2.render(f5); + front.render(f5); + front2.render(f5); + front3.render(f5); + Mid3.render(f5); + FrontConnector.render(f5); + } + public void RenderLeft(float f5) + { + LeftConnection.render(f5); + } + public void RenderRight(float f5) + { + RightConnection.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/steampower/ModelTank.java b/1.4.2/src/minecraft/steampower/ModelTank.java similarity index 97% rename from src/minecraft/steampower/ModelTank.java rename to 1.4.2/src/minecraft/steampower/ModelTank.java index 467aade1..ebe93a57 100644 --- a/src/minecraft/steampower/ModelTank.java +++ b/1.4.2/src/minecraft/steampower/ModelTank.java @@ -1,148 +1,148 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelTank extends ModelBase -{ - //One Block Tank - ModelRenderer TANK_WALL_1; - ModelRenderer TANK_WALL_2; - ModelRenderer TANK_WALL_3; - ModelRenderer TANK_WALL_4; - ModelRenderer TANK_SUPPORT_1; - ModelRenderer TANK_TOP_1; - ModelRenderer TANK_WALL_5; - ModelRenderer TANK_SUPPORT_2; - ModelRenderer TANK_SUPPORT_3; - ModelRenderer TANK_WALL_6; - ModelRenderer TANK_TOP_2; - ModelRenderer TANK_TOP_3; - ModelRenderer TANK_VALVE; - - public ModelTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - TANK_WALL_1 = new ModelRenderer(this, 0, 49); - TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); - TANK_WALL_1.setRotationPoint(6F, 12F, -4F); - TANK_WALL_1.setTextureSize(128, 128); - TANK_WALL_1.mirror = true; - setRotation(TANK_WALL_1, 0F, 0F, 0F); - TANK_WALL_2 = new ModelRenderer(this, 0, 70); - TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); - TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); - TANK_WALL_2.setTextureSize(128, 128); - TANK_WALL_2.mirror = true; - setRotation(TANK_WALL_2, 0F, 0F, 0F); - TANK_WALL_3 = new ModelRenderer(this, 0, 34); - TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_3.setRotationPoint(0F, 12F, 8F); - TANK_WALL_3.setTextureSize(128, 128); - TANK_WALL_3.mirror = true; - setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); - TANK_WALL_4 = new ModelRenderer(this, 0, 34); - TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_4.setRotationPoint(0F, 12F, -8F); - TANK_WALL_4.setTextureSize(128, 128); - TANK_WALL_4.mirror = true; - setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); - TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); - TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); - TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_1.setTextureSize(128, 128); - TANK_SUPPORT_1.mirror = true; - setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); - TANK_TOP_1 = new ModelRenderer(this, 43, 11); - TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); - TANK_TOP_1.setRotationPoint(0F, 10F, 0F); - TANK_TOP_1.setTextureSize(128, 128); - TANK_TOP_1.mirror = true; - setRotation(TANK_TOP_1, 0F, 0F, 0F); - TANK_WALL_5 = new ModelRenderer(this, 0, 34); - TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_5.setRotationPoint(0F, 12F, -7F); - TANK_WALL_5.setTextureSize(128, 128); - TANK_WALL_5.mirror = true; - setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); - TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_2.setTextureSize(128, 128); - TANK_SUPPORT_2.mirror = true; - setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); - TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_3.setTextureSize(128, 128); - TANK_SUPPORT_3.mirror = true; - setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); - TANK_WALL_6 = new ModelRenderer(this, 0, 34); - TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_6.setRotationPoint(0F, 12F, 7F); - TANK_WALL_6.setTextureSize(128, 128); - TANK_WALL_6.mirror = true; - setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); - TANK_TOP_2 = new ModelRenderer(this, 43, 0); - TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_2.setRotationPoint(0F, 10F, 0F); - TANK_TOP_2.setTextureSize(128, 128); - TANK_TOP_2.mirror = true; - setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); - TANK_TOP_3 = new ModelRenderer(this, 43, 0); - TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_3.setRotationPoint(0F, 10F, 0F); - TANK_TOP_3.setTextureSize(128, 128); - TANK_TOP_3.mirror = true; - setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); - TANK_VALVE = new ModelRenderer(this, 84, 0); - TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); - TANK_VALVE.setRotationPoint(-1F, 9F, -1F); - TANK_VALVE.setTextureSize(128, 128); - TANK_VALVE.mirror = true; - setRotation(TANK_VALVE, 0F, 0F, 0F); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - public void generalRender(float f5) - { - TANK_WALL_1.render(f5); - TANK_WALL_2.render(f5); - TANK_WALL_3.render(f5); - TANK_WALL_4.render(f5); - TANK_SUPPORT_1.render(f5); - TANK_TOP_1.render(f5); - TANK_WALL_5.render(f5); - TANK_SUPPORT_2.render(f5); - TANK_SUPPORT_3.render(f5); - TANK_WALL_6.render(f5); - TANK_TOP_2.render(f5); - TANK_TOP_3.render(f5); - TANK_VALVE.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //One Block Tank + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/minecraft/steampower/RenderBoiler.java b/1.4.2/src/minecraft/steampower/RenderBoiler.java similarity index 96% rename from src/minecraft/steampower/RenderBoiler.java rename to 1.4.2/src/minecraft/steampower/RenderBoiler.java index f837f16c..5ffe2a32 100644 --- a/src/minecraft/steampower/RenderBoiler.java +++ b/1.4.2/src/minecraft/steampower/RenderBoiler.java @@ -1,62 +1,62 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.boiler.TileEntityBoiler; -import basicpipes.pipes.api.MHelper; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - private ModelCenterTank model2; - private ModelCornerTank model3; - - public RenderBoiler(float par1) - { - model = new ModelTank(par1); - model2 = new ModelCenterTank(par1); - model3 = new ModelCornerTank(par1); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; - int meta = 0; - if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) - { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - model.generalRender(0.0625F); - } - else - if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) - { - bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); - model2.renderBlock(0.0625F); - } - else - { - int corner = MHelper.corner(tileEntity); - bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); - switch(corner) - { - case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - model3.renderCorner(0.0625f); - - } - GL11.glPopMatrix(); - } - +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.boiler.TileEntityBoiler; +import basicpipes.pipes.api.MHelper; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + private ModelCenterTank model2; + private ModelCornerTank model3; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + model2 = new ModelCenterTank(par1); + model3 = new ModelCornerTank(par1); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; + int meta = 0; + if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) + { + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); + model.generalRender(0.0625F); + } + else + if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) + { + bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); + model2.renderBlock(0.0625F); + } + else + { + int corner = MHelper.corner(tileEntity); + bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); + switch(corner) + { + case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + model3.renderCorner(0.0625f); + + } + GL11.glPopMatrix(); + } + } \ No newline at end of file diff --git a/src/minecraft/steampower/RenderFurnace.java b/1.4.2/src/minecraft/steampower/RenderFurnace.java similarity index 96% rename from src/minecraft/steampower/RenderFurnace.java rename to 1.4.2/src/minecraft/steampower/RenderFurnace.java index 2aace235..5513ae1e 100644 --- a/src/minecraft/steampower/RenderFurnace.java +++ b/1.4.2/src/minecraft/steampower/RenderFurnace.java @@ -1,37 +1,37 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderFurnace extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelFurnace model; - - public RenderFurnace() - { - model = new ModelFurnace(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - 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.genRender(0.0625F); - GL11.glPopMatrix(); - } - +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelFurnace model; + + public RenderFurnace() + { + model = new ModelFurnace(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + 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.genRender(0.0625F); + GL11.glPopMatrix(); + } + } \ No newline at end of file diff --git a/src/minecraft/steampower/RenderGenerator.java b/1.4.2/src/minecraft/steampower/RenderGenerator.java similarity index 96% rename from src/minecraft/steampower/RenderGenerator.java rename to 1.4.2/src/minecraft/steampower/RenderGenerator.java index b3ae8f82..c919afd4 100644 --- a/src/minecraft/steampower/RenderGenerator.java +++ b/1.4.2/src/minecraft/steampower/RenderGenerator.java @@ -1,37 +1,37 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderGenerator extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelGenerator model; - - public RenderGenerator() - { - model = new ModelGenerator(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(meta) - { - case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; - case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.RenderMain(0.0625F); - GL11.glPopMatrix(); - } - +package steampower; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +public class RenderGenerator extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGenerator model; + + public RenderGenerator() + { + model = new ModelGenerator(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(meta) + { + case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; + case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.RenderMain(0.0625F); + GL11.glPopMatrix(); + } + } \ No newline at end of file diff --git a/src/minecraft/steampower/SteamClientProxy.java b/1.4.2/src/minecraft/steampower/SteamClientProxy.java similarity index 97% rename from src/minecraft/steampower/SteamClientProxy.java rename to 1.4.2/src/minecraft/steampower/SteamClientProxy.java index 86acc571..2d21e051 100644 --- a/src/minecraft/steampower/SteamClientProxy.java +++ b/1.4.2/src/minecraft/steampower/SteamClientProxy.java @@ -1,34 +1,34 @@ -package steampower; - - -import net.minecraftforge.client.MinecraftForgeClient; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.TileEntityFireBox; -import steampower.geared.RenderGearPiston; -import steampower.turbine.TileEntityGen; -import steampower.turbine.TileEntitySteamPiston; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class SteamClientProxy extends SteamProxy{ - - public void preInit() - { - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); - RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); - } - @Override - public void init() - { - ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); - ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); - ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); - } - public void postInit() - { - - } - -} +package steampower; + + +import net.minecraftforge.client.MinecraftForgeClient; +import steampower.boiler.TileEntityBoiler; +import steampower.burner.TileEntityFireBox; +import steampower.geared.RenderGearPiston; +import steampower.turbine.TileEntityGen; +import steampower.turbine.TileEntitySteamPiston; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; + +public class SteamClientProxy extends SteamProxy{ + + public void preInit() + { + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); + RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); + } + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); + ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); + ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); + } + public void postInit() + { + + } + +} diff --git a/src/minecraft/steampower/geared/ModelGearPiston.java b/1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java similarity index 97% rename from src/minecraft/steampower/geared/ModelGearPiston.java rename to 1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java index aae4738c..ccc2c70e 100644 --- a/src/minecraft/steampower/geared/ModelGearPiston.java +++ b/1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java @@ -1,381 +1,381 @@ -// Date: 10/1/2012 12:32:21 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower.geared; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGearPiston extends ModelBase -{ - //fields - ModelRenderer PistonCover; - ModelRenderer RSpiston; - ModelRenderer LSpiston; - ModelRenderer RodPiston; - ModelRenderer Base; - ModelRenderer Front; - ModelRenderer BackCC; - ModelRenderer RightPipe; - ModelRenderer FrontCC; - ModelRenderer LeftCC; - ModelRenderer FrontPipe; - ModelRenderer Right; - ModelRenderer RightCC; - ModelRenderer Back; - ModelRenderer BackPipe; - ModelRenderer Left; - ModelRenderer LeftPipe; - ModelRenderer RigthF4; - ModelRenderer LeftF4; - ModelRenderer LeftF3; - ModelRenderer LeftF2; - ModelRenderer LeftF1; - ModelRenderer RigthF3; - ModelRenderer RigthF2; - ModelRenderer RigthF1; - ModelRenderer RigthGCC; - ModelRenderer RightSlide; - ModelRenderer midRod; - ModelRenderer RightRod2; - ModelRenderer LeftGCC; - ModelRenderer LeftRod2; - ModelRenderer LeftSlide2; - - public ModelGearPiston() - { - textureWidth = 128; - textureHeight = 128; - - PistonCover = new ModelRenderer(this, 13, 31); - PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); - PistonCover.setRotationPoint(-3F, 20F, 0F); - PistonCover.setTextureSize(128, 128); - PistonCover.mirror = true; - setRotation(PistonCover, 0F, 0F, 0F); - RSpiston = new ModelRenderer(this, 0, 32); - RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); - RSpiston.setRotationPoint(1F, 3F, 0F); - RSpiston.setTextureSize(128, 128); - RSpiston.mirror = true; - setRotation(RSpiston, 0F, 0F, 0F); - LSpiston = new ModelRenderer(this, 0, 32); - LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); - LSpiston.setRotationPoint(2F, 3F, 0F); - LSpiston.setTextureSize(128, 128); - LSpiston.mirror = true; - setRotation(LSpiston, 0F, 0F, 0F); - RodPiston = new ModelRenderer(this, 0, 59); - RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); - RodPiston.setRotationPoint(0F, 8F, 0F); - RodPiston.setTextureSize(128, 128); - RodPiston.mirror = true; - setRotation(RodPiston, 0F, 0F, 0F); - Base = new ModelRenderer(this, 12, 49); - Base.addBox(0F, 0F, 0F, 10, 5, 10); - Base.setRotationPoint(-5F, 19F, -5F); - Base.setTextureSize(128, 128); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - Front = new ModelRenderer(this, 28, 68); - Front.addBox(-3F, 0F, 0F, 6, 12, 1); - Front.setRotationPoint(0F, 12F, -7F); - Front.setTextureSize(128, 128); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - BackCC = new ModelRenderer(this, 43, 68); - BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); - BackCC.setRotationPoint(0F, 16F, 6F); - BackCC.setTextureSize(128, 128); - BackCC.mirror = true; - setRotation(BackCC, 0F, 0F, 0F); - RightPipe = new ModelRenderer(this, 12, 87); - RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); - RightPipe.setRotationPoint(-6F, 14F, 0F); - RightPipe.setTextureSize(128, 128); - RightPipe.mirror = true; - setRotation(RightPipe, 0F, 0F, 0F); - FrontCC = new ModelRenderer(this, 43, 68); - FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); - FrontCC.setRotationPoint(0F, 16F, -7F); - FrontCC.setTextureSize(128, 128); - FrontCC.mirror = true; - setRotation(FrontCC, 0F, 0F, 0F); - LeftCC = new ModelRenderer(this, 43, 74); - LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); - LeftCC.setRotationPoint(7F, 16F, 0F); - LeftCC.setTextureSize(128, 128); - LeftCC.mirror = true; - setRotation(LeftCC, 0F, 0F, 0F); - FrontPipe = new ModelRenderer(this, 28, 82); - FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); - FrontPipe.setRotationPoint(0F, 14F, -6F); - FrontPipe.setTextureSize(128, 128); - FrontPipe.mirror = true; - setRotation(FrontPipe, 0F, 0F, 0F); - Right = new ModelRenderer(this, 12, 68); - Right.addBox(0F, 0F, -3F, 1, 12, 6); - Right.setRotationPoint(-7F, 12F, 0F); - Right.setTextureSize(128, 128); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - RightCC = new ModelRenderer(this, 43, 74); - RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); - RightCC.setRotationPoint(-7F, 16F, 0F); - RightCC.setTextureSize(128, 128); - RightCC.mirror = true; - setRotation(RightCC, 0F, 0F, 0F); - Back = new ModelRenderer(this, 28, 68); - Back.addBox(-3F, 0F, 0F, 6, 12, 1); - Back.setRotationPoint(0F, 12F, 6F); - Back.setTextureSize(128, 128); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - BackPipe = new ModelRenderer(this, 28, 82); - BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); - BackPipe.setRotationPoint(0F, 14F, 6F); - BackPipe.setTextureSize(128, 128); - BackPipe.mirror = true; - setRotation(BackPipe, 0F, 0F, 0F); - Left = new ModelRenderer(this, 12, 68); - Left.addBox(0F, 0F, -3F, 1, 12, 6); - Left.setRotationPoint(6F, 12F, 0F); - Left.setTextureSize(128, 128); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - LeftPipe = new ModelRenderer(this, 12, 87); - LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); - LeftPipe.setRotationPoint(6F, 14F, 0F); - LeftPipe.setTextureSize(128, 128); - LeftPipe.mirror = true; - setRotation(LeftPipe, 0F, 0F, 0F); - RigthF4 = new ModelRenderer(this, 0, 56); - RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); - RigthF4.setRotationPoint(-8F, 0F, 0F); - RigthF4.setTextureSize(128, 128); - RigthF4.mirror = true; - setRotation(RigthF4, 0F, 0F, 0F); - LeftF4 = new ModelRenderer(this, 0, 56); - LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); - LeftF4.setRotationPoint(8F, 0F, 0F); - LeftF4.setTextureSize(128, 128); - LeftF4.mirror = true; - setRotation(LeftF4, 0.7853982F, 0F, 0F); - LeftF3 = new ModelRenderer(this, 0, 56); - LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); - LeftF3.setRotationPoint(8F, 0F, 0F); - LeftF3.setTextureSize(128, 128); - LeftF3.mirror = true; - setRotation(LeftF3, 0.7853982F, 0F, 0F); - LeftF2 = new ModelRenderer(this, 0, 56); - LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); - LeftF2.setRotationPoint(8F, 0F, 0F); - LeftF2.setTextureSize(128, 128); - LeftF2.mirror = true; - setRotation(LeftF2, 0.7853982F, 0F, 0F); - LeftF1 = new ModelRenderer(this, 0, 56); - LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); - LeftF1.setRotationPoint(8F, 0F, 0F); - LeftF1.setTextureSize(128, 128); - LeftF1.mirror = true; - setRotation(LeftF1, 0.7853982F, 0F, 0F); - RigthF3 = new ModelRenderer(this, 0, 56); - RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); - RigthF3.setRotationPoint(-8F, 0F, 0F); - RigthF3.setTextureSize(128, 128); - RigthF3.mirror = true; - setRotation(RigthF3, 0F, 0F, 0F); - RigthF2 = new ModelRenderer(this, 0, 56); - RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); - RigthF2.setRotationPoint(-8F, 0F, 0F); - RigthF2.setTextureSize(128, 128); - RigthF2.mirror = true; - setRotation(RigthF2, 0F, 0F, 0F); - RigthF1 = new ModelRenderer(this, 0, 56); - RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); - RigthF1.setRotationPoint(-8F, 0F, 0F); - RigthF1.setTextureSize(128, 128); - RigthF1.mirror = true; - setRotation(RigthF1, 0F, 0F, 0F); - RigthGCC = new ModelRenderer(this, 12, 18); - RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); - RigthGCC.setRotationPoint(-6F, 0F, 0F); - RigthGCC.setTextureSize(128, 128); - RigthGCC.mirror = true; - setRotation(RigthGCC, 0F, 0F, 0F); - RightSlide = new ModelRenderer(this, 0, 44); - RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); - RightSlide.setRotationPoint(-4F, 0F, 0F); - RightSlide.setTextureSize(128, 128); - RightSlide.mirror = true; - setRotation(RightSlide, 0F, 0F, 0F); - LeftSlide2 = new ModelRenderer(this, 0, 27); - LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); - LeftSlide2.setRotationPoint(-3F, 0F, 0F); - LeftSlide2.setTextureSize(128, 128); - LeftSlide2.mirror = true; - setRotation(LeftSlide2, 0F, 0F, 0F); - RightRod2 = new ModelRenderer(this, 0, 20); - RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); - RightRod2.setRotationPoint(-6F, 0F, 0F); - RightRod2.setTextureSize(128, 128); - RightRod2.mirror = true; - setRotation(RightRod2, 0F, 0F, 0F); - LeftGCC = new ModelRenderer(this, 24, 18); - LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); - LeftGCC.setRotationPoint(7F, 0F, 0F); - LeftGCC.setTextureSize(128, 128); - LeftGCC.mirror = true; - setRotation(LeftGCC, 0.7853982F, 0F, 0F); - LeftRod2 = new ModelRenderer(this, 0, 20); - LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); - LeftRod2.setRotationPoint(7F, 0F, 0F); - LeftRod2.setTextureSize(128, 128); - LeftRod2.mirror = true; - setRotation(LeftRod2, 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) - { - Base.render(f5); - PistonCover.render(f5); - - } - public void renderGear(float f5) - { - //Rod connectors - LeftF4.render(f5); - LeftF3.render(f5); - LeftF2.render(f5); - LeftF1.render(f5); - RigthF4.render(f5); - RigthF3.render(f5); - RigthF2.render(f5); - RigthF1.render(f5); - RigthGCC.render(f5); - LeftGCC.render(f5); - } - public void renderR(float f5,int pos) - { - 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); - //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); - midRod.render(f5); - RightRod2.render(f5); - LeftRod2.render(f5); - LeftSlide2.render(f5); - } - public void renderLeft(float f5) - { - Left.render(f5); - LeftPipe.render(f5); - LeftCC.render(f5); - } - public void renderRight(float f5) - { - Right.render(f5); - RightCC.render(f5); - RightPipe.render(f5); - } - public void renderFront(float f5) - { - Front.render(f5); - FrontCC.render(f5); - FrontPipe.render(f5); - } - public void renderBack(float f5) - { - Back.render(f5); - BackPipe.render(f5); - BackCC.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} +// Date: 10/1/2012 12:32:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package steampower.geared; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGearPiston extends ModelBase +{ + //fields + ModelRenderer PistonCover; + ModelRenderer RSpiston; + ModelRenderer LSpiston; + ModelRenderer RodPiston; + ModelRenderer Base; + ModelRenderer Front; + ModelRenderer BackCC; + ModelRenderer RightPipe; + ModelRenderer FrontCC; + ModelRenderer LeftCC; + ModelRenderer FrontPipe; + ModelRenderer Right; + ModelRenderer RightCC; + ModelRenderer Back; + ModelRenderer BackPipe; + ModelRenderer Left; + ModelRenderer LeftPipe; + ModelRenderer RigthF4; + ModelRenderer LeftF4; + ModelRenderer LeftF3; + ModelRenderer LeftF2; + ModelRenderer LeftF1; + ModelRenderer RigthF3; + ModelRenderer RigthF2; + ModelRenderer RigthF1; + ModelRenderer RigthGCC; + ModelRenderer RightSlide; + ModelRenderer midRod; + ModelRenderer RightRod2; + ModelRenderer LeftGCC; + ModelRenderer LeftRod2; + ModelRenderer LeftSlide2; + + public ModelGearPiston() + { + textureWidth = 128; + textureHeight = 128; + + PistonCover = new ModelRenderer(this, 13, 31); + PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); + PistonCover.setRotationPoint(-3F, 20F, 0F); + PistonCover.setTextureSize(128, 128); + PistonCover.mirror = true; + setRotation(PistonCover, 0F, 0F, 0F); + RSpiston = new ModelRenderer(this, 0, 32); + RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); + RSpiston.setRotationPoint(1F, 3F, 0F); + RSpiston.setTextureSize(128, 128); + RSpiston.mirror = true; + setRotation(RSpiston, 0F, 0F, 0F); + LSpiston = new ModelRenderer(this, 0, 32); + LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); + LSpiston.setRotationPoint(2F, 3F, 0F); + LSpiston.setTextureSize(128, 128); + LSpiston.mirror = true; + setRotation(LSpiston, 0F, 0F, 0F); + RodPiston = new ModelRenderer(this, 0, 59); + RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); + RodPiston.setRotationPoint(0F, 8F, 0F); + RodPiston.setTextureSize(128, 128); + RodPiston.mirror = true; + setRotation(RodPiston, 0F, 0F, 0F); + Base = new ModelRenderer(this, 12, 49); + Base.addBox(0F, 0F, 0F, 10, 5, 10); + Base.setRotationPoint(-5F, 19F, -5F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Front = new ModelRenderer(this, 28, 68); + Front.addBox(-3F, 0F, 0F, 6, 12, 1); + Front.setRotationPoint(0F, 12F, -7F); + Front.setTextureSize(128, 128); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + BackCC = new ModelRenderer(this, 43, 68); + BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); + BackCC.setRotationPoint(0F, 16F, 6F); + BackCC.setTextureSize(128, 128); + BackCC.mirror = true; + setRotation(BackCC, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 12, 87); + RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); + RightPipe.setRotationPoint(-6F, 14F, 0F); + RightPipe.setTextureSize(128, 128); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + FrontCC = new ModelRenderer(this, 43, 68); + FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); + FrontCC.setRotationPoint(0F, 16F, -7F); + FrontCC.setTextureSize(128, 128); + FrontCC.mirror = true; + setRotation(FrontCC, 0F, 0F, 0F); + LeftCC = new ModelRenderer(this, 43, 74); + LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); + LeftCC.setRotationPoint(7F, 16F, 0F); + LeftCC.setTextureSize(128, 128); + LeftCC.mirror = true; + setRotation(LeftCC, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 28, 82); + FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); + FrontPipe.setRotationPoint(0F, 14F, -6F); + FrontPipe.setTextureSize(128, 128); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + Right = new ModelRenderer(this, 12, 68); + Right.addBox(0F, 0F, -3F, 1, 12, 6); + Right.setRotationPoint(-7F, 12F, 0F); + Right.setTextureSize(128, 128); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + RightCC = new ModelRenderer(this, 43, 74); + RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); + RightCC.setRotationPoint(-7F, 16F, 0F); + RightCC.setTextureSize(128, 128); + RightCC.mirror = true; + setRotation(RightCC, 0F, 0F, 0F); + Back = new ModelRenderer(this, 28, 68); + Back.addBox(-3F, 0F, 0F, 6, 12, 1); + Back.setRotationPoint(0F, 12F, 6F); + Back.setTextureSize(128, 128); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 28, 82); + BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); + BackPipe.setRotationPoint(0F, 14F, 6F); + BackPipe.setTextureSize(128, 128); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + Left = new ModelRenderer(this, 12, 68); + Left.addBox(0F, 0F, -3F, 1, 12, 6); + Left.setRotationPoint(6F, 12F, 0F); + Left.setTextureSize(128, 128); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 12, 87); + LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); + LeftPipe.setRotationPoint(6F, 14F, 0F); + LeftPipe.setTextureSize(128, 128); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + RigthF4 = new ModelRenderer(this, 0, 56); + RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); + RigthF4.setRotationPoint(-8F, 0F, 0F); + RigthF4.setTextureSize(128, 128); + RigthF4.mirror = true; + setRotation(RigthF4, 0F, 0F, 0F); + LeftF4 = new ModelRenderer(this, 0, 56); + LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); + LeftF4.setRotationPoint(8F, 0F, 0F); + LeftF4.setTextureSize(128, 128); + LeftF4.mirror = true; + setRotation(LeftF4, 0.7853982F, 0F, 0F); + LeftF3 = new ModelRenderer(this, 0, 56); + LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); + LeftF3.setRotationPoint(8F, 0F, 0F); + LeftF3.setTextureSize(128, 128); + LeftF3.mirror = true; + setRotation(LeftF3, 0.7853982F, 0F, 0F); + LeftF2 = new ModelRenderer(this, 0, 56); + LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); + LeftF2.setRotationPoint(8F, 0F, 0F); + LeftF2.setTextureSize(128, 128); + LeftF2.mirror = true; + setRotation(LeftF2, 0.7853982F, 0F, 0F); + LeftF1 = new ModelRenderer(this, 0, 56); + LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); + LeftF1.setRotationPoint(8F, 0F, 0F); + LeftF1.setTextureSize(128, 128); + LeftF1.mirror = true; + setRotation(LeftF1, 0.7853982F, 0F, 0F); + RigthF3 = new ModelRenderer(this, 0, 56); + RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); + RigthF3.setRotationPoint(-8F, 0F, 0F); + RigthF3.setTextureSize(128, 128); + RigthF3.mirror = true; + setRotation(RigthF3, 0F, 0F, 0F); + RigthF2 = new ModelRenderer(this, 0, 56); + RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); + RigthF2.setRotationPoint(-8F, 0F, 0F); + RigthF2.setTextureSize(128, 128); + RigthF2.mirror = true; + setRotation(RigthF2, 0F, 0F, 0F); + RigthF1 = new ModelRenderer(this, 0, 56); + RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); + RigthF1.setRotationPoint(-8F, 0F, 0F); + RigthF1.setTextureSize(128, 128); + RigthF1.mirror = true; + setRotation(RigthF1, 0F, 0F, 0F); + RigthGCC = new ModelRenderer(this, 12, 18); + RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); + RigthGCC.setRotationPoint(-6F, 0F, 0F); + RigthGCC.setTextureSize(128, 128); + RigthGCC.mirror = true; + setRotation(RigthGCC, 0F, 0F, 0F); + RightSlide = new ModelRenderer(this, 0, 44); + RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); + RightSlide.setRotationPoint(-4F, 0F, 0F); + RightSlide.setTextureSize(128, 128); + RightSlide.mirror = true; + setRotation(RightSlide, 0F, 0F, 0F); + LeftSlide2 = new ModelRenderer(this, 0, 27); + LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); + LeftSlide2.setRotationPoint(-3F, 0F, 0F); + LeftSlide2.setTextureSize(128, 128); + LeftSlide2.mirror = true; + setRotation(LeftSlide2, 0F, 0F, 0F); + RightRod2 = new ModelRenderer(this, 0, 20); + RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); + RightRod2.setRotationPoint(-6F, 0F, 0F); + RightRod2.setTextureSize(128, 128); + RightRod2.mirror = true; + setRotation(RightRod2, 0F, 0F, 0F); + LeftGCC = new ModelRenderer(this, 24, 18); + LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); + LeftGCC.setRotationPoint(7F, 0F, 0F); + LeftGCC.setTextureSize(128, 128); + LeftGCC.mirror = true; + setRotation(LeftGCC, 0.7853982F, 0F, 0F); + LeftRod2 = new ModelRenderer(this, 0, 20); + LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); + LeftRod2.setRotationPoint(7F, 0F, 0F); + LeftRod2.setTextureSize(128, 128); + LeftRod2.mirror = true; + setRotation(LeftRod2, 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) + { + Base.render(f5); + PistonCover.render(f5); + + } + public void renderGear(float f5) + { + //Rod connectors + LeftF4.render(f5); + LeftF3.render(f5); + LeftF2.render(f5); + LeftF1.render(f5); + RigthF4.render(f5); + RigthF3.render(f5); + RigthF2.render(f5); + RigthF1.render(f5); + RigthGCC.render(f5); + LeftGCC.render(f5); + } + public void renderR(float f5,int pos) + { + 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); + //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); + midRod.render(f5); + RightRod2.render(f5); + LeftRod2.render(f5); + LeftSlide2.render(f5); + } + public void renderLeft(float f5) + { + Left.render(f5); + LeftPipe.render(f5); + LeftCC.render(f5); + } + public void renderRight(float f5) + { + Right.render(f5); + RightCC.render(f5); + RightPipe.render(f5); + } + public void renderFront(float f5) + { + Front.render(f5); + FrontCC.render(f5); + FrontPipe.render(f5); + } + public void renderBack(float f5) + { + Back.render(f5); + BackPipe.render(f5); + BackCC.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/minecraft/steampower/geared/RenderGearPiston.java b/1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java similarity index 96% rename from src/minecraft/steampower/geared/RenderGearPiston.java rename to 1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java index 5e09a922..70c79aa1 100644 --- a/src/minecraft/steampower/geared/RenderGearPiston.java +++ b/1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java @@ -1,51 +1,51 @@ -package steampower.geared; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.SteamPowerMain; -import steampower.turbine.TileEntitySteamPiston; - -public class RenderGearPiston extends TileEntitySpecialRenderer -{ - private ModelGearPiston model; - - public RenderGearPiston() - { - model = new ModelGearPiston(); - } - public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - - 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.renderGear(0.0625F); - model.renderR(0.0625F,tileEntity.pos); - model.renderBody(0.0625F); - model.renderBack(0.0625F); - model.renderFront(0.0625F); - model.renderLeft(0.0625F); - model.renderRight(0.0625F); - GL11.glPopMatrix(); - } - - - @Override - public void renderTileEntityAt(TileEntity var1, double d, double d1, - double d2, float d3) { - this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); - - } - +package steampower.geared; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import steampower.SteamPowerMain; +import steampower.turbine.TileEntitySteamPiston; + +public class RenderGearPiston extends TileEntitySpecialRenderer +{ + private ModelGearPiston model; + + public RenderGearPiston() + { + model = new ModelGearPiston(); + } + public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + + 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.renderGear(0.0625F); + model.renderR(0.0625F,tileEntity.pos); + model.renderBody(0.0625F); + model.renderBack(0.0625F); + model.renderFront(0.0625F); + model.renderLeft(0.0625F); + model.renderRight(0.0625F); + GL11.glPopMatrix(); + } + + + @Override + public void renderTileEntityAt(TileEntity var1, double d, double d1, + double d2, float d3) { + this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); + + } + } \ No newline at end of file diff --git a/src/minecraft/textures/BoilerGui.png b/1.4.2/src/minecraft/textures/BoilerGui.png similarity index 100% rename from src/minecraft/textures/BoilerGui.png rename to 1.4.2/src/minecraft/textures/BoilerGui.png diff --git a/src/minecraft/textures/CornerTank.png b/1.4.2/src/minecraft/textures/CornerTank.png similarity index 100% rename from src/minecraft/textures/CornerTank.png rename to 1.4.2/src/minecraft/textures/CornerTank.png diff --git a/src/minecraft/textures/Engine.png b/1.4.2/src/minecraft/textures/Engine.png similarity index 100% rename from src/minecraft/textures/Engine.png rename to 1.4.2/src/minecraft/textures/Engine.png diff --git a/src/minecraft/textures/Furnace.png b/1.4.2/src/minecraft/textures/Furnace.png similarity index 100% rename from src/minecraft/textures/Furnace.png rename to 1.4.2/src/minecraft/textures/Furnace.png diff --git a/src/minecraft/textures/GearRod.png b/1.4.2/src/minecraft/textures/GearRod.png similarity index 100% rename from src/minecraft/textures/GearRod.png rename to 1.4.2/src/minecraft/textures/GearRod.png diff --git a/src/minecraft/textures/GearShaftPiston.png b/1.4.2/src/minecraft/textures/GearShaftPiston.png similarity index 100% rename from src/minecraft/textures/GearShaftPiston.png rename to 1.4.2/src/minecraft/textures/GearShaftPiston.png diff --git a/src/minecraft/textures/Generator.png b/1.4.2/src/minecraft/textures/Generator.png similarity index 100% rename from src/minecraft/textures/Generator.png rename to 1.4.2/src/minecraft/textures/Generator.png diff --git a/src/minecraft/textures/GrinderGUI.png b/1.4.2/src/minecraft/textures/GrinderGUI.png similarity index 100% rename from src/minecraft/textures/GrinderGUI.png rename to 1.4.2/src/minecraft/textures/GrinderGUI.png diff --git a/src/minecraft/textures/Items.png b/1.4.2/src/minecraft/textures/Items.png similarity index 100% rename from src/minecraft/textures/Items.png rename to 1.4.2/src/minecraft/textures/Items.png diff --git a/src/minecraft/textures/SteamGUI.png b/1.4.2/src/minecraft/textures/SteamGUI.png similarity index 100% rename from src/minecraft/textures/SteamGUI.png rename to 1.4.2/src/minecraft/textures/SteamGUI.png diff --git a/src/minecraft/textures/SteelPiston.png b/1.4.2/src/minecraft/textures/SteelPiston.png similarity index 100% rename from src/minecraft/textures/SteelPiston.png rename to 1.4.2/src/minecraft/textures/SteelPiston.png diff --git a/src/minecraft/textures/blocks.png b/1.4.2/src/minecraft/textures/blocks.png similarity index 100% rename from src/minecraft/textures/blocks.png rename to 1.4.2/src/minecraft/textures/blocks.png diff --git a/src/minecraft/textures/pipes/DefaultPipe.png b/1.4.2/src/minecraft/textures/pipes/DefaultPipe.png similarity index 100% rename from src/minecraft/textures/pipes/DefaultPipe.png rename to 1.4.2/src/minecraft/textures/pipes/DefaultPipe.png diff --git a/src/minecraft/textures/pipes/LavaPipe.png b/1.4.2/src/minecraft/textures/pipes/LavaPipe.png similarity index 100% rename from src/minecraft/textures/pipes/LavaPipe.png rename to 1.4.2/src/minecraft/textures/pipes/LavaPipe.png diff --git a/src/minecraft/textures/pipes/SixLavaPipe.png b/1.4.2/src/minecraft/textures/pipes/SixLavaPipe.png similarity index 100% rename from src/minecraft/textures/pipes/SixLavaPipe.png rename to 1.4.2/src/minecraft/textures/pipes/SixLavaPipe.png diff --git a/src/minecraft/textures/pipes/SixOilPipe.png b/1.4.2/src/minecraft/textures/pipes/SixOilPipe.png similarity index 100% rename from src/minecraft/textures/pipes/SixOilPipe.png rename to 1.4.2/src/minecraft/textures/pipes/SixOilPipe.png diff --git a/src/minecraft/textures/pipes/SixSteamPipe.png b/1.4.2/src/minecraft/textures/pipes/SixSteamPipe.png similarity index 100% rename from src/minecraft/textures/pipes/SixSteamPipe.png rename to 1.4.2/src/minecraft/textures/pipes/SixSteamPipe.png diff --git a/src/minecraft/textures/pipes/SixWaterPipe.png b/1.4.2/src/minecraft/textures/pipes/SixWaterPipe.png similarity index 100% rename from src/minecraft/textures/pipes/SixWaterPipe.png rename to 1.4.2/src/minecraft/textures/pipes/SixWaterPipe.png diff --git a/src/minecraft/textures/pipes/SteamPipe.png b/1.4.2/src/minecraft/textures/pipes/SteamPipe.png similarity index 100% rename from src/minecraft/textures/pipes/SteamPipe.png rename to 1.4.2/src/minecraft/textures/pipes/SteamPipe.png diff --git a/src/minecraft/textures/pipes/WaterPipe.png b/1.4.2/src/minecraft/textures/pipes/WaterPipe.png similarity index 100% rename from src/minecraft/textures/pipes/WaterPipe.png rename to 1.4.2/src/minecraft/textures/pipes/WaterPipe.png diff --git a/src/minecraft/textures/pumps/LavaPump.png b/1.4.2/src/minecraft/textures/pumps/LavaPump.png similarity index 100% rename from src/minecraft/textures/pumps/LavaPump.png rename to 1.4.2/src/minecraft/textures/pumps/LavaPump.png diff --git a/src/minecraft/textures/pumps/OilPump.png b/1.4.2/src/minecraft/textures/pumps/OilPump.png similarity index 100% rename from src/minecraft/textures/pumps/OilPump.png rename to 1.4.2/src/minecraft/textures/pumps/OilPump.png diff --git a/src/minecraft/textures/pumps/Pump.png b/1.4.2/src/minecraft/textures/pumps/Pump.png similarity index 100% rename from src/minecraft/textures/pumps/Pump.png rename to 1.4.2/src/minecraft/textures/pumps/Pump.png diff --git a/src/minecraft/textures/pumps/WaterPump.png b/1.4.2/src/minecraft/textures/pumps/WaterPump.png similarity index 100% rename from src/minecraft/textures/pumps/WaterPump.png rename to 1.4.2/src/minecraft/textures/pumps/WaterPump.png diff --git a/src/minecraft/textures/tankBlock.png b/1.4.2/src/minecraft/textures/tankBlock.png similarity index 100% rename from src/minecraft/textures/tankBlock.png rename to 1.4.2/src/minecraft/textures/tankBlock.png diff --git a/src/minecraft/textures/tankTexture.png b/1.4.2/src/minecraft/textures/tankTexture.png similarity index 100% rename from src/minecraft/textures/tankTexture.png rename to 1.4.2/src/minecraft/textures/tankTexture.png diff --git a/src/minecraft/textures/tanks/GUITurret.png b/1.4.2/src/minecraft/textures/tanks/GUITurret.png similarity index 100% rename from src/minecraft/textures/tanks/GUITurret.png rename to 1.4.2/src/minecraft/textures/tanks/GUITurret.png diff --git a/src/minecraft/textures/tanks/LiquidTank.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank.png diff --git a/src/minecraft/textures/tanks/LiquidTank0.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank0.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank0.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank0.png diff --git a/src/minecraft/textures/tanks/LiquidTank1.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank1.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank1.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank1.png diff --git a/src/minecraft/textures/tanks/LiquidTank2.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank2.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank2.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank2.png diff --git a/src/minecraft/textures/tanks/LiquidTank3.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank3.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank3.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank3.png diff --git a/src/minecraft/textures/tanks/LiquidTank4.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank4.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTank4.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTank4.png diff --git a/src/minecraft/textures/tanks/LiquidTankCorner.png b/1.4.2/src/minecraft/textures/tanks/LiquidTankCorner.png similarity index 100% rename from src/minecraft/textures/tanks/LiquidTankCorner.png rename to 1.4.2/src/minecraft/textures/tanks/LiquidTankCorner.png diff --git a/src/common/dark/SteamPower/ItemRenderHelperS.java b/src/common/dark/SteamPower/ItemRenderHelperS.java new file mode 100644 index 00000000..d198f53c --- /dev/null +++ b/src/common/dark/SteamPower/ItemRenderHelperS.java @@ -0,0 +1,57 @@ +package dark.SteamPower; + +import net.minecraft.src.Block; +import net.minecraft.src.IBlockAccess; +import net.minecraft.src.RenderBlocks; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import dark.BasicUtilities.BasicUtilitiesMain; +import dark.SteamPower.renders.ModelFurnace; +import dark.SteamPower.renders.ModelGenerator; +import dark.SteamPower.renders.ModelTank; +//ItemRenderHelperS.renderID +public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { + public static ItemRenderHelperS instance = new ItemRenderHelperS(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelGenerator modelGen = new ModelGenerator(); + private ModelTank modelTank = new ModelTank(0f); + private ModelFurnace modelFurnace = new ModelFurnace(); + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { + if(block.blockID == SteamPowerMain.machine.blockID && metadata == 4) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); + modelTank.generalRender(0.0625F); + GL11.glPopMatrix(); + } + if(block.blockID == SteamPowerMain.machine.blockID && metadata >= 0 && metadata <= 3) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); + modelFurnace.genRender(0.0625F); + GL11.glPopMatrix(); + } + } + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + return false; + } + + public boolean shouldRender3DInInventory() { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/common/dark/SteamPower/SteamClientProxy.java b/src/common/dark/SteamPower/SteamClientProxy.java new file mode 100644 index 00000000..83ee7db5 --- /dev/null +++ b/src/common/dark/SteamPower/SteamClientProxy.java @@ -0,0 +1,37 @@ +package dark.SteamPower; + + +import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import dark.BasicUtilities.mechanical.TileEntityGen; +import dark.SteamPower.boiler.TileEntityBoiler; +import dark.SteamPower.firebox.TileEntityFireBox; +import dark.SteamPower.renders.RenderBoiler; +import dark.SteamPower.renders.RenderFurnace; +import dark.SteamPower.renders.RenderGearPiston; +import dark.SteamPower.renders.RenderGenerator; +import dark.SteamPower.steamengine.TileEntitySteamPiston; + +public class SteamClientProxy extends SteamProxy{ + + public void preInit() + { + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); + MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); + RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); + } + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); + ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); + ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); + } + public void postInit() + { + + } + +} diff --git a/src/common/dark/SteamPower/SteamMachines.java b/src/common/dark/SteamPower/SteamMachines.java new file mode 100644 index 00000000..97ec78f7 --- /dev/null +++ b/src/common/dark/SteamPower/SteamMachines.java @@ -0,0 +1,96 @@ +package dark.SteamPower; + +import java.util.Random; + +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityItem; +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.NBTTagCompound; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.boiler.TileEntityBoiler; +import dark.SteamPower.firebox.TileEntityFireBox; + +public class SteamMachines extends universalelectricity.prefab.BlockMachine +{ + + public SteamMachines(int par1) + { + super("machine", par1, Material.iron); + this.setRequiresSelfNotify(); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setHardness(1f); + this.setResistance(3f); + } + + @Override + public int damageDropped(int metadata) + { + return metadata; + } + + /** + * Called upon block activation (left or right click on the block.). The + * three integers represent x,y,z of the block. + */ + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) + { + TileEntity blockEntity = (TileEntity) world.getBlockTileEntity(x, y, z); + if (!world.isRemote && !player.isSneaking() && blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox) world.getBlockTileEntity(x, y, z); + player.openGui(SteamPowerMain.instance, 0, world, x, y, z); + return true; + } + + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + if (meta < 4) { return new TileEntityFireBox();} + if (meta == 4){return new TileEntityBoiler();} + return null; + } + + /** + * Called when the block is placed in the world. + */ + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) + { + int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = world.getBlockMetadata(x, y, z); + TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); + + if(ent instanceof TileEntityFireBox) + { + world.setBlockMetadata(x, y, z, angle); + } + } + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return ItemRenderHelperS.renderID; + } + +} diff --git a/src/common/dark/SteamPower/SteamPowerMain.java b/src/common/dark/SteamPower/SteamPowerMain.java new file mode 100644 index 00000000..5d01a020 --- /dev/null +++ b/src/common/dark/SteamPower/SteamPowerMain.java @@ -0,0 +1,101 @@ +package dark.SteamPower; + +import java.io.File; + +import net.minecraft.src.Block; +import net.minecraft.src.CraftingManager; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.oredict.ShapedOreRecipe; +import universalelectricity.prefab.network.PacketManager; +import cpw.mods.fml.common.Mod; +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.SidedProxy; +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.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +import dark.BasicUtilities.BasicUtilitiesMain; +import dark.SteamPower.steamengine.BlockSteamPiston; +import dark.SteamPower.steamengine.ItemSteamPiston; +import dark.SteamPower.steamengine.TileEntitytopGen; + +@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") +@NetworkMod(channels = + { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class SteamPowerMain +{ + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/SteamPower.cfg"))); + public static final String channel = "SPpack"; + public static String textureFile = "/dark/SteamPower/textures/"; + // Blocks and items + public static Block machine = new SteamMachines(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "MachinesID", 3030).value)).setBlockName("machine"); + public static Block engine = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamEngineID", 3031).value)).setBlockName("SteamEngien"); + public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "EngineItem", 30308).value)).setItemName("SteamEngine"); + + public static SteamPowerMain instance; + + @SidedProxy(clientSide = "dark.SteamPower.SteamClientProxy", serverSide = "dark.SteamPower.SteamProxy") + public static SteamProxy proxy; + // extra configs + public static int steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); + public static int boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); + public static int fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); + + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); + GameRegistry.registerBlock(machine); + GameRegistry.registerBlock(engine); + } + + @Init + public void load(FMLInitializationEvent evt) + { + proxy.init(); + GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); + // Names............... + LanguageRegistry.addName((new ItemStack(machine, 1, 4)), "Boiler"); + LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "FireBox"); + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); + + } + + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + proxy.postInit(); + try + { + // Boiler + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(machine, 1, 4), new Object[] + { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); + // Furnace + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(machine, 1, 0), new Object[] + { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); + // SteamPiston + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] + { "GGG", "VPV", "@T@", + 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), + 'G', BasicUtilitiesMain.rod, '@', "plateSteel", + 'P', Block.pistonBase, + 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), + 'M', "motor" })); + } + catch (Exception e) + { + e.printStackTrace(); + System.out.print("UE based recipes not loaded"); + } + } + +} diff --git a/src/common/dark/SteamPower/SteamProxy.java b/src/common/dark/SteamPower/SteamProxy.java new file mode 100644 index 00000000..ba73d8fc --- /dev/null +++ b/src/common/dark/SteamPower/SteamProxy.java @@ -0,0 +1,67 @@ +package dark.SteamPower; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import dark.BasicUtilities.mechanical.TileEntityGen; +import dark.SteamPower.boiler.TileEntityBoiler; +import dark.SteamPower.firebox.ContainerFireBox; +import dark.SteamPower.firebox.GUIFireBox; +import dark.SteamPower.firebox.TileEntityFireBox; +import dark.SteamPower.steamengine.TileEntitySteamPiston; + +public class SteamProxy implements IGuiHandler{ + + public void preInit() + { + + } + public void init() + { + GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); + GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); + GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); + + } + 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) + { + case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + //case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + //case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); + } + } + + 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) + { + case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); + //default: return new ContainerFake(player.inventory, (IInventory) tileEntity); + } + } + + return null; + } +} diff --git a/src/common/dark/SteamPower/boiler/TileEntityBoiler.java b/src/common/dark/SteamPower/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..6553f1e1 --- /dev/null +++ b/src/common/dark/SteamPower/boiler/TileEntityBoiler.java @@ -0,0 +1,266 @@ +package dark.SteamPower.boiler; +import net.minecraft.src.Block; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.prefab.network.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; + +import dark.BasicUtilities.api.IProducer; +import dark.BasicUtilities.api.IStorageTank; +import dark.BasicUtilities.api.Liquid; +import dark.BasicUtilities.api.MHelper; +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.SteamPowerMain; + +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,IProducer, IStorageTank +{ + public int steam = 0; + public int water = 0; + public int heat = 0; + public int hullHeat = 0; + public int heatMax = 4500; + public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; + public int tankCount = 0; + public int tickCount = 0; + + //----------------------------- + //Update stuff + //----------------------------- + @Override + public void updateEntity() + { + //update connection list used for rendering + this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); + this.tankCount = 0; + for(int i =0; i < connectedBlocks.length; i++) + { + if(connectedBlocks[i] != null) + { + tankCount++; + } + }//end connection update + if(tickCount++ >= 10 && !worldObj.isRemote) + { + tickCount = 0; + + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if(ent instanceof IProducer && ((IProducer) ent).canProduceLiquid(Liquid.HEAT, ForgeDirection.UP)) + { + this.heat = (int) Math.min(((IProducer)ent).onProduceLiquid(Liquid.HEAT, 250, ForgeDirection.UP)+this.heat,4500); + }else + if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) + { + this.heat = Math.min(90+heat,2000); + } + if(hullHeat < 10000) + { + int mHeat = 10000 - hullHeat; + int hHeat = mHeat - Math.max((mHeat - this.heat),0); + hullHeat = Math.min(hullHeat + hHeat,10000); + this.heat -=hHeat; + }else + { + if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + this.water--; + this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); + this.heat -= 2000; + } + this.hullHeat-=5; + } + this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); + this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); + } + super.updateEntity(); + } + //----------------------------- + //Liquid stuff + //----------------------------- + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) + { + if(type == Liquid.WATER) + { + if(this.water < this.getLiquidCapacity(Liquid.WATER)) + { + int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); + this.water += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } + }else + if(type == Liquid.STEAM) + { + if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); + this.steam += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); + if( te instanceof IStorageTank) + { + return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); + } + } + } + return vol; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { + if(type == Liquid.WATER) + { + return true; + }else + if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) + { + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return 14; + }else + if(type == Liquid.STEAM) + { + return 140; + } + return 0; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) + { + //TODO setup the actual math for this + if(vol < this.steam) + { + this.steam -= vol; + return vol; + }else + if(this.steam >= 1) + { + this.steam -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.STEAM) + { + return 100; + } + return 0; + } + //----------------------------- + //Data + //----------------------------- + public Object[] getSendData() + { + return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; + } + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try{ + this.water = dataStream.readInt(); + this.steam = dataStream.readInt(); + this.heat = dataStream.readInt(); + this.hullHeat = dataStream.readInt(); + }catch(Exception e) + { + e.printStackTrace(); + } + + } + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("water", this.water); + par1NBTTagCompound.setInteger("steam", this.steam); + par1NBTTagCompound.setInteger("heat", this.heat); + par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.water = par1NBTTagCompound.getInteger("water"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.heat = par1NBTTagCompound.getInteger("heat"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + @Override + public boolean needUpdate() + { + return false; + } + @Override + public int getSizeInventory() + { + return 0; + } + @Override + public String getChannel() + { + return SteamPowerMain.channel; + } + + +} diff --git a/src/common/dark/SteamPower/firebox/ContainerFireBox.java b/src/common/dark/SteamPower/firebox/ContainerFireBox.java new file mode 100644 index 00000000..aa3d7c01 --- /dev/null +++ b/src/common/dark/SteamPower/firebox/ContainerFireBox.java @@ -0,0 +1,46 @@ +package dark.SteamPower.firebox; + +import net.minecraft.src.Container; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Slot; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** + * Called to transfer a stack from one inventory to the other eg. when shift clicking. + */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/src/common/dark/SteamPower/firebox/GUIFireBox.java b/src/common/dark/SteamPower/firebox/GUIFireBox.java new file mode 100644 index 00000000..ec18fc11 --- /dev/null +++ b/src/common/dark/SteamPower/firebox/GUIFireBox.java @@ -0,0 +1,93 @@ +package dark.SteamPower.firebox; + +import java.text.DecimalFormat; + +import net.minecraft.src.GuiContainer; +import net.minecraft.src.InventoryPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.StatCollector; + +import org.lwjgl.opengl.GL11; + +import dark.SteamPower.SteamPowerMain; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** + * Draw the foreground layer for the GuiContainer (everything in front of the items) + */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if(!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if(tileEntity.storedItems[0] != null) + { + if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Fuel"; + } + else{ + if(tileEntity.generateRate*20 < 20) + { + displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate*20)); + } + } + } + this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** + * Draw the background layer for the GuiContainer (everything behind the items) + */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + public static String getWattDisplay(int watts) + { + String displayWatt; + if(watts > 1000) + { + displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; + } + else + { + displayWatt = watts+" KJ"; + } + + return displayWatt; + } + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/common/dark/SteamPower/firebox/TileEntityFireBox.java b/src/common/dark/SteamPower/firebox/TileEntityFireBox.java new file mode 100644 index 00000000..dfc98f6b --- /dev/null +++ b/src/common/dark/SteamPower/firebox/TileEntityFireBox.java @@ -0,0 +1,268 @@ +package dark.SteamPower.firebox; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.IInventory; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.common.ISidedInventory; +import universalelectricity.prefab.network.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; + +import dark.BasicUtilities.api.IProducer; +import dark.BasicUtilities.api.Liquid; +import dark.BasicUtilities.api.MHelper; +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.SteamPowerMain; +import dark.SteamPower.boiler.TileEntityBoiler; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IProducer +{ + // max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = + { null, null, null, null, null, null }; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + // Current generation rate based on hull heat. In TICKS. + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + + public void updateEntity() + { + super.updateEntity(); + if (count++ >= 10) + { + count = 0; + addConnection(); + if (!worldObj.isRemote) + { + sharCoal(); + } + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if (blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + if (!this.worldObj.isRemote) + { + + maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits * 10); + + // The top slot is for recharging items. Check if the item is a + // electric item. If so, recharge it. + if (this.storedItems[0] != null && isConnected) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if (this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int) (this.generateRate * 20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + // Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime--; + if (isConnected) + { + this.generateRate = Math.min(this.generateRate + Math.min((this.generateRate) + 1, 1), this.maxGenerateRate / 10); + } + } + // Loose heat when the generator is not connected or if there is no + // coal in the inventory. + if (this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate - 5, 0); + } + } + } + + // gets all connected fireBoxes and shares its supply of coal + public void sharCoal() + { + for (int i = 0; i < 6; i++) + { + + if (connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if (this.storedItems[0] != null) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) + { + if (connectedConsumer.storedItems[0] != null) + { + if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize) / 2; + if (this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); + connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; + this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(), 1, this.storedItems[0].getItemDamage()); + this.storedItems[0].stackSize -= 1; + } + } + } + } + } + + } + + public void addConnection() + { + connectedUnits = 0; + TileEntity[] aEntity = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); + for (int i = 0; i < 6; i++) + { + + if (aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity[i]; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + + /** + * Reads a tile entity from NBT. + */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int) this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int) this.generateRate); + } + + @Override + public String getInvName() + { + return "FireBox"; + } + + public float onProduceHeat(float jouls, ForgeDirection side) + { + if (side == ForgeDirection.UP) { return Math.min(generateRate, jouls); } + return 0; + } + + @Override + public Object[] getSendData() + { + return new Object[] + { (int) generateRate, (int) itemCookTime }; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) + { + try + { + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + } + + @Override + public int getStartInventorySide(ForgeDirection side) + { + return 0; + } + + @Override + public int getSizeInventorySide(ForgeDirection side) + { + return 1; + } + + @Override + public String getChannel() + { + return SteamPowerMain.channel; + } + + @Override + public int getSizeInventory() + { + return 1; + } + + @Override + public boolean needUpdate() + { + return true; + } + + @Override + public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) + { + if(type == Liquid.HEAT){return Math.min(this.generateRate,maxVol);} + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) + { + if(type == Liquid.HEAT){return true;} + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) + { + return 0; + } +} diff --git a/src/common/dark/SteamPower/mcmod.info b/src/common/dark/SteamPower/mcmod.info new file mode 100644 index 00000000..922b39f5 --- /dev/null +++ b/src/common/dark/SteamPower/mcmod.info @@ -0,0 +1,21 @@ +[ +{ + "modid": "SteamPower", + "name": "Steam Power", + "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", + "version": "1.8", + "mcversion": "1.3.2", + "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", + "updateUrl": "", + "authors": [ + "DarkGuardsman" + ], + "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", + "logoFile": "", + "screenshots": [ + ], + "parent":"", + "dependencies": ["UE","BasicPipes" + ] +} +] \ No newline at end of file diff --git a/src/common/dark/SteamPower/renders/ModelCenterTank.java b/src/common/dark/SteamPower/renders/ModelCenterTank.java new file mode 100644 index 00000000..84f2b498 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelCenterTank.java @@ -0,0 +1,53 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCenterTank extends ModelBase +{ + + ModelRenderer Block; + + public ModelCenterTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //block + Block = new ModelRenderer(this, 0, 0); + Block.addBox(0F, 0F, 0F, 16, 16, 16); + Block.setRotationPoint(-8F, 8F, -8F); + Block.setTextureSize(128, 32); + Block.mirror = true; + setRotation(Block, 0F, 0F, 0F); + } + public void renderBlock(float f5) + { + Block.render(f5); + } + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/common/dark/SteamPower/renders/ModelCornerTank.java b/src/common/dark/SteamPower/renders/ModelCornerTank.java new file mode 100644 index 00000000..0e1db274 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelCornerTank.java @@ -0,0 +1,95 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelCornerTank extends ModelBase +{ + //Corner + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape4; + + public ModelCornerTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + + //corner + Shape1 = new ModelRenderer(this, 0, 1); + Shape1.addBox(0F, 0F, 0F, 1, 16, 20); + Shape1.setRotationPoint(7F, 8F, -7F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, -0.7853982F, 0F); + Shape2 = new ModelRenderer(this, 44, 0); + Shape2.addBox(0F, 0F, 0F, 2, 16, 2); + Shape2.setRotationPoint(-8F, 8F, 6F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 44, 0); + Shape3.addBox(0F, 0F, 0F, 2, 16, 2); + Shape3.setRotationPoint(6F, 8F, -8F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 44); + Shape6.addBox(0F, 0F, 0F, 1, 15, 13); + Shape6.setRotationPoint(-8F, 9F, -7F); + Shape6.setTextureSize(128, 128); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 0, 73); + Shape7.addBox(0F, 0F, 0F, 14, 15, 1); + Shape7.setRotationPoint(-8F, 9F, -8F); + Shape7.setTextureSize(128, 128); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 92); + Shape4.addBox(0F, 0F, 0F, 16, 1, 16); + Shape4.setRotationPoint(-8F, 8F, -8F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + } + public void renderCorner(float f5) + { + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape4.render(f5); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/common/dark/SteamPower/renders/ModelEngine.java b/src/common/dark/SteamPower/renders/ModelEngine.java new file mode 100644 index 00000000..a5cf4b15 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelEngine.java @@ -0,0 +1,109 @@ +// Date: 8/24/2012 1:44:37 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer Base; + ModelRenderer top; + ModelRenderer TopPiston; + ModelRenderer BottomPiston; + ModelRenderer center; + ModelRenderer C1; + ModelRenderer C2; + + public ModelEngine() + { + textureWidth = 64; + textureHeight = 64; + + Base = new ModelRenderer(this, 0, 20); + Base.addBox(-6F, 0F, -6F, 12, 8, 12); + Base.setRotationPoint(0F, 16F, 0F); + Base.setTextureSize(64, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + top = new ModelRenderer(this, 0, 0); + top.addBox(-6F, 0F, -6F, 12, 8, 12); + top.setRotationPoint(0F, -8F, 0F); + top.setTextureSize(64, 64); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + TopPiston = new ModelRenderer(this, 0, 52); + TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + TopPiston.setRotationPoint(0F, 0F, 0F); + TopPiston.setTextureSize(64, 64); + TopPiston.mirror = true; + setRotation(TopPiston, 0F, 0F, 0F); + BottomPiston = new ModelRenderer(this, 16, 52); + BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + BottomPiston.setRotationPoint(0F, 8F, 0F); + BottomPiston.setTextureSize(64, 64); + BottomPiston.mirror = true; + setRotation(BottomPiston, 0F, 0F, 0F); + center = new ModelRenderer(this, 32, 52); + center.addBox(-3F, 0F, -3F, 6, 6, 6); + //center.setRotationPoint(0F, 5F, 0F); + center.setTextureSize(64, 64); + center.mirror = true; + setRotation(center, 0F, 0F, 0F); + C1 = new ModelRenderer(this, 0, 41); + C1.addBox(-2F, -3F, 0F, 4, 6, 3); + C1.setRotationPoint(0F, 8F, 3F); + C1.setTextureSize(64, 64); + C1.mirror = true; + setRotation(C1, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 15, 41); + C2.addBox(-2F, -3F, -3F, 4, 6, 3); + C2.setRotationPoint(0F, 8F, -3F); + C2.setTextureSize(64, 64); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + //renderBot(f5); + //renderTop(f5); + } + public void renderBot(float f5) + { + Base.render(f5); + BottomPiston.render(f5); + } + public void renderTop(float f5) + { + top.render(f5); + TopPiston.render(f5); + C1.render(f5); + C2.render(f5); + } + public void renderMid(float f5,float p) + { + + center.setRotationPoint(0F, p, 0F); + center.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/common/dark/SteamPower/renders/ModelFurnace.java b/src/common/dark/SteamPower/renders/ModelFurnace.java new file mode 100644 index 00000000..ba6c5f68 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelFurnace.java @@ -0,0 +1,77 @@ +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelFurnace extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public ModelFurnace() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(64, 32); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(64, 32); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(64, 32); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 27); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(64, 32); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + genRender(f5); + } + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/common/dark/SteamPower/renders/ModelGearPiston.java b/src/common/dark/SteamPower/renders/ModelGearPiston.java new file mode 100644 index 00000000..6a7e7de5 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelGearPiston.java @@ -0,0 +1,380 @@ +// Date: 10/1/2012 12:32:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGearPiston extends ModelBase +{ + //fields + ModelRenderer PistonCover; + ModelRenderer RSpiston; + ModelRenderer LSpiston; + ModelRenderer RodPiston; + ModelRenderer Base; + ModelRenderer Front; + ModelRenderer BackCC; + ModelRenderer RightPipe; + ModelRenderer FrontCC; + ModelRenderer LeftCC; + ModelRenderer FrontPipe; + ModelRenderer Right; + ModelRenderer RightCC; + ModelRenderer Back; + ModelRenderer BackPipe; + ModelRenderer Left; + ModelRenderer LeftPipe; + ModelRenderer RigthF4; + ModelRenderer LeftF4; + ModelRenderer LeftF3; + ModelRenderer LeftF2; + ModelRenderer LeftF1; + ModelRenderer RigthF3; + ModelRenderer RigthF2; + ModelRenderer RigthF1; + ModelRenderer RigthGCC; + ModelRenderer RightSlide; + ModelRenderer midRod; + ModelRenderer RightRod2; + ModelRenderer LeftGCC; + ModelRenderer LeftRod2; + ModelRenderer LeftSlide2; + + public ModelGearPiston() + { + textureWidth = 128; + textureHeight = 128; + + PistonCover = new ModelRenderer(this, 13, 31); + PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); + PistonCover.setRotationPoint(-3F, 20F, 0F); + PistonCover.setTextureSize(128, 128); + PistonCover.mirror = true; + setRotation(PistonCover, 0F, 0F, 0F); + RSpiston = new ModelRenderer(this, 0, 32); + RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); + RSpiston.setRotationPoint(1F, 3F, 0F); + RSpiston.setTextureSize(128, 128); + RSpiston.mirror = true; + setRotation(RSpiston, 0F, 0F, 0F); + LSpiston = new ModelRenderer(this, 0, 32); + LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); + LSpiston.setRotationPoint(2F, 3F, 0F); + LSpiston.setTextureSize(128, 128); + LSpiston.mirror = true; + setRotation(LSpiston, 0F, 0F, 0F); + RodPiston = new ModelRenderer(this, 0, 59); + RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); + RodPiston.setRotationPoint(0F, 8F, 0F); + RodPiston.setTextureSize(128, 128); + RodPiston.mirror = true; + setRotation(RodPiston, 0F, 0F, 0F); + Base = new ModelRenderer(this, 12, 49); + Base.addBox(0F, 0F, 0F, 10, 5, 10); + Base.setRotationPoint(-5F, 19F, -5F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Front = new ModelRenderer(this, 28, 68); + Front.addBox(-3F, 0F, 0F, 6, 12, 1); + Front.setRotationPoint(0F, 12F, -7F); + Front.setTextureSize(128, 128); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + BackCC = new ModelRenderer(this, 43, 68); + BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); + BackCC.setRotationPoint(0F, 16F, 6F); + BackCC.setTextureSize(128, 128); + BackCC.mirror = true; + setRotation(BackCC, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 12, 87); + RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); + RightPipe.setRotationPoint(-6F, 14F, 0F); + RightPipe.setTextureSize(128, 128); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + FrontCC = new ModelRenderer(this, 43, 68); + FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); + FrontCC.setRotationPoint(0F, 16F, -7F); + FrontCC.setTextureSize(128, 128); + FrontCC.mirror = true; + setRotation(FrontCC, 0F, 0F, 0F); + LeftCC = new ModelRenderer(this, 43, 74); + LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); + LeftCC.setRotationPoint(7F, 16F, 0F); + LeftCC.setTextureSize(128, 128); + LeftCC.mirror = true; + setRotation(LeftCC, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 28, 82); + FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); + FrontPipe.setRotationPoint(0F, 14F, -6F); + FrontPipe.setTextureSize(128, 128); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + Right = new ModelRenderer(this, 12, 68); + Right.addBox(0F, 0F, -3F, 1, 12, 6); + Right.setRotationPoint(-7F, 12F, 0F); + Right.setTextureSize(128, 128); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + RightCC = new ModelRenderer(this, 43, 74); + RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); + RightCC.setRotationPoint(-7F, 16F, 0F); + RightCC.setTextureSize(128, 128); + RightCC.mirror = true; + setRotation(RightCC, 0F, 0F, 0F); + Back = new ModelRenderer(this, 28, 68); + Back.addBox(-3F, 0F, 0F, 6, 12, 1); + Back.setRotationPoint(0F, 12F, 6F); + Back.setTextureSize(128, 128); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 28, 82); + BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); + BackPipe.setRotationPoint(0F, 14F, 6F); + BackPipe.setTextureSize(128, 128); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + Left = new ModelRenderer(this, 12, 68); + Left.addBox(0F, 0F, -3F, 1, 12, 6); + Left.setRotationPoint(6F, 12F, 0F); + Left.setTextureSize(128, 128); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 12, 87); + LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); + LeftPipe.setRotationPoint(6F, 14F, 0F); + LeftPipe.setTextureSize(128, 128); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + RigthF4 = new ModelRenderer(this, 0, 56); + RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); + RigthF4.setRotationPoint(-8F, 0F, 0F); + RigthF4.setTextureSize(128, 128); + RigthF4.mirror = true; + setRotation(RigthF4, 0F, 0F, 0F); + LeftF4 = new ModelRenderer(this, 0, 56); + LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); + LeftF4.setRotationPoint(8F, 0F, 0F); + LeftF4.setTextureSize(128, 128); + LeftF4.mirror = true; + setRotation(LeftF4, 0.7853982F, 0F, 0F); + LeftF3 = new ModelRenderer(this, 0, 56); + LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); + LeftF3.setRotationPoint(8F, 0F, 0F); + LeftF3.setTextureSize(128, 128); + LeftF3.mirror = true; + setRotation(LeftF3, 0.7853982F, 0F, 0F); + LeftF2 = new ModelRenderer(this, 0, 56); + LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); + LeftF2.setRotationPoint(8F, 0F, 0F); + LeftF2.setTextureSize(128, 128); + LeftF2.mirror = true; + setRotation(LeftF2, 0.7853982F, 0F, 0F); + LeftF1 = new ModelRenderer(this, 0, 56); + LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); + LeftF1.setRotationPoint(8F, 0F, 0F); + LeftF1.setTextureSize(128, 128); + LeftF1.mirror = true; + setRotation(LeftF1, 0.7853982F, 0F, 0F); + RigthF3 = new ModelRenderer(this, 0, 56); + RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); + RigthF3.setRotationPoint(-8F, 0F, 0F); + RigthF3.setTextureSize(128, 128); + RigthF3.mirror = true; + setRotation(RigthF3, 0F, 0F, 0F); + RigthF2 = new ModelRenderer(this, 0, 56); + RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); + RigthF2.setRotationPoint(-8F, 0F, 0F); + RigthF2.setTextureSize(128, 128); + RigthF2.mirror = true; + setRotation(RigthF2, 0F, 0F, 0F); + RigthF1 = new ModelRenderer(this, 0, 56); + RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); + RigthF1.setRotationPoint(-8F, 0F, 0F); + RigthF1.setTextureSize(128, 128); + RigthF1.mirror = true; + setRotation(RigthF1, 0F, 0F, 0F); + RigthGCC = new ModelRenderer(this, 12, 18); + RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); + RigthGCC.setRotationPoint(-6F, 0F, 0F); + RigthGCC.setTextureSize(128, 128); + RigthGCC.mirror = true; + setRotation(RigthGCC, 0F, 0F, 0F); + RightSlide = new ModelRenderer(this, 0, 44); + RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); + RightSlide.setRotationPoint(-4F, 0F, 0F); + RightSlide.setTextureSize(128, 128); + RightSlide.mirror = true; + setRotation(RightSlide, 0F, 0F, 0F); + LeftSlide2 = new ModelRenderer(this, 0, 27); + LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); + LeftSlide2.setRotationPoint(-3F, 0F, 0F); + LeftSlide2.setTextureSize(128, 128); + LeftSlide2.mirror = true; + setRotation(LeftSlide2, 0F, 0F, 0F); + RightRod2 = new ModelRenderer(this, 0, 20); + RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); + RightRod2.setRotationPoint(-6F, 0F, 0F); + RightRod2.setTextureSize(128, 128); + RightRod2.mirror = true; + setRotation(RightRod2, 0F, 0F, 0F); + LeftGCC = new ModelRenderer(this, 24, 18); + LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); + LeftGCC.setRotationPoint(7F, 0F, 0F); + LeftGCC.setTextureSize(128, 128); + LeftGCC.mirror = true; + setRotation(LeftGCC, 0.7853982F, 0F, 0F); + LeftRod2 = new ModelRenderer(this, 0, 20); + LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); + LeftRod2.setRotationPoint(7F, 0F, 0F); + LeftRod2.setTextureSize(128, 128); + LeftRod2.mirror = true; + setRotation(LeftRod2, 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) + { + Base.render(f5); + PistonCover.render(f5); + + } + public void renderGear(float f5) + { + //Rod connectors + LeftF4.render(f5); + LeftF3.render(f5); + LeftF2.render(f5); + LeftF1.render(f5); + RigthF4.render(f5); + RigthF3.render(f5); + RigthF2.render(f5); + RigthF1.render(f5); + RigthGCC.render(f5); + LeftGCC.render(f5); + } + public void renderR(float f5,int pos) + { + 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); + //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); + midRod.render(f5); + RightRod2.render(f5); + LeftRod2.render(f5); + LeftSlide2.render(f5); + } + public void renderLeft(float f5) + { + Left.render(f5); + LeftPipe.render(f5); + LeftCC.render(f5); + } + public void renderRight(float f5) + { + Right.render(f5); + RightCC.render(f5); + RightPipe.render(f5); + } + public void renderFront(float f5) + { + Front.render(f5); + FrontCC.render(f5); + FrontPipe.render(f5); + } + public void renderBack(float f5) + { + Back.render(f5); + BackPipe.render(f5); + BackCC.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/common/dark/SteamPower/renders/ModelGenerator.java b/src/common/dark/SteamPower/renders/ModelGenerator.java new file mode 100644 index 00000000..e37f6570 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelGenerator.java @@ -0,0 +1,131 @@ +// Date: 8/27/2012 3:20:21 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelGenerator extends ModelBase +{ + //fields + ModelRenderer BasePlate; + ModelRenderer LeftConnection; + ModelRenderer RightConnection; + ModelRenderer Mid; + ModelRenderer Mid2; + ModelRenderer front; + ModelRenderer front2; + ModelRenderer front3; + ModelRenderer Mid3; + ModelRenderer FrontConnector; + + public ModelGenerator() + { + textureWidth = 128; + textureHeight = 128; + + BasePlate = new ModelRenderer(this, 0, 0); + BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); + BasePlate.setRotationPoint(0F, 23F, 0F); + BasePlate.setTextureSize(128, 128); + BasePlate.mirror = true; + setRotation(BasePlate, 0F, 0F, 0F); + LeftConnection = new ModelRenderer(this, 0, 112); + LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); + LeftConnection.setRotationPoint(-6F, 16F, 0F); + LeftConnection.setTextureSize(128, 128); + LeftConnection.mirror = true; + setRotation(LeftConnection, 0F, 0F, 0F); + RightConnection = new ModelRenderer(this, 12, 112); + RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); + RightConnection.setRotationPoint(6F, 16F, 0F); + RightConnection.setTextureSize(128, 128); + RightConnection.mirror = true; + setRotation(RightConnection, 0F, 0F, 0F); + Mid = new ModelRenderer(this, 0, 29); + Mid.addBox(-4F, 0F, -6F, 8, 12, 12); + Mid.setRotationPoint(0F, 10F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Mid2 = new ModelRenderer(this, 0, 53); + Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); + Mid2.setRotationPoint(0F, 12F, 0F); + Mid2.setTextureSize(128, 128); + Mid2.mirror = true; + setRotation(Mid2, 0F, 0F, 0F); + front = new ModelRenderer(this, 20, 15); + front.addBox(-2F, -4F, 0F, 4, 8, 1); + front.setRotationPoint(0F, 16F, -7F); + front.setTextureSize(128, 128); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + front2 = new ModelRenderer(this, 0, 24); + front2.addBox(-4F, -2F, 0F, 8, 4, 1); + front2.setRotationPoint(0F, 16F, -7F); + front2.setTextureSize(128, 128); + front2.mirror = true; + setRotation(front2, 0F, 0F, 0F); + front3 = new ModelRenderer(this, 0, 16); + front3.addBox(-3F, -3F, 0F, 6, 6, 1); + front3.setRotationPoint(0F, 16F, -7F); + front3.setTextureSize(128, 128); + front3.mirror = true; + setRotation(front3, 0F, 0F, 0F); + Mid3 = new ModelRenderer(this, 40, 29); + Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); + Mid3.setRotationPoint(0F, 12F, 0F); + Mid3.setTextureSize(128, 128); + Mid3.mirror = true; + setRotation(Mid3, 0F, 0F, 0F); + FrontConnector = new ModelRenderer(this, 0, 120); + FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); + FrontConnector.setRotationPoint(0F, 14F, -6F); + FrontConnector.setTextureSize(128, 128); + FrontConnector.mirror = true; + setRotation(FrontConnector, 0F, 0F, 0F); + } + + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + + } + public void RenderMain(float f5) + { + BasePlate.render(f5); + Mid.render(f5); + Mid2.render(f5); + front.render(f5); + front2.render(f5); + front3.render(f5); + Mid3.render(f5); + FrontConnector.render(f5); + } + public void RenderLeft(float f5) + { + LeftConnection.render(f5); + } + public void RenderRight(float f5) + { + RightConnection.render(f5); + } + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/common/dark/SteamPower/renders/ModelTank.java b/src/common/dark/SteamPower/renders/ModelTank.java new file mode 100644 index 00000000..f317b234 --- /dev/null +++ b/src/common/dark/SteamPower/renders/ModelTank.java @@ -0,0 +1,148 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + + + + + + +package dark.SteamPower.renders; + +import net.minecraft.src.Entity; +import net.minecraft.src.ModelBase; +import net.minecraft.src.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //One Block Tank + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) + { + super.render(entity, f, f1, f2, f3, f4, f5); + setRotationAngles(f, f1, f2, f3, f4, f5, entity); + } + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/common/dark/SteamPower/renders/RenderBoiler.java b/src/common/dark/SteamPower/renders/RenderBoiler.java new file mode 100644 index 00000000..97f70387 --- /dev/null +++ b/src/common/dark/SteamPower/renders/RenderBoiler.java @@ -0,0 +1,63 @@ +package dark.SteamPower.renders; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import dark.BasicUtilities.api.MHelper; +import dark.SteamPower.SteamPowerMain; +import dark.SteamPower.boiler.TileEntityBoiler; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + private ModelCenterTank model2; + private ModelCornerTank model3; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + model2 = new ModelCenterTank(par1); + model3 = new ModelCornerTank(par1); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; + int meta = 0; + if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) + { + bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); + model.generalRender(0.0625F); + } + else + if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) + { + bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); + model2.renderBlock(0.0625F); + } + else + { + int corner = MHelper.corner(tileEntity); + bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); + switch(corner) + { + case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; + case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; + } + model3.renderCorner(0.0625f); + + } + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/common/dark/SteamPower/renders/RenderFurnace.java b/src/common/dark/SteamPower/renders/RenderFurnace.java new file mode 100644 index 00000000..fb64f737 --- /dev/null +++ b/src/common/dark/SteamPower/renders/RenderFurnace.java @@ -0,0 +1,39 @@ +package dark.SteamPower.renders; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import dark.SteamPower.SteamPowerMain; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelFurnace model; + + public RenderFurnace() + { + model = new ModelFurnace(); + } + + + @Override + public void renderTileEntityAt(TileEntity te, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = te.worldObj.getBlockMetadata(te.xCoord, te.yCoord, te.zCoord); + switch(meta) + { + case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; + case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/common/dark/SteamPower/renders/RenderGearPiston.java b/src/common/dark/SteamPower/renders/RenderGearPiston.java new file mode 100644 index 00000000..1a253d19 --- /dev/null +++ b/src/common/dark/SteamPower/renders/RenderGearPiston.java @@ -0,0 +1,51 @@ +package dark.SteamPower.renders; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import dark.SteamPower.SteamPowerMain; +import dark.SteamPower.steamengine.TileEntitySteamPiston; + +public class RenderGearPiston extends TileEntitySpecialRenderer +{ + private ModelGearPiston model; + + public RenderGearPiston() + { + model = new ModelGearPiston(); + } + public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + + 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.renderGear(0.0625F); + model.renderR(0.0625F,tileEntity.pos); + model.renderBody(0.0625F); + model.renderBack(0.0625F); + model.renderFront(0.0625F); + model.renderLeft(0.0625F); + model.renderRight(0.0625F); + GL11.glPopMatrix(); + } + + + @Override + public void renderTileEntityAt(TileEntity var1, double d, double d1, + double d2, float d3) { + this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); + + } + +} \ No newline at end of file diff --git a/src/common/dark/SteamPower/renders/RenderGenerator.java b/src/common/dark/SteamPower/renders/RenderGenerator.java new file mode 100644 index 00000000..b9356846 --- /dev/null +++ b/src/common/dark/SteamPower/renders/RenderGenerator.java @@ -0,0 +1,39 @@ +package dark.SteamPower.renders; + +import net.minecraft.src.TileEntity; +import net.minecraft.src.TileEntitySpecialRenderer; + +import org.lwjgl.opengl.GL11; + +import dark.SteamPower.SteamPowerMain; + +public class RenderGenerator extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGenerator model; + + public RenderGenerator() + { + model = new ModelGenerator(); + } + + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { + bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch(meta) + { + case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; + case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; + case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; + case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; + } + model.RenderMain(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java b/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java new file mode 100644 index 00000000..4646e632 --- /dev/null +++ b/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java @@ -0,0 +1,138 @@ +package dark.SteamPower.steamengine; + +import java.util.Random; + +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; +import dark.SteamPower.SteamPowerMain; + +public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine +{ + + public BlockSteamPiston(int par1) + { + super("SteamEngine", par1, Material.iron); + + } + + @Override + public boolean onMachineActivated(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) + { + return false; + + } + + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, + EntityPlayer par5EntityPlayer) + { + int angle = MathHelper + .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) + { + par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); + } + else + { + par1World.setBlockAndMetadata(x, y, z, blockID, 0); + } + return true; + } + + public TileEntity createNewTileEntity(World var1) + { + return null; + } + + public void breakBlock(World world, int x, int y, int z, int par5, int par6) + { + super.breakBlock(world, x, y, z, par5, par6); + int meta = world.getBlockMetadata(x, y, z); + if (meta < 4) + { + if (world.getBlockId(x, y + 1, z) == this.blockID) + { + if (world.getBlockMetadata(x, y, z) > 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + else if (meta > 4) + { + if (world.getBlockId(x, y - 1, z) == this.blockID) + { + if (world.getBlockMetadata(x, y, z) < 4) + { + world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); + } + } + } + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public TileEntity createNewTileEntity(World world, int metadata) + { + if (metadata >= 0 && metadata < 4) { return new TileEntitySteamPiston(); } + if (metadata == 14) { return new TileEntitytopGen(); } + return null; + } + + public void onNeighborBlockChange(World par1World, int par2, int par3, + int par4, int par5) + { + int meta = par1World.getBlockMetadata(par2, par3, par4); + if (meta < 4) + { + if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + else + { + if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) + { + par1World.setBlockWithNotify(par2, par3, par4, 0); + } + } + } + + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return SteamPowerMain.itemEngine.shiftedIndex; + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3 + 1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isReplaceable()) + && (var6 == 0 || blocksList[var6].blockMaterial.isReplaceable()); + } +} diff --git a/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java b/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java new file mode 100644 index 00000000..f7a0cd14 --- /dev/null +++ b/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java @@ -0,0 +1,77 @@ +package dark.SteamPower.steamengine; + +import java.util.List; + +import net.minecraft.src.Block; +import net.minecraft.src.CreativeTabs; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.Material; +import net.minecraft.src.MathHelper; +import net.minecraft.src.World; +import dark.SteamPower.SteamPowerMain; + +public class ItemSteamPiston extends Item { + public ItemSteamPiston(int par1) { + super(par1); + this.maxStackSize = 5; + this.setCreativeTab(CreativeTabs.tabBlock); + this.setIconIndex(21); + } + + @Override + public void getSubItems(int par1, CreativeTabs par2CreativeTabs, + List par3List) { + par3List.add(new ItemStack(this, 1, 0)); + } + + @Override + public String getTextureFile() { + // TODO Auto-generated method stub + return SteamPowerMain.textureFile + "Items.png"; + } + + public boolean onItemUse(ItemStack stak, EntityPlayer player, World par3World, int x, int y, int z, int par7, float par8, float par9, float par10) + { + if (par7 != 1) + { + return false; + } + else + { + ++y; + Block piston = SteamPowerMain.engine; + + if (player.canPlayerEdit(x, y, z, par7, stak) && player.canPlayerEdit(x, y + 1, z, par7, stak)) + { + if (!piston.canPlaceBlockAt(par3World, x, y, z)) + { + return false; + } + else + { + int angle = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; + placeTwoHigh(par3World, x, y, z, angle, piston); + --stak.stackSize; + return true; + } + } + else + { + return false; + } + } + } + + public static void placeTwoHigh(World par0World, int par1, int par2, int par3, int angle, Block par5Block) + { + par0World.editingBlocks = true; + par0World.setBlockAndMetadataWithNotify(par1, par2+1, par3, par5Block.blockID, 14); + par0World.setBlockAndMetadataWithNotify(par1, par2, par3, par5Block.blockID, angle); + par0World.editingBlocks = false; + par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block.blockID); + par0World.notifyBlocksOfNeighborChange(par1, par2 + 1, par3, par5Block.blockID); + } + +} diff --git a/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java b/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java new file mode 100644 index 00000000..48991925 --- /dev/null +++ b/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java @@ -0,0 +1,346 @@ +package dark.SteamPower.steamengine; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.NBTTagCompound; +import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.prefab.network.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; + +import dark.BasicUtilities.api.IConsumer; +import dark.BasicUtilities.api.IProducer; +import dark.BasicUtilities.api.IForce; +import dark.BasicUtilities.api.Liquid; +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.SteamPowerMain; + +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,IConsumer,IProducer,IForce +{ + public int force = 0; + public int aForce = 0; + public int bForce = 0; + private int frictionLoad = 10; + public int steam = 0; + public int water = 0; + 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; + public int tCount = 0; + private ForgeDirection frontDir; + public TileEntity ff; + public TileEntity bb; + private int pWater = 0; + private int pSteam = 0; + private int pForce = 0; + public int pCount = 0; + public boolean running= false; + + @Override + public void updateEntity() + { + super.updateEntity(); + if(tickCount++ >=10) + {tickCount = 0; + //this.pos += 1; if(pos >= 8){pos = 0;} + //++tCount;if(tCount > 120){tCount = 0;} + + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; + + switch(meta) + { + case 0: nMeta = 2;break; + case 1: nMeta = 5;break; + case 2: nMeta = 3;break; + case 3: nMeta = 4;break; + } + frontDir = ForgeDirection.getOrientation(nMeta); + ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); + bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().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(!worldObj.isRemote) + { + if(this.runTime < 1 && this.steam > 0) + { + this.steam--; + this.runTime=60; + } + if(bb instanceof IForce) + { + if(((IForce) bb).canOutputSide(frontDir)) + { + this.bForce = ((IForce) bb).getForce(); + }else + if( bb instanceof TileEntitySteamPiston) + { + if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) + { + this.bForce = ((TileEntitySteamPiston) bb).getForce(); + } + } + else + { + this.bForce = 0; + } + } + if(this.runTime > 0) + { + genRate=Math.min(genRate + 1, 100); + this.runTime-=1; + this.force = Math.min(genRate * 10,1000); + this.aForce = Math.max(force - this.frictionLoad+bForce,0); + } + if(runTime == 0 && this.steam == 0) + { + genRate = Math.max(genRate--, 0); + force= Math.max(force-=10, 0);; + } + + if(ff instanceof IForce) + { + if(((IForce) ff).canInputSide(frontDir.getOpposite())) + { + ((IForce) ff).applyForce(this.aForce); + }else + { + + } + } + pWater = this.water; + pSteam = this.steam; + pForce = this.force; + + + } + } + } + + + //------------------- + //Liquid and mechanical stuff + //---------------- + @Override + public int getForceSide(ForgeDirection side) { + return aForce; + } + + @Override + public boolean canOutputSide(ForgeDirection side) { + if(frontDir.getOpposite() == side) + { + return true; + } + return false; + } + + @Override + public boolean canInputSide(ForgeDirection side) { + if(frontDir == side) + { + return true; + } + return false; + } + + @Override + public int applyForce(int force) { + this.bForce = force; + return aForce; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.WATER) + { + if(this.water > 0) + { + this.water -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return true; + } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) { + if(type == Liquid.WATER) + { + return 32; + } + return 0; + } + + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { + if(type == Liquid.STEAM) + { + int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); + this.steam += vol - rejectedSteam; + return rejectedSteam; + } + return 0; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { + if(type == Liquid.STEAM) + { + return true; + } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) { + if(type == Liquid.WATER) + { + return this.water; + }else + if(type == Liquid.STEAM) + { + return this.steam; + } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) { + if(type == Liquid.WATER) + { + return this.maxWater; + }else + if(type == Liquid.STEAM) + { + return this.maxSteam; + } + return 0; + } + //------------------- + //Data + //---------------- + public Object[] getSendData() + { + return new Object[]{steam,water,force,aForce,genRate,runTime}; + } + public boolean needUpdate() + { + if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) + { + return true; + } + return false; + } + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) { + try + { + this.steam = dataStream.readInt(); + this.water = dataStream.readInt(); + this.force = dataStream.readInt(); + this.aForce = dataStream.readInt(); + this.genRate= dataStream.readInt(); + this.runTime = dataStream.readInt(); + ++pCount; + } + catch(Exception e) + { + System.out.print("SteamPistonDataFail"); + e.printStackTrace(); + } + + } + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.runTime = par1NBTTagCompound.getInteger("time"); + this.genRate = par1NBTTagCompound.getInteger("gen"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.water = par1NBTTagCompound.getInteger("water"); + } + + /** + * Writes a tile entity to NBT. + */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("time", (int)this.runTime); + par1NBTTagCompound.setInteger("gen", (int)this.genRate); + par1NBTTagCompound.setInteger("steam", (int)this.steam); + par1NBTTagCompound.setInteger("water", (int)this.water); + + } + + + @Override + public int getAnimationPos() { + // TODO Auto-generated method stub + return this.pos; + } + + + @Override + public int getForce() { + // TODO Auto-generated method stub + return this.force; + } + public int getMeta() { + return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + } + + + @Override + public String getChannel() + { + return SteamPowerMain.channel; + } + + + @Override + public int getSizeInventory() + { + return 0; + } +} diff --git a/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java b/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java new file mode 100644 index 00000000..afdf94b9 --- /dev/null +++ b/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java @@ -0,0 +1,32 @@ +package dark.SteamPower.steamengine; + +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.SteamPowerMain; + +public class TileEntitytopGen extends TileEntityMachine { + + @Override + public Object[] getSendData() + { + return null; + } + + @Override + public boolean needUpdate() + { + return false; + } + + @Override + public String getChannel() + { + return SteamPowerMain.channel; + } + + @Override + public int getSizeInventory() + { + return 0; + } + +} diff --git a/src/minecraft/dark/SteamPower/textures/CornerTank.png b/src/minecraft/dark/SteamPower/textures/CornerTank.png new file mode 100644 index 0000000000000000000000000000000000000000..43e1ddefa731bd31873530ed97455fc68aa1b1e2 GIT binary patch literal 2658 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 literal 0 HcmV?d00001 diff --git a/src/minecraft/dark/SteamPower/textures/Furnace.png b/src/minecraft/dark/SteamPower/textures/Furnace.png new file mode 100644 index 0000000000000000000000000000000000000000..a3eca67538223cc56f945fffdaad118a9a913a85 GIT binary patch literal 1455 zcmds1i&N5h5dVVZGbIXNX=&J{Tn2cVhL4m6#K)!KnP!4`(Us*J3_KyQv#ZHc=gLmY zGhdmCg}t=I6z;ODFsL~TO?>oFQX zbyz4V8UPp+!hpFcYMnC^+7kbrSft2*k>K#WCZXgnJLo4bn! z>&|G{3z25oVcW@OY6}yTw|{-U2nE1WTo{QMlk-BSj>>TAb~GE|{#mluD)Z;t$9IXz z;pn=v{Obv*2i4eu#N1GuIr#5Lnad@W`qNrgs10GA*J*Zn?aQDQWd9>fRC0yGp)`v6 zA+b7%Ttq6kj@hj=F<;W=|K{KWy{_loyGsty@#4{(!t_DOxmVU-B-&3GpW(i4h=G}d zU;yA?ImiQG32^;3Cqy}K=vP_hHx~1-^TcC=TiF9d`)@fphfew8`R%tRO4= zWfkAfmC{um)XbPUJ~)|J9M7bySX3dQ@WZ_&$%+8jS`1Y0+S|{$FHhPF+y(^2fQAv#B zv-GK*Q_pDp!_&kb!EADa&)YNF{cO@QT6*8Kd*F^^zb!REw7XRvT`epT!=2;pllo2svo*M`d&7?>Ri_TOQrkbw z<{QO|iB&QuZ_^zpa!*fBm+$aUF}mXp?rA@*vN296sWg23eBwM4|Ca3abtyUgz%Wu! zYdp0Xh(raC)7{Z%!(6=?68W)z0O5vy#fZCADTJCjV ztuvkp$=DDoYCZ7k1UXM<5(dc1?P@7UV95@=8NxCrSQO*9 z5$@cn3-Gm*Q5|yK12+fi@3izr-cn8WCfd1LMaYdx%)Si%TwA(qITPrQNDa$mf~G3z z!WQ48Jx9xH@MFV?U0+C5`TLFrwh4Tcf?1Dg7ewxBqN+T*d167>tQz9J6L4cmr3?ey>q$hqM85 zg0Wd7+C45_&F z_Kt1Pp#TxK3*vQB<_Fk}3~~;hisPQ1wQ%p$=z@|P4AL7C4a`#5loUB_j1(=G2X%;i zczW-5oQfjQR0#MxG3FPOJb(GkfA7D)xA#2rc;~u_+Y@f6{oZe5YbQTv?)rTFbAF-? z2SXZ)tNz95pRYetc3f0`ef6GIm(v)!QunV>&0vpWU}E^<6|{|IO_JILrWc;9C(1+@ zyz$`|J-?bo%VDR9?`9KU{g*yB~knRujJdN6h8pnc+cq`egf;CH~&cdGz?YLS2Rb?jirf%92GFoNSkV9ieE* ztiZs*z|_DXkS&@ZnV31` zJqkOneZbPX^XL65JM|l*FJ&?Ut#sJ!oFL6pAfeR0z5cp?!Hc(14BO)vSDpLwsPMQJ zqZY$NmDsfm%hMRGt}u1Uui*FL1_jSAOXd*X!ZapPpqmU%A6T}91;_$P0D}(_-7r$> Z2lMyImjd>!kbead@^tlcS?83{1OS^U6FL9@ literal 0 HcmV?d00001 diff --git a/src/minecraft/dark/SteamPower/textures/Items.png b/src/minecraft/dark/SteamPower/textures/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5c5cafe657afcad99e6de3daa51e66d7c4b2a8 GIT binary patch literal 29075 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
lrdx^KPA8^8k`Zj?Lv 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 QOa#eGD}So~X!7lU0b{|gWB>pF literal 0 HcmV?d00001 diff --git a/src/minecraft/dark/SteamPower/textures/SteamGUI.png b/src/minecraft/dark/SteamPower/textures/SteamGUI.png new file mode 100644 index 0000000000000000000000000000000000000000..c68427369418297ae9a762b1f57959b01482cdf7 GIT binary patch literal 3750 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 literal 0 HcmV?d00001 diff --git a/src/minecraft/dark/SteamPower/textures/tankBlock.png b/src/minecraft/dark/SteamPower/textures/tankBlock.png new file mode 100644 index 0000000000000000000000000000000000000000..21b97d4c5a4126ae7d0dd46dcbe118bad20f6b75 GIT binary patch literal 2478 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 P3?%L8>gTe~DWM4fP^b7L literal 0 HcmV?d00001 From ab2afa98cd0d8b0ca8ace37f2e0080cd686d406e Mon Sep 17 00:00:00 2001 From: Henry Mao Date: Thu, 6 Dec 2012 04:00:24 -0800 Subject: [PATCH 107/115] Create README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..2ef60310 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Steam Power +========== + +Steam Power is a mod that brings the most powerful (but environmentally hazard) cheap coal power generators in all of Minecraft! Ever had too much coal? Too much lava? Well in Steam Power you can put all of those into use and generate a large amount of power! \ No newline at end of file From 72b65ab0254e440a90a218d58c33193c45df4cea Mon Sep 17 00:00:00 2001 From: Rseifert Date: Fri, 7 Dec 2012 12:49:50 -0500 Subject: [PATCH 108/115] remove 1.4.2 archive, Changed Boiler, FireBox Boiler is now its own block, and will later have upgraded version FireBox is now its own Block, and will have a liquid burning version, bio fuel version, and a lava buffer that can transfer more heat from lava without damaging the boiler I also made changes for the IReadOut interface from basic pipes --- .../src/common/basicpipes/BasicPipesMain.java | 221 ------- .../common/basicpipes/LTanks/ItemTank.java | 130 ---- .../basicpipes/LTanks/TileEntityLTank.java | 210 ------- 1.4.2/src/common/basicpipes/PipeProxy.java | 56 -- .../basicpipes/conductors/BlockPipe.java | 90 --- .../basicpipes/conductors/BlockRod.java | 83 --- .../basicpipes/conductors/ItemGuage.java | 114 ---- .../basicpipes/conductors/ItemParts.java | 62 -- .../basicpipes/conductors/ItemPipe.java | 130 ---- .../basicpipes/conductors/TileEntityPipe.java | 210 ------- .../basicpipes/conductors/TileEntityRod.java | 137 ----- .../basicpipes/machines/BlockMachine.java | 79 --- .../basicpipes/machines/BlockValve.java | 179 ------ .../basicpipes/machines/ItemMachine.java | 124 ---- .../common/basicpipes/machines/ItemValve.java | 126 ---- .../machines/TileEntityCondenser.java | 110 ---- .../basicpipes/machines/TileEntityPump.java | 140 ----- .../basicpipes/machines/TileEntityValve.java | 109 ---- 1.4.2/src/common/basicpipes/mcmod.info | 21 - .../src/common/basicpipes/pipes/api/Beam.java | 26 - .../basicpipes/pipes/api/IBeamProducer.java | 26 - .../basicpipes/pipes/api/IHeatProducer.java | 16 - .../basicpipes/pipes/api/ILiquidConsumer.java | 39 -- .../basicpipes/pipes/api/ILiquidProducer.java | 38 -- .../basicpipes/pipes/api/IMechanical.java | 36 -- .../basicpipes/pipes/api/IStorageTank.java | 5 - .../common/basicpipes/pipes/api/Liquid.java | 64 -- .../common/basicpipes/pipes/api/MHelper.java | 125 ---- 1.4.2/src/common/mcpmod.info | 17 - 1.4.2/src/common/steampower/BlockMachine.java | 239 -------- .../src/common/steampower/ContainerFake.java | 47 -- 1.4.2/src/common/steampower/ItemMachine.java | 65 -- .../src/common/steampower/SteamPowerMain.java | 153 ----- 1.4.2/src/common/steampower/SteamProxy.java | 67 -- .../common/steampower/TileEntityMachine.java | 220 ------- .../steampower/boiler/TileEntityBoiler.java | 249 -------- .../steampower/burner/ContainerFireBox.java | 42 -- .../steampower/burner/TileEntityFireBox.java | 214 ------- 1.4.2/src/common/steampower/mcmod.info | 21 - .../steampower/turbine/BlockGenerator.java | 68 -- .../steampower/turbine/BlockSteamPiston.java | 114 ---- .../common/steampower/turbine/ItemEngine.java | 112 ---- .../steampower/turbine/TileEntityGen.java | 185 ------ .../turbine/TileEntitySteamPiston.java | 330 ---------- .../steampower/turbine/TileEntitytopGen.java | 12 - .../basicpipes/ItemRenderHelper.java | 56 -- .../minecraft/basicpipes/ModelGearRod.java | 139 ----- .../minecraft/basicpipes/ModelLargePipe.java | 177 ------ 1.4.2/src/minecraft/basicpipes/ModelPipe.java | 93 --- 1.4.2/src/minecraft/basicpipes/ModelPump.java | 140 ----- .../minecraft/basicpipes/PipeClientProxy.java | 34 - .../minecraft/basicpipes/RenderGearRod.java | 49 -- .../src/minecraft/basicpipes/RenderPipe.java | 62 -- .../src/minecraft/basicpipes/RenderPump.java | 59 -- .../renderTank/ModelLiquidTank.java | 422 ------------- .../renderTank/ModelLiquidTankCorner.java | 133 ---- .../basicpipes/renderTank/RenderLTank.java | 71 --- 1.4.2/src/minecraft/mcp.png | Bin 6940 -> 0 bytes .../src/minecraft/steampower/GUIFireBox.java | 92 --- .../minecraft/steampower/GUISteamPiston.java | 79 --- 1.4.2/src/minecraft/steampower/GuiBoiler.java | 94 --- .../steampower/ItemRenderHelperS.java | 62 -- .../minecraft/steampower/ModelCenterTank.java | 53 -- .../minecraft/steampower/ModelCornerTank.java | 95 --- .../src/minecraft/steampower/ModelEngine.java | 109 ---- .../minecraft/steampower/ModelFurnace.java | 77 --- .../minecraft/steampower/ModelGenerator.java | 131 ---- 1.4.2/src/minecraft/steampower/ModelTank.java | 148 ----- .../minecraft/steampower/RenderBoiler.java | 62 -- .../minecraft/steampower/RenderFurnace.java | 37 -- .../minecraft/steampower/RenderGenerator.java | 37 -- .../steampower/SteamClientProxy.java | 34 - .../steampower/geared/ModelGearPiston.java | 381 ------------ .../steampower/geared/RenderGearPiston.java | 51 -- 1.4.2/src/minecraft/textures/BoilerGui.png | Bin 1900 -> 0 bytes 1.4.2/src/minecraft/textures/CornerTank.png | Bin 2658 -> 0 bytes 1.4.2/src/minecraft/textures/Engine.png | Bin 1033 -> 0 bytes 1.4.2/src/minecraft/textures/Furnace.png | Bin 1455 -> 0 bytes 1.4.2/src/minecraft/textures/GearRod.png | Bin 257 -> 0 bytes .../minecraft/textures/GearShaftPiston.png | Bin 706 -> 0 bytes 1.4.2/src/minecraft/textures/Generator.png | Bin 1423 -> 0 bytes 1.4.2/src/minecraft/textures/GrinderGUI.png | Bin 1284 -> 0 bytes 1.4.2/src/minecraft/textures/Items.png | Bin 29075 -> 0 bytes 1.4.2/src/minecraft/textures/SteamGUI.png | Bin 3750 -> 0 bytes 1.4.2/src/minecraft/textures/SteelPiston.png | Bin 1033 -> 0 bytes 1.4.2/src/minecraft/textures/blocks.png | Bin 22475 -> 0 bytes .../minecraft/textures/pipes/DefaultPipe.png | Bin 770 -> 0 bytes .../src/minecraft/textures/pipes/LavaPipe.png | Bin 3196 -> 0 bytes .../minecraft/textures/pipes/SixLavaPipe.png | Bin 796 -> 0 bytes .../minecraft/textures/pipes/SixOilPipe.png | Bin 782 -> 0 bytes .../minecraft/textures/pipes/SixSteamPipe.png | Bin 1906 -> 0 bytes .../minecraft/textures/pipes/SixWaterPipe.png | Bin 791 -> 0 bytes .../minecraft/textures/pipes/SteamPipe.png | Bin 770 -> 0 bytes .../minecraft/textures/pipes/WaterPipe.png | Bin 3192 -> 0 bytes .../src/minecraft/textures/pumps/LavaPump.png | Bin 740 -> 0 bytes .../src/minecraft/textures/pumps/OilPump.png | Bin 727 -> 0 bytes 1.4.2/src/minecraft/textures/pumps/Pump.png | Bin 735 -> 0 bytes .../minecraft/textures/pumps/WaterPump.png | Bin 733 -> 0 bytes 1.4.2/src/minecraft/textures/tankBlock.png | Bin 2478 -> 0 bytes 1.4.2/src/minecraft/textures/tankTexture.png | Bin 658 -> 0 bytes .../minecraft/textures/tanks/GUITurret.png | Bin 1208 -> 0 bytes .../minecraft/textures/tanks/LiquidTank.png | Bin 614 -> 0 bytes .../minecraft/textures/tanks/LiquidTank0.png | Bin 594 -> 0 bytes .../minecraft/textures/tanks/LiquidTank1.png | Bin 626 -> 0 bytes .../minecraft/textures/tanks/LiquidTank2.png | Bin 626 -> 0 bytes .../minecraft/textures/tanks/LiquidTank3.png | Bin 623 -> 0 bytes .../minecraft/textures/tanks/LiquidTank4.png | Bin 614 -> 0 bytes .../textures/tanks/LiquidTankCorner.png | Bin 446 -> 0 bytes .../dark/SteamPower/ItemRenderHelperS.java | 4 +- .../dark/SteamPower/SteamPowerMain.java | 74 +-- .../dark/SteamPower/boiler/BlockBoiler.java | 117 ++++ .../SteamPower/boiler/TileEntityBoiler.java | 465 +++++++------- .../boiler/TileEntityBoilerPipe.java | 8 + .../BlockHeaters.java} | 62 +- .../SteamPower/firebox/TileEntityFireBox.java | 5 +- .../firebox/TileEntityLavaBuffer.java | 8 + .../firebox/TileEntityLiquidBurner.java | 8 + .../steamengine/BlockSteamPiston.java | 2 +- .../steamengine/ItemSteamPiston.java | 2 +- .../steamengine/TileEntitySteamPiston.java | 580 +++++++++--------- .../steamengine/TileEntitytopGen.java | 32 - 121 files changed, 762 insertions(+), 8443 deletions(-) delete mode 100644 1.4.2/src/common/basicpipes/BasicPipesMain.java delete mode 100644 1.4.2/src/common/basicpipes/LTanks/ItemTank.java delete mode 100644 1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java delete mode 100644 1.4.2/src/common/basicpipes/PipeProxy.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/BlockPipe.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/BlockRod.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/ItemGuage.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/ItemParts.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/ItemPipe.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java delete mode 100644 1.4.2/src/common/basicpipes/conductors/TileEntityRod.java delete mode 100644 1.4.2/src/common/basicpipes/machines/BlockMachine.java delete mode 100644 1.4.2/src/common/basicpipes/machines/BlockValve.java delete mode 100644 1.4.2/src/common/basicpipes/machines/ItemMachine.java delete mode 100644 1.4.2/src/common/basicpipes/machines/ItemValve.java delete mode 100644 1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java delete mode 100644 1.4.2/src/common/basicpipes/machines/TileEntityPump.java delete mode 100644 1.4.2/src/common/basicpipes/machines/TileEntityValve.java delete mode 100644 1.4.2/src/common/basicpipes/mcmod.info delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/Beam.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/IMechanical.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/Liquid.java delete mode 100644 1.4.2/src/common/basicpipes/pipes/api/MHelper.java delete mode 100644 1.4.2/src/common/mcpmod.info delete mode 100644 1.4.2/src/common/steampower/BlockMachine.java delete mode 100644 1.4.2/src/common/steampower/ContainerFake.java delete mode 100644 1.4.2/src/common/steampower/ItemMachine.java delete mode 100644 1.4.2/src/common/steampower/SteamPowerMain.java delete mode 100644 1.4.2/src/common/steampower/SteamProxy.java delete mode 100644 1.4.2/src/common/steampower/TileEntityMachine.java delete mode 100644 1.4.2/src/common/steampower/boiler/TileEntityBoiler.java delete mode 100644 1.4.2/src/common/steampower/burner/ContainerFireBox.java delete mode 100644 1.4.2/src/common/steampower/burner/TileEntityFireBox.java delete mode 100644 1.4.2/src/common/steampower/mcmod.info delete mode 100644 1.4.2/src/common/steampower/turbine/BlockGenerator.java delete mode 100644 1.4.2/src/common/steampower/turbine/BlockSteamPiston.java delete mode 100644 1.4.2/src/common/steampower/turbine/ItemEngine.java delete mode 100644 1.4.2/src/common/steampower/turbine/TileEntityGen.java delete mode 100644 1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java delete mode 100644 1.4.2/src/common/steampower/turbine/TileEntitytopGen.java delete mode 100644 1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java delete mode 100644 1.4.2/src/minecraft/basicpipes/ModelGearRod.java delete mode 100644 1.4.2/src/minecraft/basicpipes/ModelLargePipe.java delete mode 100644 1.4.2/src/minecraft/basicpipes/ModelPipe.java delete mode 100644 1.4.2/src/minecraft/basicpipes/ModelPump.java delete mode 100644 1.4.2/src/minecraft/basicpipes/PipeClientProxy.java delete mode 100644 1.4.2/src/minecraft/basicpipes/RenderGearRod.java delete mode 100644 1.4.2/src/minecraft/basicpipes/RenderPipe.java delete mode 100644 1.4.2/src/minecraft/basicpipes/RenderPump.java delete mode 100644 1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java delete mode 100644 1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java delete mode 100644 1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java delete mode 100644 1.4.2/src/minecraft/mcp.png delete mode 100644 1.4.2/src/minecraft/steampower/GUIFireBox.java delete mode 100644 1.4.2/src/minecraft/steampower/GUISteamPiston.java delete mode 100644 1.4.2/src/minecraft/steampower/GuiBoiler.java delete mode 100644 1.4.2/src/minecraft/steampower/ItemRenderHelperS.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelCenterTank.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelCornerTank.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelEngine.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelFurnace.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelGenerator.java delete mode 100644 1.4.2/src/minecraft/steampower/ModelTank.java delete mode 100644 1.4.2/src/minecraft/steampower/RenderBoiler.java delete mode 100644 1.4.2/src/minecraft/steampower/RenderFurnace.java delete mode 100644 1.4.2/src/minecraft/steampower/RenderGenerator.java delete mode 100644 1.4.2/src/minecraft/steampower/SteamClientProxy.java delete mode 100644 1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java delete mode 100644 1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java delete mode 100644 1.4.2/src/minecraft/textures/BoilerGui.png delete mode 100644 1.4.2/src/minecraft/textures/CornerTank.png delete mode 100644 1.4.2/src/minecraft/textures/Engine.png delete mode 100644 1.4.2/src/minecraft/textures/Furnace.png delete mode 100644 1.4.2/src/minecraft/textures/GearRod.png delete mode 100644 1.4.2/src/minecraft/textures/GearShaftPiston.png delete mode 100644 1.4.2/src/minecraft/textures/Generator.png delete mode 100644 1.4.2/src/minecraft/textures/GrinderGUI.png delete mode 100644 1.4.2/src/minecraft/textures/Items.png delete mode 100644 1.4.2/src/minecraft/textures/SteamGUI.png delete mode 100644 1.4.2/src/minecraft/textures/SteelPiston.png delete mode 100644 1.4.2/src/minecraft/textures/blocks.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/DefaultPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/LavaPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/SixLavaPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/SixOilPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/SixSteamPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/SixWaterPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/SteamPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pipes/WaterPipe.png delete mode 100644 1.4.2/src/minecraft/textures/pumps/LavaPump.png delete mode 100644 1.4.2/src/minecraft/textures/pumps/OilPump.png delete mode 100644 1.4.2/src/minecraft/textures/pumps/Pump.png delete mode 100644 1.4.2/src/minecraft/textures/pumps/WaterPump.png delete mode 100644 1.4.2/src/minecraft/textures/tankBlock.png delete mode 100644 1.4.2/src/minecraft/textures/tankTexture.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/GUITurret.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank0.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank1.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank2.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank3.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTank4.png delete mode 100644 1.4.2/src/minecraft/textures/tanks/LiquidTankCorner.png create mode 100644 src/common/dark/SteamPower/boiler/BlockBoiler.java create mode 100644 src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java rename src/common/dark/SteamPower/{SteamMachines.java => firebox/BlockHeaters.java} (56%) create mode 100644 src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java create mode 100644 src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java delete mode 100644 src/common/dark/SteamPower/steamengine/TileEntitytopGen.java diff --git a/1.4.2/src/common/basicpipes/BasicPipesMain.java b/1.4.2/src/common/basicpipes/BasicPipesMain.java deleted file mode 100644 index fef619c3..00000000 --- a/1.4.2/src/common/basicpipes/BasicPipesMain.java +++ /dev/null @@ -1,221 +0,0 @@ -package basicpipes; - -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 universalelectricity.prefab.network.PacketManager; -import basicpipes.LTanks.ItemTank; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.BlockPipe; -import basicpipes.conductors.BlockRod; -import basicpipes.conductors.ItemGuage; -import basicpipes.conductors.ItemParts; -import basicpipes.conductors.ItemPipe; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.BlockMachine; -import basicpipes.machines.BlockValve; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; -import cpw.mods.fml.common.Mod; -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.SidedProxy; -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 = "basicPipes", name = "Basic Pipes", version = "1.9", dependencies = "after:UniversalElectricity") -@NetworkMod(channels = { "Pipes" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class BasicPipesMain { - - public BasicPipesMain instance; - - @SidedProxy(clientSide = "basicpipes.PipeClientProxy", serverSide = "basicpipes.PipeProxy") - public static PipeProxy proxy; - static Configuration config = new Configuration((new File( - cpw.mods.fml.common.Loader.instance().getConfigDir(), - "/UniversalElectricity/BasicPipes.cfg"))); - public static int pipeID = configurationProperties(); - private static int partID; - private static int ppipeID; - public static int machineID; - private static int toolID; - private static int tankID; - public static int valveID; - public static int rodID; - public static Block pipe = new BlockPipe(pipeID).setBlockName("pipe"); - public static Block machine = new BlockMachine(machineID) - .setBlockName("pump"); - public static Block valve = new BlockValve(valveID).setBlockName("valve"); - public static Block rod = new BlockRod(rodID); - public static Item parts = new ItemParts(partID); - public static Item itemPipes = new ItemPipe(ppipeID); - public static Item itemTank = new ItemTank(tankID); - public static Item gauge = new ItemGuage(toolID); - - public static String channel = "Pipes"; - public static String textureFile = "/textures"; - public static boolean ueLoaded = false; - - public static int configurationProperties() { - config.load(); - pipeID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "PipeBlock", 155).value); - machineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "machineBlock", 156).value); - valveID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "ValveBlock", 157).value); - rodID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "gearBlock", 158).value); - partID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "parts", 23022).value); - ppipeID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "pipes", 23023).value); - toolID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "ToolID", 23024).value); - tankID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "tankID", 23025).value); - config.save(); - return pipeID; - } - - @PreInit - public void preInit(FMLPreInitializationEvent event) { - proxy.preInit(); - GameRegistry.registerBlock(pipe); - GameRegistry.registerBlock(rod); - GameRegistry.registerBlock(machine, - basicpipes.machines.ItemMachine.class); - } - - @Init - public void load(FMLInitializationEvent evt) { - // register - proxy.init(); - GameRegistry.registerTileEntity(TileEntityPipe.class, "pipe"); - GameRegistry.registerTileEntity(TileEntityPump.class, "pump"); - GameRegistry.registerTileEntity(TileEntityRod.class, "rod"); - GameRegistry.registerTileEntity(TileEntityLTank.class, "ltank"); - // Names and lang stuff - // Pipe Names - for (int i = 0; i < Liquid.values().length; i++) { - LanguageRegistry.addName((new ItemStack(itemPipes, 1, i)), - Liquid.getLiquid(i).lName + " Pipe"); - } - for (int i = 0; i < Liquid.values().length; i++) { - LanguageRegistry.addName((new ItemStack(itemTank, 1, i)), - Liquid.getLiquid(i).lName + " Tank"); - } - // Pump - LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "WaterPump"); - LanguageRegistry.addName((new ItemStack(machine, 1, 4)), - "WaterCondensor"); - LanguageRegistry.addName((new ItemStack(rod, 1)), "MechRod"); - // Tools - LanguageRegistry.addName((new ItemStack(gauge, 1, 0)), "PipeGuage"); - // Parts - LanguageRegistry.addName((new ItemStack(parts, 1, 0)), "BronzeTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 1)), "IronTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 2)), "ObsidianTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 3)), "NetherTube"); - LanguageRegistry.addName((new ItemStack(parts, 1, 4)), "LeatherSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 5)), "SlimeSeal"); - LanguageRegistry.addName((new ItemStack(parts, 1, 6)), "BronzeTank"); - LanguageRegistry.addName((new ItemStack(parts, 1, 7)), "Valve"); - } - - @PostInit - public void postInit(FMLPostInitializationEvent event) { - proxy.postInit(); - GameRegistry.addRecipe(new ItemStack(this.gauge, 1, 0), new Object[] { - "TVT"," T ", 'V', new ItemStack(parts,1,7), 'T',new ItemStack(parts,1,1) }); - //iron tube - GameRegistry.addRecipe(new ItemStack(parts, 2, 1), new Object[] { - "@@@", '@', Item.ingotIron }); - //obby tube - GameRegistry.addRecipe(new ItemStack(parts, 2, 2), new Object[] { - "@@@", '@', Block.obsidian }); - //nether tube - GameRegistry - .addRecipe(new ItemStack(parts, 2, 3), - new Object[] { "N@N", 'N', Block.netherrack, '@', - new ItemStack(parts, 2, 2) }); - //seal - GameRegistry.addRecipe(new ItemStack(parts, 2, 4), new Object[] { "@@", - "@@", '@', Item.leather }); - //slime steal - GameRegistry.addShapelessRecipe(new ItemStack(parts, 1, 5), - new Object[] { new ItemStack(parts, 1, 4), - new ItemStack(Item.slimeBall, 1) });// stick seal - // crafting pipes - // {"black", "red", "green", "brown", "blue", "purple", "cyan", - // "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", - // "orange", "white"}; - GameRegistry.addRecipe(new ItemStack(rod, 1), new Object[] { "I@I", - 'I', Item.ingotIron, '@', new ItemStack(parts, 1, 1) }); - // water - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 1), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 4) }); - // lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 2), - new Object[] { new ItemStack(parts, 1, 2), - new ItemStack(Item.dyePowder, 1, 1) }); - // oil - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 3), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 0) }); - // fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 4), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 11) }); - GameRegistry.addRecipe(new ItemStack(parts, 1, 7), new Object[] { - "T@T", 'T', new ItemStack(parts, 1, 1), '@', Block.lever });// valve - - GameRegistry.addRecipe(new ItemStack(parts, 1, 6), new Object[] { - " @ ", "@ @", " @ ", '@', Item.ingotIron });// tank - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 0), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 15) }); - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 1), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 4) }); - // lava TODO change to use obby pipe and nether items - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 2), - new Object[] { new ItemStack(parts, 1, 6), Block.obsidian, - Block.obsidian, Block.obsidian, Block.obsidian }); - // oil - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 3), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 0) }); - // fuel - GameRegistry.addShapelessRecipe(new ItemStack(itemTank, 1, 4), - new Object[] { new ItemStack(parts, 1, 6), - new ItemStack(parts, 1, 4), - new ItemStack(Item.dyePowder, 1, 11) }); - GameRegistry.addShapelessRecipe(new ItemStack(itemPipes, 1, 0), - new Object[] { new ItemStack(parts, 1, 1), - new ItemStack(parts, 1, 4) }); - GameRegistry.addRecipe(new ItemStack(machine, 1, 0), new Object[] { - "@T@", "BPB", "@P@", '@', new ItemStack(Item.ingotIron, 2), - 'B', new ItemStack(parts, 1, 7), 'P', - new ItemStack(Block.pistonBase), 'T', - new ItemStack(parts, 1, 6) }); - - } - -} diff --git a/1.4.2/src/common/basicpipes/LTanks/ItemTank.java b/1.4.2/src/common/basicpipes/LTanks/ItemTank.java deleted file mode 100644 index 2f588502..00000000 --- a/1.4.2/src/common/basicpipes/LTanks/ItemTank.java +++ /dev/null @@ -1,130 +0,0 @@ -package basicpipes.LTanks; - -import java.util.List; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemTank extends Item -{ - int index = 64;//64 + 2 rows alloted to pipes - private int spawnID; - - public ItemTank(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("tank"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Tank" : "unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < Liquid.values().length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Pipes"; - } - @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.machineID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,5)) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityLTank) - { - TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; - Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java b/1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java deleted file mode 100644 index b127bf54..00000000 --- a/1.4.2/src/common/basicpipes/LTanks/TileEntityLTank.java +++ /dev/null @@ -1,210 +0,0 @@ -package basicpipes.LTanks; - -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; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IStorageTank; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityLTank extends TileEntity implements IStorageTank,ILiquidProducer,IPacketReceiver{ -public TileEntity[] cc = {null,null,null,null,null,null}; -public Liquid type = Liquid.DEFUALT; -public int LStored = 0; -public int pLStored = 0; -public int LMax = 4; -private int count = 0; -private int count2 = 0; -private boolean firstUpdate = true; -public void updateEntity() -{ - if(++count >= 5) - { - count = 0; - this.cc = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - if(!worldObj.isRemote) - { - MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.LStored,this.getLiquidCapacity(type), type); - if(firstUpdate ||(this.LStored != pLStored)|| count2 >= 100) - { - count2 = 0; - firstUpdate = false; - Packet packet = PacketManager.getPacket(BasicPipesMain.channel, this, new Object[]{type.ordinal(),LStored}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 20); - } - this.pLStored = this.LStored; - } - } -} -public void writeToNBT(NBTTagCompound nbt) -{ - super.writeToNBT(nbt); - nbt.setInteger("Vol", this.LStored); - nbt.setInteger("type", this.type.ordinal()); -} - -@Override -public void readFromNBT(NBTTagCompound nbt) -{ - super.readFromNBT(nbt); - this.LStored = nbt.getInteger("Vol"); - this.type = Liquid.getLiquid(nbt.getInteger("type")); -} - -//-------------------- -//Liquid stuff -//------------------------------------ -@Override -public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) -{ - - if(type == this.type) - { - if(this.LStored < this.getLiquidCapacity(this.type)) - { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - this.LMax, 0); - this.LStored = Math.min(Math.max((LStored + vol - rejectedVolume),0),this.LMax); - return rejectedVolume; - }else - { - TileEntity te = null; - if(this.type.isGas) - { - worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - }else - { - worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - } - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - } - return vol; -} - -@Override -public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.UP) - { - return false; - } - if(!this.type.isGas && side == ForgeDirection.DOWN) - { - return false; - } - return true; - } - return false; -} - -@Override -public int getStoredLiquid(Liquid type) { - if(type == this.type) - { - return LStored; - } - return 0; -} - -@Override -public int getLiquidCapacity(Liquid type) { - if(type == this.type) - { - return LMax; - } - return 0; -} - -public Liquid getType() { - // TODO Auto-generated method stub - return type; -} - -@Override -public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == this.type && this.LStored > 1 && vol > 0) - { - //TODO correct / do math for - LStored--; - return 1; - } - return 0; -} - -@Override -public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.UP) - { - return true; - } - if(!this.type.isGas && side == ForgeDirection.DOWN) - { - return true; - } - } - return false; -} - -@Override -public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == this.type) - { - if(this.type.isGas && side == ForgeDirection.DOWN) - { - return true; - } - if(!this.type.isGas && side == ForgeDirection.UP) - { - return true; - } - } - return false; -} - -@Override -public int presureOutput(Liquid type, ForgeDirection side) { - if(type == this.type) - { - return this.type.defaultPresure; - } - return 0; -} - - -@Override -public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try - { - this.type = Liquid.getLiquid(data.readInt()); - this.LStored = data.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - System.out.print("Fail reading data for Storage tank \n"); - } - -} -public void setType(Liquid dm) { - this.type = dm; - -} -} diff --git a/1.4.2/src/common/basicpipes/PipeProxy.java b/1.4.2/src/common/basicpipes/PipeProxy.java deleted file mode 100644 index ce0e8cc9..00000000 --- a/1.4.2/src/common/basicpipes/PipeProxy.java +++ /dev/null @@ -1,56 +0,0 @@ -package basicpipes; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class PipeProxy implements IGuiHandler -{ - - public void preInit() - { - - } - 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; - } -} diff --git a/1.4.2/src/common/basicpipes/conductors/BlockPipe.java b/1.4.2/src/common/basicpipes/conductors/BlockPipe.java deleted file mode 100644 index aeac6929..00000000 --- a/1.4.2/src/common/basicpipes/conductors/BlockPipe.java +++ /dev/null @@ -1,90 +0,0 @@ -package basicpipes.conductors; - -import java.util.Random; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.EntityItem; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -public class BlockPipe extends BlockContainer -{ - - public BlockPipe(int id) - { - super(id, Material.iron); - this.setBlockName("Pipe"); - this.setBlockBounds(0.30F, 0.30F, 0.30F, 0.70F, 0.70F, 0.70F); - this.setHardness(1f); - this.setResistance(3f); - } - public boolean isOpaqueCube(){return false;} - public boolean renderAsNormalBlock(){return false;} - public int getRenderType(){return -1;} - public int idDropped(int par1, Random par2Random, int par3){return 0;} - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - super.onBlockAdded(world, x, y, z); - } - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor blockID - */ - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int blockID) - { - super.onNeighborBlockChange(world, x, y, z, blockID); - } - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - return var5 == 0 || blocksList[var5].blockMaterial.isGroundCover(); - } - @Override - public boolean canPlaceBlockOnSide(World par1World, int par2, int par3, int par4, int par5) - { - return true; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return new TileEntityPipe(); - } - @Override - public void breakBlock(World world, int x, int y, int z,int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - TileEntity ent = world.getBlockTileEntity(x, y, z); - Random furnaceRand = new Random(); - if(ent instanceof TileEntityPipe) - { - TileEntityPipe pipe = (TileEntityPipe) ent; - int meta = pipe.type.ordinal(); - float var8 = furnaceRand.nextFloat() * 0.8F + 0.1F; - float var9 = furnaceRand.nextFloat() * 0.8F + 0.1F; - float var10 = furnaceRand.nextFloat() * 0.8F + 0.1F; - EntityItem var12 = new EntityItem(world, (double)((float)x + var8), (double)((float)y + var9), - (double)((float)z + var10), new ItemStack(BasicPipesMain.itemPipes, 1, meta)); - float var13 = 0.05F; - var12.motionX = (double)((float)furnaceRand.nextGaussian() * var13); - var12.motionY = (double)((float)furnaceRand.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)furnaceRand.nextGaussian() * var13); - world.spawnEntityInWorld(var12); - } - } - - } - - diff --git a/1.4.2/src/common/basicpipes/conductors/BlockRod.java b/1.4.2/src/common/basicpipes/conductors/BlockRod.java deleted file mode 100644 index 370a7330..00000000 --- a/1.4.2/src/common/basicpipes/conductors/BlockRod.java +++ /dev/null @@ -1,83 +0,0 @@ -package basicpipes.conductors; - -import basicpipes.ItemRenderHelper; -import steampower.TileEntityMachine; -import net.minecraft.src.Block; -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; -import net.minecraftforge.common.ForgeDirection; - -public class BlockRod extends universalelectricity.prefab.BlockMachine { - - public BlockRod(int par1) { - super("MechanicRod", par1, Material.iron); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int damageDropped(int metadata) - { - return 0; - } - @Override - public void onBlockPlacedBy(World world,int i,int j,int k, EntityLiving player) - { - int angle= MathHelper.floor_double((player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int meta = 0; - ForgeDirection idr; - int dZ = 0; - int dX = 0; - switch(angle) - { - case 0: meta = 2;dZ--;break; - case 1: meta = 5;dX--;break; - case 2: meta = 3;dZ++;break; - case 3: meta = 4;dX++;break; - } - world.setBlockAndMetadataWithUpdate(i, j, k,blockID, meta, true); - } - @Override - public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta >= 5) - { - world.setBlockMetadataWithNotify(x, y, z, 0); - } - else - { - world.setBlockMetadataWithNotify(x,y,z,meta+1); - } - return true; - } - @Override - public TileEntity createNewTileEntity(World var1) - { - return new TileEntityRod(); - } - public boolean isOpaqueCube() - { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return ItemRenderHelper.renderID; - } - -} diff --git a/1.4.2/src/common/basicpipes/conductors/ItemGuage.java b/1.4.2/src/common/basicpipes/conductors/ItemGuage.java deleted file mode 100644 index e36c9757..00000000 --- a/1.4.2/src/common/basicpipes/conductors/ItemGuage.java +++ /dev/null @@ -1,114 +0,0 @@ -package basicpipes.conductors; - -import java.util.List; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.pipes.api.IMechanical; -import basicpipes.pipes.api.Liquid; - -public class ItemGuage extends Item -{ - private int spawnID; - - public ItemGuage(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("guage"); - this.setCreativeTab(CreativeTabs.tabTools); - this.setMaxStackSize(1); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(this, 1, 0)); - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 0: return 24; - } - return this.iconIndex; - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "guage"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - if(!par3World.isRemote) - { - if(itemStack.getItemDamage() == 0) - { - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - Liquid type = pipeEntity.getType(); - int steam = pipeEntity.getStoredLiquid(type); - int pressure = pipeEntity.presure; - String typeName = type.lName; - String print = "Error"; - - print = typeName +" " + steam +" @ "+pressure+"PSI"; - - player.sendChatToPlayer(print); - return true; - } - if(blockEntity instanceof TileEntityLTank) - { - TileEntityLTank pipeEntity = (TileEntityLTank) blockEntity; - Liquid type = pipeEntity.getType(); - int steam = pipeEntity.getStoredLiquid(type); - String typeName = type.lName; - String print = "Error"; - - print = typeName +" " + steam; - - player.sendChatToPlayer(print); - return true; - } - if(blockEntity instanceof IMechanical) - { - IMechanical rod = (IMechanical) blockEntity; - int steam = rod.getForce(); - int pressure = rod.getAnimationPos(); - String print = "Error"; - - print = " " + steam +"N "+pressure*45+"degrees"; - - player.sendChatToPlayer(print); - return true; - } - } - - } - - return false; - } - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "PipeGuage"; - } - return this.getItemName(); - } -} diff --git a/1.4.2/src/common/basicpipes/conductors/ItemParts.java b/1.4.2/src/common/basicpipes/conductors/ItemParts.java deleted file mode 100644 index 59fe3b86..00000000 --- a/1.4.2/src/common/basicpipes/conductors/ItemParts.java +++ /dev/null @@ -1,62 +0,0 @@ -package basicpipes.conductors; - -import java.util.ArrayList; -import java.util.List; - -import basicpipes.BasicPipesMain; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.World; - -public class ItemParts extends Item{ - String[] names = new String[]{"BronzeTube","IronTube","ObbyTube","NetherTube","Seal","StickSeal","BronzeTank","Valve",}; - int[] iconID = new int[] {0 ,1 ,2 ,3 ,16 ,17 ,18 ,19};//TODO check these - public ItemParts(int par1) - { - super(par1); - this.setItemName("Parts"); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setMaxStackSize(64); - this.setCreativeTab(CreativeTabs.tabMaterials); - } - @Override - public int getIconFromDamage(int par1) - { - if(par1 < iconID.length) - { - return iconID[par1]; - } - return par1; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return names[itemstack.getItemDamage()]; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < names.length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "parts"; - } -} - - - - - - diff --git a/1.4.2/src/common/basicpipes/conductors/ItemPipe.java b/1.4.2/src/common/basicpipes/conductors/ItemPipe.java deleted file mode 100644 index b22999a6..00000000 --- a/1.4.2/src/common/basicpipes/conductors/ItemPipe.java +++ /dev/null @@ -1,130 +0,0 @@ -package basicpipes.conductors; - -import java.util.List; - -import basicpipes.BasicPipesMain; -import basicpipes.pipes.api.Liquid; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemPipe extends Item -{ - int index = 32;//32 + 4 rows alloted to pipes - private int spawnID; - - public ItemPipe(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("pipe"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() < Liquid.values().length ? Liquid.getLiquid(itemstack.getItemDamage()).lName+" Pipe" : "Empty Pipe"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - for(int i = 0; i < Liquid.values().length; i++) - { - par3List.add(new ItemStack(this, 1, i)); - } - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Pipes"; - } - @Override - public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.pipeID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - if (par3World.setBlockWithNotify(par4, par5, par6, var9.blockID)) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, par2EntityPlayer); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - if(blockEntity instanceof TileEntityPipe) - { - TileEntityPipe pipeEntity = (TileEntityPipe) blockEntity; - Liquid dm = Liquid.getLiquid(par1ItemStack.getItemDamage()); - pipeEntity.setType(dm); - } - } - - --par1ItemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java b/1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java deleted file mode 100644 index 628dd6ca..00000000 --- a/1.4.2/src/common/basicpipes/conductors/TileEntityPipe.java +++ /dev/null @@ -1,210 +0,0 @@ -package basicpipes.conductors; - -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; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityPipe extends TileEntity implements ILiquidConsumer, - IPacketReceiver { - protected Liquid type = Liquid.DEFUALT; - - public int capacity = 2; - public int presure = 0; - public int connectedUnits = 0; - public int liquidStored = 0; - private int count = 0; - private int count2 = 0; - - protected boolean firstUpdate = true; - - public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; - - public int getPressure() { - return this.presure; - } - - @Override - public void updateEntity() { - int highestPressure = 0; - if (++count >= 5) { - this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, - yCoord, zCoord); - for (int i = 0; i < 6; i++) { - - if (connectedBlocks[i] instanceof ILiquidConsumer - && ((ILiquidConsumer) connectedBlocks[i]) - .canRecieveLiquid(this.type, ForgeDirection - .getOrientation(i).getOpposite())) { - this.connectedUnits++; - if (connectedBlocks[i] instanceof TileEntityPipe) { - if (((TileEntityPipe) connectedBlocks[i]).getPressure() > highestPressure) { - highestPressure = ((TileEntityPipe) connectedBlocks[i]) - .getPressure(); - } - } - } else if (connectedBlocks[i] instanceof ILiquidProducer - && ((ILiquidProducer) connectedBlocks[i]) - .canProduceLiquid(this.type, ForgeDirection - .getOrientation(i).getOpposite())) { - this.connectedUnits++; - if (((ILiquidProducer) connectedBlocks[i]) - .canProducePresure(this.type, - ForgeDirection.getOrientation(i)) - && ((ILiquidProducer) connectedBlocks[i]) - .presureOutput(this.type, ForgeDirection - .getOrientation(i).getOpposite()) > highestPressure) { - highestPressure = ((ILiquidProducer) connectedBlocks[i]) - .presureOutput(this.type, - ForgeDirection.getOrientation(i)); - } - } else { - connectedBlocks[i] = null; - } - } - if (!worldObj.isRemote) { - if (firstUpdate || count2++ >= 10) { - count2 = 0; - firstUpdate = false; - Packet packet = PacketManager.getPacket("Pipes", this, - new Object[] { this.type.ordinal() }); - PacketManager.sendPacketToClients(packet, worldObj, - Vector3.get(this), 60); - } - this.presure = highestPressure - 1; - for (int i = 0; i < 6; i++) { - if (connectedBlocks[i] instanceof ILiquidProducer) { - int vol = ((ILiquidProducer) connectedBlocks[i]) - .onProduceLiquid(this.type, this.capacity - - this.liquidStored, ForgeDirection - .getOrientation(i).getOpposite()); - this.liquidStored = Math.min(this.liquidStored + vol, - this.capacity); - } - if (connectedBlocks[i] instanceof ILiquidConsumer - && this.liquidStored > 0 && this.presure > 0) { - if (connectedBlocks[i] instanceof TileEntityPipe) { - this.liquidStored--; - int vol = ((ILiquidConsumer) connectedBlocks[i]) - .onReceiveLiquid(this.type, Math.max( - this.liquidStored, 1), - ForgeDirection.getOrientation(i) - .getOpposite()); - this.liquidStored += vol; - } else { - this.liquidStored = ((ILiquidConsumer) connectedBlocks[i]) - .onReceiveLiquid(this.type, - this.liquidStored, ForgeDirection - .getOrientation(i) - .getOpposite()); - } - } - } - } - } - } - - // --------------- - // liquid stuff - // --------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if (type == this.type) { - int rejectedVolume = Math.max((this.getStoredLiquid(type) + vol) - - this.capacity, 0); - this.liquidStored = Math.min( - Math.max((liquidStored + vol - rejectedVolume), 0), - this.capacity); - return rejectedVolume; - } - return vol; - } - - /** - * @return Return the stored volume in this pipe. - */ - @Override - public int getStoredLiquid(Liquid type) { - if (type == this.type) { - return this.liquidStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if (type == this.type) { - return this.capacity; - } - return 0; - } - - // find wether or not this side of X block can recieve X liquid type. Also - // use to determine connection of a pipe - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection side) { - if (type == this.type) { - return true; - } - return false; - } - - // returns liquid type - public Liquid getType() { - return this.type; - } - - // used by the item to set the liquid type on spawn - public void setType(Liquid rType) { - this.type = rType; - - } - - // --------------------- - // data - // -------------------- - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try { - int type = data.readInt(); - if (worldObj.isRemote) { - this.type = Liquid.getLiquid(type); - } - } catch (Exception e) { - e.printStackTrace(); - } - - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) { - super.readFromNBT(par1NBTTagCompound); - this.liquidStored = par1NBTTagCompound.getInteger("liquid"); - this.type = Liquid.getLiquid(par1NBTTagCompound.getInteger("type")); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("liquid", this.liquidStored); - par1NBTTagCompound.setInteger("type", this.type.ordinal()); - } -} diff --git a/1.4.2/src/common/basicpipes/conductors/TileEntityRod.java b/1.4.2/src/common/basicpipes/conductors/TileEntityRod.java deleted file mode 100644 index a6b70c24..00000000 --- a/1.4.2/src/common/basicpipes/conductors/TileEntityRod.java +++ /dev/null @@ -1,137 +0,0 @@ -package basicpipes.conductors; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Packet; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.SteamPowerMain; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.IPacketReceiver; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.pipes.api.IMechanical; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityRod extends TileEntity implements IPacketReceiver,IMechanical { - - public int pos = 0; - private int force = 0; - private int pForce = 0; - public int aForce = 0; - public int forceMax = 1000; - private int tickCount = 0; - private int posCount = 0; - - private ForgeDirection frontDir; - private ForgeDirection backDir; - - private TileEntity bb; - private TileEntity ff; - @Override - public void updateEntity() - { - super.updateEntity(); - if(tickCount++ >=10) - { tickCount = 0; - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - frontDir = ForgeDirection.getOrientation(meta); - backDir = ForgeDirection.getOrientation(meta).getOpposite(); - bb = worldObj.getBlockTileEntity(xCoord+backDir.offsetX, yCoord, zCoord+backDir.offsetZ); - ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord, zCoord+frontDir.offsetZ); - if(force > 0) - { - int posCountA = (forceMax/force) & 10; - if(posCount++ >= posCountA) - { - pos ++;if(pos > 7){pos = 0;}; - } - } - if(bb instanceof TileEntityRod) - { - this.pos = ((IMechanical)bb).getAnimationPos(); - } - if(!worldObj.isRemote) - { - - if(ff instanceof IMechanical) - { - if(((IMechanical) ff).canInputSide(backDir)) - { - ((IMechanical) ff).applyForce(aForce); - } - } - if(bb instanceof IMechanical) - { - if(((IMechanical) bb).canOutputSide(frontDir)) - { - this.force = ((IMechanical) bb).getForce(); - } - }else - { - this.force -=Math.max(force/10, 0); - } - aForce = Math.max(force - 10,0); - if(this.force != this.pForce) - { - Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, new Object[]{force}); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); - } - this.pForce = this.force; - } - } - } - @Override - public int getForceSide(ForgeDirection side) { - return aForce; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(side == frontDir) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(side == backDir) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.force = force; - return force; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - try - { - this.force = data.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - System.out.print("MechRodDataFailure \n"); - } - - } - @Override - public int getAnimationPos() { - return this.pos; - } - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } -} diff --git a/1.4.2/src/common/basicpipes/machines/BlockMachine.java b/1.4.2/src/common/basicpipes/machines/BlockMachine.java deleted file mode 100644 index 1997ba5e..00000000 --- a/1.4.2/src/common/basicpipes/machines/BlockMachine.java +++ /dev/null @@ -1,79 +0,0 @@ -package basicpipes.machines; - -import net.minecraft.src.BlockContainer; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; -import basicpipes.ItemRenderHelper; -import basicpipes.LTanks.TileEntityLTank; - -public class BlockMachine extends BlockContainer -{ - - public BlockMachine(int id) - { - super(id, Material.iron); - this.setBlockName("Machine"); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setRequiresSelfNotify(); - this.blockIndexInTexture = 26; - this.setHardness(1f); - this.setResistance(3f); - } - public boolean isOpaqueCube() - { - return false; - } - - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return ItemRenderHelper.renderID; - } - public int damageDropped(int meta) - { - if(meta < 4) - { - return 0; - } - return meta; - } - @Override - public TileEntity createNewTileEntity(World var1,int meta) { - // TODO Auto-generated method stub - if(meta < 4) - { - return new TileEntityPump(); - } - if(meta == 4) - { - return new TileEntityCondenser(); - } - if(meta == 5) - { - return new TileEntityLTank(); - } - return null; - } - - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return null; - } - @Override - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - } - - diff --git a/1.4.2/src/common/basicpipes/machines/BlockValve.java b/1.4.2/src/common/basicpipes/machines/BlockValve.java deleted file mode 100644 index a7c14936..00000000 --- a/1.4.2/src/common/basicpipes/machines/BlockValve.java +++ /dev/null @@ -1,179 +0,0 @@ -package basicpipes.machines; - -import java.util.Random; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Material; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; - -public class BlockValve extends universalelectricity.prefab.BlockMachine -{ - - public BlockValve(int id) - { - super("Valve", id, Material.iron); - this.setBlockName("Valve"); - this.setCreativeTab(CreativeTabs.tabRedstone); - this.setRequiresSelfNotify(); - this.blockIndexInTexture = 26; - } - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) - { - TileEntity te = world.getBlockTileEntity(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - if(te instanceof TileEntityValve) - { - TileEntityValve valve = (TileEntityValve) te; - if(meta < 8) - { - if(!valve.on){ - valve.on = true; - }else{ - valve.on = false; - } - } - } - return false; - } - //rotation valve around y axis - public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer player) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - if(meta == 3) - { - world.setBlockMetadataWithNotify(x, y, z, 0); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 3 && meta < 8) - { - if(meta == 7) - { - world.setBlockMetadataWithNotify(x, y, z, 4); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 7 && meta < 12) - { - if(meta == 11) - { - world.setBlockMetadataWithNotify(x, y, z, 8); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - if(meta > 11 && meta < 16) - { - if(meta == 15) - { - world.setBlockMetadataWithNotify(x, y, z, 12); - } - else - { - world.setBlockMetadataWithNotify(x, y, z, meta+1); - } - return true; - } - return false; - } - - //one shift click inverts pipe to face up - public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer player) - { - int meta = world.getBlockMetadata(x, y, z); - if(meta < 4) - { - world.setBlockMetadataWithNotify(x, y, z, meta+4); - return true; - } - if(meta > 3 && meta < 8) - { - world.setBlockMetadataWithNotify(x, y, z, meta-4); - return true; - } - if(meta > 7 && meta < 12) - { - - world.setBlockMetadataWithNotify(x, y, z, meta+4); - - return true; - } - if(meta > 11 && meta < 16) - { - - world.setBlockMetadataWithNotify(x, y, z, meta-4); - - return true; - } - return false; - } - public boolean isOpaqueCube() - { - return false; - } - - public boolean renderAsNormalBlock() - { - return false; - } - - /** - * The type of render function that is called for this block - */ - public int getRenderType() - { - return -1; - } - - /** - * Returns the ID of the items to drop on destruction. - */ - public int idDropped(int par1, Random par2Random, int par3) - { - return this.blockID; - } - public int damageDropped(int meta) - { - if(meta < 8) - { - return 0; - } - if(meta < 16 && meta > 7) - { - return 4; - } - return 0; - } - //Per tick - public int conductorCapacity() - { - return 1; - } - @Override - public TileEntity createNewTileEntity(World var1) { - // TODO Auto-generated method stub - return new TileEntityValve(); - } - @Override - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - } - - diff --git a/1.4.2/src/common/basicpipes/machines/ItemMachine.java b/1.4.2/src/common/basicpipes/machines/ItemMachine.java deleted file mode 100644 index b6fdd401..00000000 --- a/1.4.2/src/common/basicpipes/machines/ItemMachine.java +++ /dev/null @@ -1,124 +0,0 @@ -package basicpipes.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.TileEntity; -import net.minecraft.src.World; -import basicpipes.BasicPipesMain; - -public class ItemMachine extends ItemBlock -{ - int index = 26; - private int spawnID; - - public ItemMachine(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("Machine"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 0)); - //par3List.add(new ItemStack(this, 1, 4)); - - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Machines"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.machineID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - - } - - --itemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/machines/ItemValve.java b/1.4.2/src/common/basicpipes/machines/ItemValve.java deleted file mode 100644 index 78ed427c..00000000 --- a/1.4.2/src/common/basicpipes/machines/ItemValve.java +++ /dev/null @@ -1,126 +0,0 @@ -package basicpipes.machines; - -import java.util.List; - -import basicpipes.BasicPipesMain; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemBlock; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; - -public class ItemValve extends ItemBlock -{ - int index = 26; - private int spawnID; - - public ItemValve(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setIconIndex(10); - this.setItemName("Machine"); - this.setCreativeTab(CreativeTabs.tabRedstone); - } - @Override - public int getIconFromDamage(int par1) - { - - return par1+index; - } - @Override - public String getItemNameIS(ItemStack itemstack) - { - return itemstack.getItemDamage() == 0 ? "Pump" :"Conderser";//itemstack.getItemDamage() == 4 ? "Condenser":"Unknown"; - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 0)); - par3List.add(new ItemStack(this, 1, 4)); - - } - public String getTextureFile() { - return BasicPipesMain.textureFile+"/Items.png"; - } - @Override - public String getItemName() - { - return "Machines"; - } - @Override - public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10) - { - int blockID = par3World.getBlockId(par4, par5, par6); - spawnID = BasicPipesMain.valveID; - if (blockID == Block.snow.blockID) - { - par7 = 1; - } - else if (blockID != Block.vine.blockID && blockID != Block.tallGrass.blockID && blockID != Block.deadBush.blockID) - { - if (par7 == 0) - { - --par5; - } - - if (par7 == 1) - { - ++par5; - } - - if (par7 == 2) - { - --par6; - } - - if (par7 == 3) - { - ++par6; - } - - if (par7 == 4) - { - --par4; - } - - if (par7 == 5) - { - ++par4; - } - } - - if (BasicPipesMain.pipe.canPlaceBlockAt(par3World,par4,par5,par6)) - { - Block var9 = Block.blocksList[this.spawnID]; - par3World.editingBlocks = true; - int angle = MathHelper.floor_double((double)(player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - if (par3World.setBlockAndMetadataWithNotify(par4, par5, par6, var9.blockID,angle+itemStack.getItemDamage())) - { - if (par3World.getBlockId(par4, par5, par6) == var9.blockID) - { - - Block.blocksList[this.spawnID].onBlockAdded(par3World, par4, par5, par6); - Block.blocksList[this.spawnID].onBlockPlacedBy(par3World, par4, par5, par6, player); - TileEntity blockEntity = par3World.getBlockTileEntity(par4, par5, par6); - - } - - --itemStack.stackSize; - par3World.editingBlocks = false; - return true; - } - } - par3World.editingBlocks = false; - return false; - } - - -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java b/1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java deleted file mode 100644 index 23701e8e..00000000 --- a/1.4.2/src/common/basicpipes/machines/TileEntityCondenser.java +++ /dev/null @@ -1,110 +0,0 @@ -package basicpipes.machines; - -import universalelectricity.implement.IElectricityReceiver; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -public class TileEntityCondenser extends TileEntity implements ILiquidProducer, IElectricityReceiver { - int tickCount = 0; - int waterStored = 0; - int energyStored = 0; - @Override - public int onProduceLiquid(Liquid type,int maxVol, ForgeDirection side) { - if(type == Liquid.WATER) - { - int tradeW = Math.min(maxVol, waterStored); - waterStored -= tradeW; - return tradeW; - } - return 0; - } - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("energyStored", (int)this.energyStored); - par1NBTTagCompound.setInteger("waterStored", (int)this.waterStored); - } - - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.energyStored = par1NBTTagCompound.getInteger("energyStored"); - this.waterStored = par1NBTTagCompound.getInteger("waterStored"); - } - public void updateEntity() - { - if(energyStored > 100 && waterStored < 3) - { - energyStored -= 100; - waterStored += 1; - } - } - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - @Override - public void onDisable(int duration) { - // TODO Auto-generated method stub - - } - @Override - public boolean isDisabled() { - // TODO Auto-generated method stub - return false; - } - @Override - public double wattRequest() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - // TODO Auto-generated method stub - return false; - } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - @Override - public boolean canConnect(ForgeDirection side) { - // TODO Auto-generated method stub - return true; - } - @Override - public double getVoltage() { - // TODO Auto-generated method stub - return 120; - } - @Override - public void onReceive(TileEntity sender, double amps, double voltage, - ForgeDirection side) { - // TODO Auto-generated method stub - - } - - - - -} diff --git a/1.4.2/src/common/basicpipes/machines/TileEntityPump.java b/1.4.2/src/common/basicpipes/machines/TileEntityPump.java deleted file mode 100644 index 37aa6d65..00000000 --- a/1.4.2/src/common/basicpipes/machines/TileEntityPump.java +++ /dev/null @@ -1,140 +0,0 @@ -package basicpipes.machines; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.implement.IElectricityReceiver; -import universalelectricity.prefab.TileEntityElectricityReceiver; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -public class TileEntityPump extends TileEntityElectricityReceiver implements ILiquidProducer,IElectricityReceiver { - int dCount = 0; - float eStored = 0; - float eMax = 2000; - int lStored = 0; - int wMax = 10; - public Liquid type = Liquid.DEFUALT; - public TileEntity[] sList = {null,null,null,null,null,null}; - private int count = 0; - @Override - public void onDisable(int duration) { - dCount = duration; - } - - @Override - public boolean isDisabled() { - if(dCount <= 0) - { - return false; - } - return true; - } - - @Override - public void updateEntity() { - super.updateEntity(); - if(count++ >= 40) - { - count = 0; - sList = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - int bBlock = worldObj.getBlockId(xCoord, yCoord -1, zCoord); - Liquid bellow = Liquid.getLiquidByBlock(bBlock); - - if(bellow != null && this.lStored <= 0) - { - this.type = bellow; - } - //eStored+=200; - if(!worldObj.isRemote) - { - if(bBlock == type.Still && this.eStored >= 200 && this.lStored < this.wMax) - { - eStored -= 200; - lStored += 1; - worldObj.setBlockAndMetadataWithNotify(xCoord, yCoord-1, zCoord, 0, 0); - - } - } - } - } - - @Override - public boolean canReceiveFromSide(ForgeDirection side) { - if(side != ForgeDirection.DOWN) - { - return true; - } - return false; - } - @Override - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - if(type == this.type && lStored > 0) - { - lStored -= 1; - return 1; - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int facing = 0; - switch(meta) - { - case 0: facing = 2;break; - case 1: facing = 5;break; - case 2: facing = 3;break; - case 3: facing = 4;break; - } - - if(type == this.type && side != ForgeDirection.DOWN && side != ForgeDirection.UP && side != ForgeDirection.getOrientation(facing).getOpposite()) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - }else - if(type == Liquid.LAVA) - { - return 10; - }else - if(type == this.type) - { - return 50; - } - return 0; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == this.type) - { - return true; - } - return false; - } - - @Override - public void onReceive(TileEntity sender, double watts, double voltage, - ForgeDirection side) { - if (wattRequest() > 0 && canConnect(side)) - { - float rejectedElectricity = (float) Math.max((this.eStored + watts) - this.eMax, 0.0); - this.eStored = (float) Math.max(this.eStored + watts - rejectedElectricity, 0.0); - } - - } - - @Override - public double wattRequest() { - return Math.max(eMax - eStored,0); - } -} diff --git a/1.4.2/src/common/basicpipes/machines/TileEntityValve.java b/1.4.2/src/common/basicpipes/machines/TileEntityValve.java deleted file mode 100644 index 42189fd2..00000000 --- a/1.4.2/src/common/basicpipes/machines/TileEntityValve.java +++ /dev/null @@ -1,109 +0,0 @@ -package basicpipes.machines; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -public class TileEntityValve extends TileEntity implements ILiquidConsumer { -Liquid type = Liquid.DEFUALT; -int liquidStored = 0; -int lMax = 1; -int tickCount = 0; -TileEntity[] connected = {null,null,null,null,null,null}; -boolean on = false; - @Override - public void updateEntity() - { - tickCount++; - if(tickCount >= 10) - { - int deltaX = 0; - int deltaZ = 0; - int deltaY = 0; - int facing = 0; - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - if(meta == 0 && meta == 8) - { - facing = 2; - } - if(meta == 1 && meta == 9) - { - facing = 5; - } - if(meta == 2 && meta == 10) - { - facing = 3; - } - if(meta == 3 && meta == 11) - { - facing = 4; - } - if((meta > 3 && meta < 8)&&(meta> 11 && meta < 16)) - { - facing = 0; - } - switch(facing) - { - case 0: deltaY++;break; - case 1: deltaY--;break; - case 2: deltaZ--;break; - case 5: deltaZ++;break; - case 3: deltaX--;break; - case 4: deltaX++;break; - } - - connected = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - for(int i = 0;i<6;i++) - { - if(!(connected[i] instanceof TileEntityPipe)) - { - connected[i] = null; - } - } - if(!worldObj.isRemote) - { - //TODO send packet - } - tickCount = 0; - } - } - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(this.type == Liquid.DEFUALT) - { - this.type = type; - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { - if(type == this.type) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == this.type) - { - return liquidStored; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == this.type) - { - return lMax; - } - return 0; - } - -} diff --git a/1.4.2/src/common/basicpipes/mcmod.info b/1.4.2/src/common/basicpipes/mcmod.info deleted file mode 100644 index 80365e90..00000000 --- a/1.4.2/src/common/basicpipes/mcmod.info +++ /dev/null @@ -1,21 +0,0 @@ -[ -{ - "modid": "basicPipes", - "name": "Basic Pipes", - "description": "Simple liquid pumping & storage system for UE based mods. Can pump several types of common liquids including water,lava,oil,and Fuel.", - "version": "1.9", - "mcversion": "1.3.2", - "url": "http://www.minecraftforge.net/forum/index.php/topic,604.0.html", - "updateUrl": "", - "authors": [ - "DarkGuardsman" - ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Textures thanks to Atrain;", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": ["UE" - ] -} -] \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/pipes/api/Beam.java b/1.4.2/src/common/basicpipes/pipes/api/Beam.java deleted file mode 100644 index 5d827c1c..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/Beam.java +++ /dev/null @@ -1,26 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -public class Beam { - //might need a more complex system for this later but for now this will work - public int intensity; //Beam intensity level - public boolean light; //Can prodcue light, might use this later - public ForgeDirection movDir; //Used to find the beams current direction - public Beam() - { - this(0,false,ForgeDirection.UNKNOWN); - } - Beam(int i, boolean light, ForgeDirection dir) - { - intensity = i; - this.light = light; - movDir = dir; - } - public static int getBeamLevel(Beam beam) - { - return beam.intensity; - } - - -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java b/1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java deleted file mode 100644 index d3f639c7..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/IBeamProducer.java +++ /dev/null @@ -1,26 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -public interface IBeamProducer { - - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param regInt - requested beam intensity - * @param side - The side - * @return New Beam - Return a vol of liquid type that is produced - */ - public int createNewBeam(int type, int reqInt, ForgeDirection side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canCreateBeam(int type, ForgeDirection side); - -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java b/1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java deleted file mode 100644 index ae4e397f..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/IHeatProducer.java +++ /dev/null @@ -1,16 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - - -public interface IHeatProducer -{ - /** - * onProduceElectricity is called when a conductor is connected to the producer block in which the conductor will demand power from the producer - * block. - * @param jouls - The maximum jouls can be transfered - * @param up - The side of block in which the conductor is on - * @return jouls - Return jouls to consumer - */ - public float onProduceHeat(float jouls, ForgeDirection up); -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java b/1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java deleted file mode 100644 index d5eb17a2..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/ILiquidConsumer.java +++ /dev/null @@ -1,39 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; -/** - * Based off of Calclavia's old wire API - * @author DarkGuardsman - * - */ - -public interface ILiquidConsumer -{ - /** - * onRecieveLiquid - * @param vol - The amount this block received. - * @param side - The side of the block in which the liquid came from. - * @parm type - The type of liquid being received - * @return vol - The amount liquid that can't be recieved - */ - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side); - - /** - * You can use this to check if a pipe can connect to this liquid consumer to properly render the graphics - * @param forgeDirection - The side in which the volume is coming from. - * @parm type - The type of liquid - * @return Returns true or false if this consumer can receive a volume at this given tick or moment. - */ - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection); - - /** - * @return Return the stored liquid of type in this consumer. - */ - public int getStoredLiquid(Liquid type); - - /** - * @return Return the maximum amount of stored liquid this consumer can get. - */ - public int getLiquidCapacity(Liquid type); - -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java b/1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java deleted file mode 100644 index 9e37facf..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/ILiquidProducer.java +++ /dev/null @@ -1,38 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; - -/** - * Based off of Calclavia's old wire API - * @author DarkGuardsman - * - */ -public interface ILiquidProducer -{ - /** - * onProduceLiquid - * block. - * @param type - the type of liquid - * @param maxvol - The maximum vol or requested volume - * @param side - The side - * @return vol - Return a vol of liquid type that is produced - */ - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side); - /** - * canProduceLiquid - * block. - * @param type - the type of liquid - * @param side - The side - * @return boolean - True if can, false if can't produce liquid of type or on that side - * Also used for connection rules of pipes' - */ - public boolean canProduceLiquid(Liquid type, ForgeDirection side); - public boolean canProducePresure(Liquid type, ForgeDirection side); - /** - * - * @param type - liquid type - * @param side - side this of presure - * @return pressure that is used to output liquid on - */ - public int presureOutput(Liquid type, ForgeDirection side); -} \ No newline at end of file diff --git a/1.4.2/src/common/basicpipes/pipes/api/IMechanical.java b/1.4.2/src/common/basicpipes/pipes/api/IMechanical.java deleted file mode 100644 index ced09be3..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/IMechanical.java +++ /dev/null @@ -1,36 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraftforge.common.ForgeDirection; -// mechanical -public interface IMechanical { -/** - * - * @param side the rpm is coming from - * @return rpm that the block is running at - */ - public int getForceSide(ForgeDirection side); - public int getForce(); - /** - * - * @param side - * @return if mechanical force can be outputed from this side - */ - public boolean canOutputSide(ForgeDirection side); - /** - * - * @param side - * @return if mechanical force can be inputed from this side - */ - public boolean canInputSide(ForgeDirection side); - /** - * - * @param RPM being applied to this machine - * @return the rpm after the load has been applied - */ - public int applyForce(int force); - /** - * not required but is handy to get animation position of some mechanical block - * @return int between 0 -7 - */ - public int getAnimationPos(); -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java b/1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java deleted file mode 100644 index e110c041..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/IStorageTank.java +++ /dev/null @@ -1,5 +0,0 @@ -package basicpipes.pipes.api; - -public interface IStorageTank extends ILiquidConsumer { - -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/Liquid.java b/1.4.2/src/common/basicpipes/pipes/api/Liquid.java deleted file mode 100644 index f6a3be46..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/Liquid.java +++ /dev/null @@ -1,64 +0,0 @@ -package basicpipes.pipes.api; - - -import net.minecraft.src.Block; -/** - * System too easily reference a liquid type and its info - * @author Rseifert - * - */ -public enum Liquid { - // -1 == null || unused - STEAM("Steam",false,true,-1,-1,100), - WATER("Water",false,false,Block.waterStill.blockID,Block.waterMoving.blockID,32), - LAVA("Lava",false,false,Block.lavaStill.blockID,Block.lavaMoving.blockID,20), - OIL("Oil",true,false,-1,-1,32),//BasicComponents.oilStill.blockID,BasicComponents.oilMoving.blockID), - Fuel("Fuel",true,false,-1,-1,40), - Air("Air",false,true,0,-1,100), - Methain("Methain",true,true,-1,-1,100), - BioFuel("BioFuel",true,false,-1,-1,40), - Coolent("Coolent",false,false,-1,-1,40), - NukeWaste("NukeWaste",false,false,-1,-1,20), - Ether("Ether",false,false,-1,-1,100), - DEFUALT("Empty",false,false,-1,-1,0); - public final boolean flamable;//can it catch on fire, not used but might be - public final boolean isGas;//is it a gas, used to find if it floats - public final int Still;//if there is a block of still liquid linked to this - public final int Moving;//if there is a block of moving liquid linked to this - public final String lName;//Default name for the liquid - public final int defaultPresure;//default pressure output of the liquid -private Liquid(String name,boolean flame,boolean gas,int block, int Moving,int dPressure) -{ - this.flamable = flame; - this.isGas = gas; - this.Still = block; - this.Moving = Moving; - this.lName = name; - this.defaultPresure = dPressure; -} -/** - * Only use this if you are converting from the old system - * Or have a special need for it - * @param id of liquid - * @return Liquid Object - */ - public static Liquid getLiquid(int id) - { - if (id >= 0 && id < Liquid.values().length) - { - return Liquid.values()[id]; - } - return DEFUALT; - } -public static Liquid getLiquidByBlock(int bBlock) { - for(int i = 0; i < Liquid.values().length;i++) - { - Liquid selected = Liquid.getLiquid(i); - if(bBlock == selected.Still) - { - return selected; - } - } - return Liquid.DEFUALT; -} -} diff --git a/1.4.2/src/common/basicpipes/pipes/api/MHelper.java b/1.4.2/src/common/basicpipes/pipes/api/MHelper.java deleted file mode 100644 index 922444b7..00000000 --- a/1.4.2/src/common/basicpipes/pipes/api/MHelper.java +++ /dev/null @@ -1,125 +0,0 @@ -package basicpipes.pipes.api; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import net.minecraftforge.common.ForgeDirection; - -public class MHelper { -/** - * you will have to tell your TileEntity to trade up if liquid or down if gas. I suggest having your onRecieveLiquid - * pump liquid one block up if you block is full. - * @param entity - entity at center of search - * @return an Array containing TileEntities around the TileEntity - */ - public static TileEntity[] getSourounding(World world, int x, int y, int z) - { - TileEntity[] list = new TileEntity[]{null,null,null,null,null,null}; - for(int i =0; i< 6;i++) - { - ForgeDirection d = ForgeDirection.getOrientation(i); - TileEntity aEntity = world.getBlockTileEntity(x+d.offsetX, y+d.offsetY, z+d.offsetZ); - if(aEntity instanceof TileEntity) - { - list[i] = aEntity; - } - } - return list; - } - /** - * Used to help trade liquid without having to do too much work - * @param blockEntity - tile entity trading the liquid - * @param type - liquid type being traded - * @param vol - the volume to be traded - * @return the remaining untraded liquid - */ - public static int shareLiquid(World world, int x, int y, int z,int vol,int max, Liquid type) - { - TileEntity ent = world.getBlockTileEntity(x, y, z); - int currentVol = vol; - - int tCount = 1; - boolean rise = type.isGas; - if(currentVol <= 0) - { - return 0; - } - - - ForgeDirection st = ForgeDirection.getOrientation(rise ? 1 : 0); - TileEntity first = world.getBlockTileEntity(x+st.offsetX, y+st.offsetY, z+st.offsetZ); - //trades to the first, bottom for liquid, top for gas - if(first instanceof IStorageTank && currentVol > 0 && ((IStorageTank) first).getStoredLiquid(type) < ((IStorageTank) first).getLiquidCapacity(type)) - { - currentVol = ((ILiquidConsumer) first).onReceiveLiquid(type, currentVol, st); - } - int vAve = currentVol; - TileEntity[] TeA = MHelper.getSourounding(world,x,y,z); - for(int i = 2; i < 6; i++) - { - if(TeA[i] instanceof IStorageTank) - { - vAve += ((IStorageTank)TeA[i]).getStoredLiquid(type); - tCount++; - } - } - vAve = (int)(vAve/tCount); - //trades to side if anything is left - for(int i = 2; i < 6;i++) - { - ForgeDirection side = ForgeDirection.getOrientation(i); - TileEntity sSide = world.getBlockTileEntity(x+side.offsetX, y+side.offsetY, z+side.offsetZ); - if(currentVol <= 0 || currentVol <= vAve) - { - break; - } - if(sSide instanceof IStorageTank &&((IStorageTank) sSide).getStoredLiquid(type) < vAve) - { - int tA = vAve -Math.max((vAve - currentVol), 0); - currentVol = ((ILiquidConsumer) sSide).onReceiveLiquid(type, tA, st) -tA + currentVol; - } - } - //trades to the opposite of the first if anything is left - /** - * need to find a way to solve it just trading back the ammount on next cycle - if(currentVol > 0) - { - TileEntity last = world.getBlockTileEntity(x+st.getOpposite().offsetX, y+st.getOpposite().offsetY, z+st.getOpposite().offsetZ); - if(last instanceof IStorageTank && currentVol == max) - { - currentVol = ((ILiquidConsumer) last).onReceiveLiquid(type, max/10, st.getOpposite()) + currentVol -(max/10); - } - } - */ - return Math.max(currentVol,0); - } - /** - * - * @param entity - entity in question - * @return 1-4 if corner 0 if not a corner - * you have to figure out which is which depending on what your using this for - * 1 should be north east 2 south east - */ - public static int corner(TileEntity entity) - { - TileEntity[] en = getSourounding(entity.worldObj, entity.xCoord,entity.yCoord,entity.zCoord); - if(en[4] != null && en[2] != null && en[5] == null && en[3] == null) - { - return 3; - } - if(en[2] != null && en[5] != null && en[3] == null && en[4] == null) - { - return 4; - } - if(en[5] != null && en[3] != null && en[4] == null && en[2] == null) - { - return 1; - } - if(en[3] != null && en[4] != null && en[2] == null && en[5] == null) - { - return 2; - } - - return 0; - - } -} diff --git a/1.4.2/src/common/mcpmod.info b/1.4.2/src/common/mcpmod.info deleted file mode 100644 index 953d942a..00000000 --- a/1.4.2/src/common/mcpmod.info +++ /dev/null @@ -1,17 +0,0 @@ -[ -{ - "modid": "mcp", - "name": "Minecraft Coder Pack", - "description": "Modding toolkit to decompile and deobfuscate the Minecraft client and server files.", - "version": "7.19", - "mcversion": "1.4.2", - "logoFile": "/mcp.png", - "url": "http://mcp.ocean-labs.de/", - "updateUrl": "", - "authors": ["Searge", "ProfMobius", "IngisKahn", "Fesh0r", "ZeuX", "R4wk", "Others"], - "credits": "Made by the MCP team", - "parent": "", - "screenshots": [], - "dependencies": [] -} -] diff --git a/1.4.2/src/common/steampower/BlockMachine.java b/1.4.2/src/common/steampower/BlockMachine.java deleted file mode 100644 index a0bd2c3d..00000000 --- a/1.4.2/src/common/steampower/BlockMachine.java +++ /dev/null @@ -1,239 +0,0 @@ -package steampower; - -import java.util.Random; - -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityItem; -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.NBTTagCompound; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.TileEntityFireBox; - -public class BlockMachine extends universalelectricity.prefab.BlockMachine -{ - - private Random mRandom = new Random(); - private static boolean keepFurnaceInventory = true; - - public BlockMachine(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(1f); - this.setResistance(3f); - } - @Override - public int damageDropped(int metadata) - { - return metadata; - } - @Override - public void randomDisplayTick(World par1World, int x, int y, int z, Random par5Random) - { - TileEntity tileEntity = par1World.getBlockTileEntity(x, y, z); - - if(tileEntity instanceof TileEntityFireBox) - { - if(((TileEntityFireBox)tileEntity).generateRate > 0) - { - int var6 = ((TileEntityFireBox) tileEntity).getDirection(); - float var7 = (float)x + 0.5F; - float var8 = (float)y + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F; - float var9 = (float)z + 0.5F; - float var10 = 0.52F; - float var11 = par5Random.nextFloat() * 0.6F - 0.3F; - - if (var6 == 4) - { - par1World.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 2) - { - par1World.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 1) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); - } - else if (var6 == 3) - { - par1World.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - par1World.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); - } - } - } - } - - @Override - public boolean onUseWrench(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) - { - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(par2, par3, par4); - - //Reorient the block - switch(tileEntity.getDirection()) - { - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - case 4: tileEntity.setDirection(1); break; - } - - return true; - } - /** - * Called upon block activation (left or right click on the block.). The three integers represent x,y,z of the - * block. - */ - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer) - { - if (par1World.isRemote) - { - return true; - } - else - { - TileEntity blockEntity = (TileEntity)par1World.getBlockTileEntity(x, y, z); - - if (blockEntity != null) - { - - if(blockEntity instanceof TileEntityBoiler) - { - TileEntity var6 = (TileEntityBoiler)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 1, par1World, x, y, z); - } - if(blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox)par1World.getBlockTileEntity(x, y, z); - par5EntityPlayer.openGui(SteamPowerMain.instance, 0, par1World, x, y, z); - } - } - - return true; - } - } - @Override - public TileEntity createNewTileEntity(World var1,int meta) - { - switch(meta) - { - case 1: return new TileEntityBoiler(); - case 2: return new TileEntityFireBox(); - case 3: return new TileEntityFireBox(); - case 4: return new TileEntityFireBox(); - case 5: return new TileEntityFireBox(); - } - return null; - } - - /** - * Called when the block is placed in the world. - */ - @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; - int metadata = par1World.getBlockMetadata(x, y, z); - TileEntityMachine tileEntity = (TileEntityMachine)par1World.getBlockTileEntity(x, y, z); - - switch (angle) - { - case 0: tileEntity.setDirection(1); break; - case 1: tileEntity.setDirection(2); break; - case 2: tileEntity.setDirection(3); break; - case 3: tileEntity.setDirection(4); break; - } - } - /** - * Called whenever the block is removed. - */ - @Override - public void breakBlock(World par1World, int par2, int par3, int par4,int par5, int par6){ - if (!keepFurnaceInventory) - { - TileEntityMachine var5 = null; - TileEntity entityBox = par1World.getBlockTileEntity(par2, par3, par4); - if(entityBox instanceof TileEntityFireBox) - { - var5 = (TileEntityFireBox)entityBox; - } - else if(entityBox instanceof TileEntityBoiler) - { - var5 = (TileEntityBoiler)entityBox; - } - if (var5 != null) - { - for (int var6 = 0; var6 < var5.getSizeInventory(); ++var6) - { - ItemStack var7 = var5.getStackInSlot(var6); - - if (var7 != null) - { - float var8 = this.mRandom.nextFloat() * 0.8F + 0.1F; - float var9 = this.mRandom.nextFloat() * 0.8F + 0.1F; - float var10 = this.mRandom.nextFloat() * 0.8F + 0.1F; - - while (var7.stackSize > 0) - { - int var11 = this.mRandom.nextInt(21) + 10; - - if (var11 > var7.stackSize) - { - var11 = var7.stackSize; - } - - var7.stackSize -= var11; - EntityItem var12 = new EntityItem(par1World, (double)((float)par2 + var8), (double)((float)par3 + var9), (double)((float)par4 + var10), new ItemStack(var7.itemID, var11, var7.getItemDamage())); - - if (var7.hasTagCompound()) - { - var12.item.setTagCompound((NBTTagCompound)var7.getTagCompound().copy()); - } - - float var13 = 0.05F; - var12.motionX = (double)((float)this.mRandom.nextGaussian() * var13); - var12.motionY = (double)((float)this.mRandom.nextGaussian() * var13 + 0.2F); - var12.motionZ = (double)((float)this.mRandom.nextGaussian() * var13); - par1World.spawnEntityInWorld(var12); - } - } - } - } - } - - super.breakBlock(par1World, par2, par3, par4, par5, par6); - } - - @Override - public String getTextureFile() - { - return "/EUIClient/textures/blocks/blocks.png"; - } - @Override - public boolean isOpaqueCube() - { - return false; - } - @Override - public boolean renderAsNormalBlock() - { - return false; - } - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - -} diff --git a/1.4.2/src/common/steampower/ContainerFake.java b/1.4.2/src/common/steampower/ContainerFake.java deleted file mode 100644 index 132a9246..00000000 --- a/1.4.2/src/common/steampower/ContainerFake.java +++ /dev/null @@ -1,47 +0,0 @@ -package steampower; - -import net.minecraft.src.Container; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Slot; -import net.minecraft.src.TileEntity; - -public class ContainerFake extends Container -{ - private IInventory tileEntity; - - public ContainerFake(InventoryPlayer par1InventoryPlayer, IInventory tileEntity) - { - this.tileEntity = tileEntity; - // this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - return null; - } -} diff --git a/1.4.2/src/common/steampower/ItemMachine.java b/1.4.2/src/common/steampower/ItemMachine.java deleted file mode 100644 index 9be0d49f..00000000 --- a/1.4.2/src/common/steampower/ItemMachine.java +++ /dev/null @@ -1,65 +0,0 @@ -package steampower; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.src.*; - -public class ItemMachine extends ItemBlock { - - public ItemMachine(int id) { - super(id); - setMaxDamage(0); - setHasSubtypes(true); - this.setIconIndex(21); - this.setCreativeTab(CreativeTabs.tabBlock); - } - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - - par3List.add(new ItemStack(this, 1, 1)); - par3List.add(new ItemStack(this, 1, 2)); - - } - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return SteamPowerMain.textureFile+"Items.png"; - } - @Override - public int getIconFromDamage(int par1) - { - switch(par1) - { - case 1: return 23; - case 2: return 22; - case 15: return 25; - } - return this.iconIndex+par1; - } - @Override - public int getMetadata(int metadata) - { - return metadata; - } - @Override - public String getItemName() - { - return "Machine"; - } - @Override - public String getItemNameIS(ItemStack par1ItemStack) - { - int var3 = par1ItemStack.getItemDamage(); - switch(var3) - { - case 0: return "CoalProcessor"; - case 1: return "Boiler"; - case 2: return "FireBox"; - case 3: return "SteamGen"; - case 15: return "EnergyNuller"; - } - return this.getItemName(); - } - } - diff --git a/1.4.2/src/common/steampower/SteamPowerMain.java b/1.4.2/src/common/steampower/SteamPowerMain.java deleted file mode 100644 index 7167be40..00000000 --- a/1.4.2/src/common/steampower/SteamPowerMain.java +++ /dev/null @@ -1,153 +0,0 @@ -package steampower; - -import java.io.File; - -import net.minecraft.src.Block; -import net.minecraft.src.CraftingManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraftforge.common.Configuration; -import net.minecraftforge.oredict.ShapedOreRecipe; -import steampower.turbine.BlockGenerator; -import steampower.turbine.BlockSteamPiston; -import steampower.turbine.ItemEngine; -import steampower.turbine.TileEntitytopGen; -import universalelectricity.prefab.network.PacketManager; -import basicpipes.BasicPipesMain; -import cpw.mods.fml.common.Mod; -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.SidedProxy; -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.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; - -@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") -@NetworkMod(channels = { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPowerMain { - static Configuration config = new Configuration((new File( - cpw.mods.fml.common.Loader.instance().getConfigDir(), - "/UniversalElectricity/SteamPower.cfg"))); - private static int BlockID = configurationProperties(); - public static int EngineItemID; - public static int EngineID; - public static int genID; - public static int genOutput; - public static int steamOutBoiler; - public static int pipeLoss; - public static int boilerHeat; - public static int fireOutput; - public static final String channel = "SPpack"; - public static Block machine = new BlockMachine(BlockID) - .setBlockName("machine"); - public static Block engine = new BlockSteamPiston(EngineID) - .setBlockName("SteamEngien"); - public static Block gen = new BlockGenerator(genID).setBlockName("ElecGen"); - public static Item itemEngine = new ItemEngine(EngineItemID) - .setItemName("SteamEngine"); - - public static SteamPowerMain instance; - - @SidedProxy(clientSide = "steampower.SteamClientProxy", serverSide = "steampower.SteamProxy") - public static SteamProxy proxy; - public static String textureFile = "/textures/"; - - public static int configurationProperties() { - config.load(); - BlockID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "MachinesID", 3030).value); - EngineItemID = Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, - "EngineItem", 30308).value); - EngineID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "SteamEngineID", 3031).value); - genID = Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, - "ElecGenID", 3032).value); - genOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, - "genOutputWattsmax", 1000).value); - steamOutBoiler = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); - boilerHeat = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); - fireOutput = Integer.parseInt(config.get( - Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); - config.save(); - return BlockID; - } - - @PreInit - public void preInit(FMLPreInitializationEvent event) { - instance = this; - NetworkRegistry.instance().registerGuiHandler(this, this.proxy); - proxy.preInit(); - GameRegistry.registerBlock(machine, ItemMachine.class); - GameRegistry.registerBlock(engine); - GameRegistry.registerBlock(gen); - } - - @Init - public void load(FMLInitializationEvent evt) { - proxy.init(); - GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); - // Names............... - LanguageRegistry.addName((new ItemStack(machine, 1, 1)), "Boiler"); - LanguageRegistry.addName((new ItemStack(gen, 1, 0)), "Generator"); - LanguageRegistry.addName((new ItemStack(machine, 1, 2)), "FireBox"); - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), - "SteamPiston"); - - } - - @PostInit - public void postInit(FMLPostInitializationEvent event) { - - proxy.postInit(); - // Crafting - try { - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(gen, 1), - new Object[] { "@T@", "OVO", "@T@", 'T', - new ItemStack(BasicPipesMain.rod, 1), '@', - "plateSteel", 'O', "basicCircuit", 'V', - "motor" })); - /** - * TileEntityBoiler();<- metadata 1 TileEntityFireBox();<-metadata - * 2-5 - */ - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(machine, 1, 1), - new Object[] { "TT", "VV", "TT", 'T', - new ItemStack(BasicPipesMain.parts, 1, 6), - 'V', - new ItemStack(BasicPipesMain.parts, 1, 7) })); - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(machine, 1, 2), - new Object[] { "@", "F", 'F', Block.stoneOvenIdle, - '@', "plateSteel" })); - CraftingManager - .getInstance() - .getRecipeList() - .add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), - new Object[] { "GGG", "VPV", "@T@", 'T', - new ItemStack(BasicPipesMain.parts, 1, 1), - 'G', BasicPipesMain.rod, '@', "plateSteel", - 'P', Block.pistonBase, 'V', - new ItemStack(BasicPipesMain.parts, 1, 7), - 'M', "motor" })); - } catch (Exception e) { - e.printStackTrace(); - System.out.print("UE based recipes not loaded"); - } - } - -} diff --git a/1.4.2/src/common/steampower/SteamProxy.java b/1.4.2/src/common/steampower/SteamProxy.java deleted file mode 100644 index 9bf6e79e..00000000 --- a/1.4.2/src/common/steampower/SteamProxy.java +++ /dev/null @@ -1,67 +0,0 @@ -package steampower; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.ContainerFireBox; -import steampower.burner.TileEntityFireBox; -import steampower.turbine.TileEntityGen; -import steampower.turbine.TileEntitySteamPiston; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; - -public class SteamProxy implements IGuiHandler{ - - public void preInit() - { - - } - public void init() - { - GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); - GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); - GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); - GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); - - } - 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) - { - case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); - } - } - - 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) - { - case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - default: return new ContainerFake(player.inventory, (IInventory) tileEntity); - } - } - - return null; - } -} diff --git a/1.4.2/src/common/steampower/TileEntityMachine.java b/1.4.2/src/common/steampower/TileEntityMachine.java deleted file mode 100644 index 20345c5a..00000000 --- a/1.4.2/src/common/steampower/TileEntityMachine.java +++ /dev/null @@ -1,220 +0,0 @@ -package steampower; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.NBTTagList; -import net.minecraft.src.Packet; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.core.Vector3; -import universalelectricity.prefab.network.PacketManager; -public class TileEntityMachine extends TileEntity implements IInventory, ISidedInventory -{ - public int facing = 0; - private int count = 0; - public ItemStack[] storedItems = new ItemStack[this.getInvSize()]; - private int getInvSize() { - return 1; - } - public int getDirection() - { - return this.facing; - } - - public void setDirection(int i) - { - this.facing = i; - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("facing", this.facing); - //inventory - NBTTagList var2 = new NBTTagList(); - - for (int var3 = 0; var3 < this.storedItems.length; ++var3) - { - if (this.storedItems[var3] != null) - { - NBTTagCompound var4 = new NBTTagCompound(); - var4.setByte("Slot", (byte)var3); - this.storedItems[var3].writeToNBT(var4); - var2.appendTag(var4); - } - } - - par1NBTTagCompound.setTag("Items", var2); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - //inventory - NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); - this.storedItems = new ItemStack[this.getSizeInventory()]; - - for (int var3 = 0; var3 < var2.tagCount(); ++var3) - { - NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); - byte var5 = var4.getByte("Slot"); - - if (var5 >= 0 && var5 < this.storedItems.length) - { - this.storedItems[var5] = ItemStack.loadItemStackFromNBT(var4); - } - } - //vars - this.facing = par1NBTTagCompound.getInteger("facing"); - } - @Override - public boolean canUpdate() - { - return true; - } - public Object[] getSendData() - { - return new Object[]{}; - } - public boolean needUpdate() - { - return true; - } - @Override - public void updateEntity() - { - super.updateEntity(); - - if(count ++ >= 10 && !worldObj.isRemote && needUpdate()) - {count = 0; - Packet packet = PacketManager.getPacket(SteamPowerMain.channel,this, getSendData()); - PacketManager.sendPacketToClients(packet, worldObj, Vector3.get(this), 40); - } - } - - - ////////////////////////// - //I Inventory shit - ///////////////////////// - public int getSizeInventory() - { - return this.storedItems.length; - } - - /** - * Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended. *Isn't - * this more of a set than a get?* - */ - public int getInventoryStackLimit() - { - return 64; - } - - - /** - * Do not make give this method the name canInteractWith because it clashes with Container - */ - public boolean isUseableByPlayer(EntityPlayer par1EntityPlayer) - { - return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : par1EntityPlayer.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; - } - - /** - * Returns the stack in slot i - */ - public ItemStack getStackInSlot(int par1) - { - return this.storedItems[par1]; - } - - public ItemStack decrStackSize(int par1, int par2) - { - if (this.storedItems[par1] != null) - { - ItemStack var3; - - if (this.storedItems[par1].stackSize <= par2) - { - var3 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var3; - } - else - { - var3 = this.storedItems[par1].splitStack(par2); - - if (this.storedItems[par1].stackSize == 0) - { - this.storedItems[par1] = null; - } - - return var3; - } - } - else - { - return null; - } - } - - /** - * When some containers are closed they call this on each slot, then drop whatever it returns as an EntityItem - - * like when you close a workbench GUI. - */ - public ItemStack getStackInSlotOnClosing(int par1) - { - if (this.storedItems[par1] != null) - { - ItemStack var2 = this.storedItems[par1]; - this.storedItems[par1] = null; - return var2; - } - else - { - return null; - } - } - - /** - * Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections). - */ - public void setInventorySlotContents(int par1, ItemStack par2ItemStack) - { - this.storedItems[par1] = par2ItemStack; - - if (par2ItemStack != null && par2ItemStack.stackSize > this.getInventoryStackLimit()) - { - par2ItemStack.stackSize = this.getInventoryStackLimit(); - } - } - @Override - public int getStartInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public int getSizeInventorySide(ForgeDirection side) { - // TODO Auto-generated method stub - return 0; - } - @Override - public String getInvName() { - // TODO Auto-generated method stub - return "SteamMachine"; - } - @Override - public void openChest() { - // TODO Auto-generated method stub - - } - @Override - public void closeChest() { - // TODO Auto-generated method stub - - } -} \ No newline at end of file diff --git a/1.4.2/src/common/steampower/boiler/TileEntityBoiler.java b/1.4.2/src/common/steampower/boiler/TileEntityBoiler.java deleted file mode 100644 index 2e783b87..00000000 --- a/1.4.2/src/common/steampower/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,249 +0,0 @@ -package steampower.boiler; -import net.minecraft.src.Block; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IHeatProducer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IStorageTank; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,ILiquidProducer, IStorageTank -{ - public int steam = 0; - public int water = 0; - public int heat = 0; - public int hullHeat = 0; - public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; - public int tankCount = 0; - public int tickCount = 0; - - //----------------------------- - //Update stuff - //----------------------------- - @Override - public void updateEntity() - { - //update connection list used for rendering - this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - this.tankCount = 0; - for(int i =0; i < connectedBlocks.length; i++) - { - if(connectedBlocks[i] != null) - { - tankCount++; - } - }//end connection update - if(tickCount++ >= 10 && !worldObj.isRemote) - { - tickCount = 0; - - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if(ent instanceof IHeatProducer) - { - this.heat = (int) Math.min(((IHeatProducer)ent).onProduceHeat(250, ForgeDirection.UP)+heat,2000); - }else - if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) - { - this.heat = Math.min(90+heat,2000); - } - if(hullHeat < 10000) - { - int mHeat = 10000 - hullHeat; - int hHeat = mHeat - Math.max((mHeat - this.heat),0); - hullHeat = Math.min(hullHeat + hHeat,10000); - this.heat -=hHeat; - }else - { - if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - this.water--; - this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); - this.heat -= 2000; - } - this.hullHeat-=5; - } - this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); - this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); - } - super.updateEntity(); - } - //----------------------------- - //Liquid stuff - //----------------------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) - { - if(type == Liquid.WATER) - { - if(this.water < this.getLiquidCapacity(Liquid.WATER)) - { - int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); - this.water += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - }else - if(type == Liquid.STEAM) - { - if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); - this.steam += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { - if(type == Liquid.WATER) - { - return true; - }else - if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return 14; - }else - if(type == Liquid.STEAM) - { - return 140; - } - return 0; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - //TODO setup the actual math for this - if(vol < this.steam) - { - this.steam -= vol; - return vol; - }else - if(this.steam >= 1) - { - this.steam -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return 100; - } - return 0; - } - //----------------------------- - //Data - //----------------------------- - public Object[] getSendData() - { - return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try{ - this.water = dataStream.readInt(); - this.steam = dataStream.readInt(); - this.heat = dataStream.readInt(); - this.hullHeat = dataStream.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - } - - } - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("water", this.water); - par1NBTTagCompound.setInteger("steam", this.steam); - par1NBTTagCompound.setInteger("heat", this.heat); - par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.water = par1NBTTagCompound.getInteger("water"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.heat = par1NBTTagCompound.getInteger("heat"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - -} diff --git a/1.4.2/src/common/steampower/burner/ContainerFireBox.java b/1.4.2/src/common/steampower/burner/ContainerFireBox.java deleted file mode 100644 index 66353850..00000000 --- a/1.4.2/src/common/steampower/burner/ContainerFireBox.java +++ /dev/null @@ -1,42 +0,0 @@ -package steampower.burner; - -import net.minecraft.src.*; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} diff --git a/1.4.2/src/common/steampower/burner/TileEntityFireBox.java b/1.4.2/src/common/steampower/burner/TileEntityFireBox.java deleted file mode 100644 index 38fdf37f..00000000 --- a/1.4.2/src/common/steampower/burner/TileEntityFireBox.java +++ /dev/null @@ -1,214 +0,0 @@ -package steampower.burner; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import steampower.SteamPowerMain; -import steampower.TileEntityMachine; -import steampower.boiler.TileEntityBoiler; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IHeatProducer; -import basicpipes.pipes.api.MHelper; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver,IInventory, ISidedInventory, IHeatProducer -{ - //max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = {null, null, null, null, null, null}; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - //Current generation rate based on hull heat. In TICKS. - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - private int getInvSize() { - return 1; - } - public int getTickInterval() - { - return 5; - - } - public boolean needUpdate() - { - return true; - } - public void updateEntity() - { - super.updateEntity(); - if(count++ >= 10) - { - count = 0; - addConnection(); - if(!worldObj.isRemote) - { - sharCoal(); - } - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if(blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - if (!this.worldObj.isRemote){ - - - maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits*10); - - //The top slot is for recharging items. Check if the item is a electric item. If so, recharge it. - if (this.storedItems[0] != null && isConnected) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int)(this.generateRate*20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - //Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime --; - if(isConnected) - { - this.generateRate = Math.min(this.generateRate+Math.min((this.generateRate)+1, 1), this.maxGenerateRate/10); - } - } - //Loose heat when the generator is not connected or if there is no coal in the inventory. - if(this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate-5, 0); - } - } - } - - //gets all connected fireBoxes and shares its supply of coal - public void sharCoal(){ - for(int i =0; i<6;i++) - { - - if(connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if(this.storedItems[0] != null) - { - if(this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) - { - if(connectedConsumer.storedItems[0] != null) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if(connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize)/2; - if(this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); - connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; - this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(),1,this.storedItems[0].getItemDamage()); - this.storedItems[0].stackSize -= 1; - } - } - } - } - } - - - } - public void addConnection() - { - connectedUnits = 0; - TileEntity[] aEntity = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - for(int i = 0; i<6; i++) - { - - - if(aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity[i]; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - } - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int)this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int)this.generateRate); - } - @Override - public String getInvName() { - return "FireBox"; - } - public float onProduceHeat(float jouls, ForgeDirection side) { - if(side == ForgeDirection.UP) - { - return Math.min(generateRate,jouls); - } - return 0; - } - @Override - public Object[] getSendData() - { - return new Object[]{(int)facing,(int)connectedUnits,(int)generateRate,(int)itemCookTime}; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - facing = dataStream.readInt(); - connectedUnits = dataStream.readInt(); - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } -} diff --git a/1.4.2/src/common/steampower/mcmod.info b/1.4.2/src/common/steampower/mcmod.info deleted file mode 100644 index 922b39f5..00000000 --- a/1.4.2/src/common/steampower/mcmod.info +++ /dev/null @@ -1,21 +0,0 @@ -[ -{ - "modid": "SteamPower", - "name": "Steam Power", - "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", - "version": "1.8", - "mcversion": "1.3.2", - "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", - "updateUrl": "", - "authors": [ - "DarkGuardsman" - ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": ["UE","BasicPipes" - ] -} -] \ No newline at end of file diff --git a/1.4.2/src/common/steampower/turbine/BlockGenerator.java b/1.4.2/src/common/steampower/turbine/BlockGenerator.java deleted file mode 100644 index 008c12a5..00000000 --- a/1.4.2/src/common/steampower/turbine/BlockGenerator.java +++ /dev/null @@ -1,68 +0,0 @@ -package steampower.turbine; - -import java.util.ArrayList; - -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 steampower.ItemRenderHelperS; - -public class BlockGenerator extends universalelectricity.prefab.BlockMachine { - - public BlockGenerator(int id) { - super("Generator", id, Material.iron); - this.setCreativeTab(CreativeTabs.tabBlock); - } - - @Override - public void addCreativeItems(ArrayList itemList) { - itemList.add(new ItemStack(this, 1, 0)); - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, - EntityLiving par5EntityLiving) { - int angle = MathHelper - .floor_double((par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - world.setBlockAndMetadataWithUpdate(x, y, z, blockID, angle, true); - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - int angle = MathHelper - .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if (metadata < 3) { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); - } else { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public int getRenderType() { - return ItemRenderHelperS.renderID; - } - - @Override - public TileEntity createNewTileEntity(World world) { - return new TileEntityGen(); - } -} diff --git a/1.4.2/src/common/steampower/turbine/BlockSteamPiston.java b/1.4.2/src/common/steampower/turbine/BlockSteamPiston.java deleted file mode 100644 index 8a78297d..00000000 --- a/1.4.2/src/common/steampower/turbine/BlockSteamPiston.java +++ /dev/null @@ -1,114 +0,0 @@ -package steampower.turbine; - -import java.util.Random; - -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; -import steampower.SteamPowerMain; - -public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine { - - public BlockSteamPiston(int par1) { - super("SteamEngine", par1, Material.iron); - - } - - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - return false; - - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) { - int angle = MathHelper - .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if (metadata < 3) { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); - } else { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - - public TileEntity createNewTileEntity(World var1) { - return null; - } - - public void breakBlock(World world, int x, int y, int z, int par5, int par6) { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if (meta < 4) { - if (world.getBlockId(x, y + 1, z) == this.blockID) { - if (world.getBlockMetadata(x, y, z) > 4) { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } else if (meta > 4) { - if (world.getBlockId(x, y - 1, z) == this.blockID) { - if (world.getBlockMetadata(x, y, z) < 4) { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public int getRenderType() { - return -1; - } - - @Override - public TileEntity createNewTileEntity(World world, int metadata) { - if (metadata >= 0 && metadata < 4) { - return new TileEntitySteamPiston(); - } - if (metadata == 14) { - return new TileEntitytopGen(); - } - return null; - } - - public void onNeighborBlockChange(World par1World, int par2, int par3, - int par4, int par5) { - int meta = par1World.getBlockMetadata(par2, par3, par4); - if (meta < 4) { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } else { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - } - - @Override - public int idDropped(int par1, Random par2Random, int par3) { - return SteamPowerMain.itemEngine.shiftedIndex; - } - - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3 + 1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isGroundCover()) - && (var6 == 0 || blocksList[var6].blockMaterial.isGroundCover()); - } -} diff --git a/1.4.2/src/common/steampower/turbine/ItemEngine.java b/1.4.2/src/common/steampower/turbine/ItemEngine.java deleted file mode 100644 index ec8b6ae8..00000000 --- a/1.4.2/src/common/steampower/turbine/ItemEngine.java +++ /dev/null @@ -1,112 +0,0 @@ -package steampower.turbine; - -import java.util.List; - -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.MathHelper; -import net.minecraft.src.World; -import steampower.SteamPowerMain; -import steampower.TileEntityMachine; - -public class ItemEngine extends Item { - public ItemEngine(int par1) { - super(par1); - this.maxStackSize = 5; - this.setCreativeTab(CreativeTabs.tabBlock); - this.setIconIndex(21); - } - - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, - List par3List) { - par3List.add(new ItemStack(this, 1, 0)); - } - - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return SteamPowerMain.textureFile + "Items.png"; - } - - public boolean onItemUse(ItemStack itemStack, EntityPlayer ePlayer, - World world, int x, int y, int z, int par7, float par8, float par9, - float par10) { - int var11 = world.getBlockId(x, y, z); - int BlockID = SteamPowerMain.EngineID; - - if (var11 == Block.snow.blockID) { - par7 = 1; - } else if (var11 != Block.vine.blockID - && var11 != Block.tallGrass.blockID - && var11 != Block.deadBush.blockID - && (Block.blocksList[var11] == null || !Block.blocksList[var11] - .isBlockReplaceable(world, x, y, z))) { - if (par7 == 0) { - --y; - } - - if (par7 == 1) { - ++y; - } - - if (par7 == 2) { - --z; - } - - if (par7 == 3) { - ++z; - } - - if (par7 == 4) { - --x; - } - - if (par7 == 5) { - ++x; - } - } - - if (itemStack.stackSize == 0) { - return false; - } else if (!ePlayer.func_82247_a(x, y, z, par7, itemStack)) { - return false; - } else if (y == 255 - && Block.blocksList[BlockID].blockMaterial.isSolid()) { - return false; - } else if (world.canPlaceEntityOnSide(BlockID, x, y, z, false, par7, - ePlayer)) { - Block var12 = Block.blocksList[BlockID]; - int angle = MathHelper - .floor_double((ePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - switch (angle) { - case 0: - world.setBlockAndMetadata(x, y, z, var12.blockID, 0); - break; - case 1: - world.setBlockAndMetadata(x, y, z, var12.blockID, 1); - break; - case 2: - world.setBlockAndMetadata(x, y, z, var12.blockID, 2); - break; - case 3: - world.setBlockAndMetadata(x, y, z, var12.blockID, 3); - break; - } - int meta = world.getBlockMetadata(x, y, z); - // ePlayer.sendChatToPlayer("A:"+angle+" M:"+meta); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.setBlockAndMetadataWithNotify(x, y + 1, z, var12.blockID, 14); - world.notifyBlocksOfNeighborChange(x, y, z, var12.blockID); - world.editingBlocks = false; - --itemStack.stackSize; - - return true; - } else { - return false; - } - } -} diff --git a/1.4.2/src/common/steampower/turbine/TileEntityGen.java b/1.4.2/src/common/steampower/turbine/TileEntityGen.java deleted file mode 100644 index 166c762b..00000000 --- a/1.4.2/src/common/steampower/turbine/TileEntityGen.java +++ /dev/null @@ -1,185 +0,0 @@ -package steampower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.electricity.ElectricityManager; -import universalelectricity.implement.IConductor; -import universalelectricity.implement.IElectricityProducer; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.IMechanical; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntityGen extends TileEntityMachine implements IPacketReceiver, IMechanical,IElectricityProducer -{ - ForgeDirection facing = ForgeDirection.DOWN; - - public int force = 0; - public int aForce = 0; - public int pos = 0; - public int disableTicks = 0; - public double genAmmount = 0; - public int tCount = 0; - public boolean empProf = false; - - IConductor[] wires = {null,null,null,null,null,null}; - public boolean needUpdate() - { - return false; - } - @Override - public void updateEntity() - { - - - this.genAmmount = force/this.getVoltage(); - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - int wireCount = 0; - switch(meta) - { - case 0: nMeta = 2;break; - case 1: nMeta = 5;break; - case 2: nMeta = 3;break; - case 3: nMeta = 4;break; - } - facing = ForgeDirection.getOrientation(nMeta).getOpposite(); - if(genAmmount > 0) - { - //worldObj.setBlock(xCoord, yCoord+1, zCoord, 1); - } - for(int i = 0; i < 6; i++) - { - ForgeDirection side = ForgeDirection.UNKNOWN; - switch(i) - { - case 0: side = ForgeDirection.UP;break; - //case 1: side = ForgeDirection.DOWN;break; - case 2: side = ForgeDirection.NORTH;break; - case 3: side = ForgeDirection.EAST;break; - case 4: side = ForgeDirection.SOUTH;break; - case 5: side = ForgeDirection.WEST;break; - } - if(side != facing && side != facing.getOpposite()) - { - TileEntity tileEntity = worldObj.getBlockTileEntity(xCoord+side.offsetX, yCoord+side.offsetY, zCoord+side.offsetZ); - - if (tileEntity instanceof IConductor) - { - if (ElectricityManager.instance.getElectricityRequired(((IConductor)tileEntity).getNetwork()) > 0) - { - this.wires[i] = (IConductor)tileEntity; - wireCount++; - } - else - { - this.wires[i] = null; - } - } - else - { - this.wires[i] = null; - } - } - - } - for(int side =0; side < 6; side++) - { - if(wires[side] instanceof IConductor) - { - double max = wires[side].getMaxAmps(); - ElectricityManager.instance.produceElectricity(this, wires[side],Math.min(genAmmount/wireCount,max), this.getVoltage()); - } - } - super.updateEntity(); - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput data) { - // TODO Auto-generated method stub - - } - //------------------------------ - //Mechanics - //------------------------------ - @Override - public int getForceSide(ForgeDirection side) { - if(side == facing.getOpposite()) - { - return aForce; - } - return 0; - } - - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(side == facing.getOpposite()) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(side == facing) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.force = force; - return force; - } - - @Override - public int getAnimationPos() { - return pos; - } - //------------------------------ - //Electric - //------------------------------ - @Override - public void onDisable(int duration) - { - this.disableTicks = duration; - } - - @Override - public boolean isDisabled() { - if(disableTicks-- <= 0) - { - return false; - } - return true; - } - - @Override - public double getVoltage() { - return 120; - } - - @Override - public boolean canConnect(ForgeDirection side) { - if(side != ForgeDirection.DOWN && side != facing && side != facing.getOpposite()) - { - return true; - } - return false; - } - -} diff --git a/1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java b/1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java deleted file mode 100644 index b3f84578..00000000 --- a/1.4.2/src/common/steampower/turbine/TileEntitySteamPiston.java +++ /dev/null @@ -1,330 +0,0 @@ -package steampower.turbine; - -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import universalelectricity.prefab.network.IPacketReceiver; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.IMechanical; -import basicpipes.pipes.api.Liquid; - -import com.google.common.io.ByteArrayDataInput; - -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,ILiquidConsumer,ILiquidProducer,IMechanical -{ - public int force = 0; - public int aForce = 0; - public int bForce = 0; - private int frictionLoad = 10; - public int steam = 0; - public int water = 0; - 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; - public int tCount = 0; - private ForgeDirection frontDir; - public TileEntity ff; - public TileEntity bb; - private int pWater = 0; - private int pSteam = 0; - private int pForce = 0; - public int pCount = 0; - public boolean running= false; - - @Override - public void updateEntity() - { - super.updateEntity(); - if(tickCount++ >=10) - {tickCount = 0; - //this.pos += 1; if(pos >= 8){pos = 0;} - //++tCount;if(tCount > 120){tCount = 0;} - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - - switch(meta) - { - case 0: nMeta = 2;break; - case 1: nMeta = 5;break; - case 2: nMeta = 3;break; - case 3: nMeta = 4;break; - } - frontDir = ForgeDirection.getOrientation(nMeta); - ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); - bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().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(!worldObj.isRemote) - { - if(this.runTime < 1 && this.steam > 0) - { - this.steam--; - this.runTime=60; - } - if(bb instanceof IMechanical) - { - if(((IMechanical) bb).canOutputSide(frontDir)) - { - this.bForce = ((IMechanical) bb).getForce(); - }else - if( bb instanceof TileEntitySteamPiston) - { - if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) - { - this.bForce = ((TileEntitySteamPiston) bb).getForce(); - } - } - else - { - this.bForce = 0; - } - } - if(this.runTime > 0) - { - genRate=Math.min(genRate + 1, 100); - this.runTime-=1; - this.force = Math.min(genRate * 10,1000); - this.aForce = Math.max(force - this.frictionLoad+bForce,0); - } - if(runTime == 0 && this.steam == 0) - { - genRate = Math.max(genRate--, 0); - force= Math.max(force-=10, 0);; - } - - if(ff instanceof IMechanical) - { - if(((IMechanical) ff).canInputSide(frontDir.getOpposite())) - { - ((IMechanical) ff).applyForce(this.aForce); - }else - { - - } - } - pWater = this.water; - pSteam = this.steam; - pForce = this.force; - - - } - } - } - - - //------------------- - //Liquid and mechanical stuff - //---------------- - @Override - public int getForceSide(ForgeDirection side) { - return aForce; - } - - @Override - public boolean canOutputSide(ForgeDirection side) { - if(frontDir.getOpposite() == side) - { - return true; - } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) { - if(frontDir == side) - { - return true; - } - return false; - } - - @Override - public int applyForce(int force) { - this.bForce = force; - return aForce; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.WATER) - { - if(this.water > 0) - { - this.water -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } - - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); - this.steam += vol - rejectedSteam; - return rejectedSteam; - } - return 0; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return this.maxWater; - }else - if(type == Liquid.STEAM) - { - return this.maxSteam; - } - return 0; - } - //------------------- - //Data - //---------------- - public Object[] getSendData() - { - return new Object[]{steam,water,force,aForce,genRate,runTime}; - } - public boolean needUpdate() - { - if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) - { - return true; - } - return false; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - this.steam = dataStream.readInt(); - this.water = dataStream.readInt(); - this.force = dataStream.readInt(); - this.aForce = dataStream.readInt(); - this.genRate= dataStream.readInt(); - this.runTime = dataStream.readInt(); - ++pCount; - } - catch(Exception e) - { - System.out.print("SteamPistonDataFail"); - e.printStackTrace(); - } - - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.runTime = par1NBTTagCompound.getInteger("time"); - this.genRate = par1NBTTagCompound.getInteger("gen"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.water = par1NBTTagCompound.getInteger("water"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("time", (int)this.runTime); - par1NBTTagCompound.setInteger("gen", (int)this.genRate); - par1NBTTagCompound.setInteger("steam", (int)this.steam); - par1NBTTagCompound.setInteger("water", (int)this.water); - - } - - - @Override - public int getAnimationPos() { - // TODO Auto-generated method stub - return this.pos; - } - - - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } - public int getMeta() { - return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - } -} diff --git a/1.4.2/src/common/steampower/turbine/TileEntitytopGen.java b/1.4.2/src/common/steampower/turbine/TileEntitytopGen.java deleted file mode 100644 index c0f7dbd9..00000000 --- a/1.4.2/src/common/steampower/turbine/TileEntitytopGen.java +++ /dev/null @@ -1,12 +0,0 @@ -package steampower.turbine; - -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import steampower.TileEntityMachine; -import basicpipes.pipes.api.ILiquidConsumer; -import basicpipes.pipes.api.ILiquidProducer; -import basicpipes.pipes.api.Liquid; - -public class TileEntitytopGen extends TileEntityMachine { - -} diff --git a/1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java b/1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java deleted file mode 100644 index 82b99bec..00000000 --- a/1.4.2/src/minecraft/basicpipes/ItemRenderHelper.java +++ /dev/null @@ -1,56 +0,0 @@ -package basicpipes; - -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.RenderBlocks; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class ItemRenderHelper implements ISimpleBlockRenderingHandler { - public static ItemRenderHelper instance = new ItemRenderHelper(); - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - private ModelPump modelPump = new ModelPump(); - private ModelGearRod modelRod = new ModelGearRod(); - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == BasicPipesMain.machineID && metadata < 4) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/pumps/Pump.png")); - modelPump.renderMain(0.0725F); - modelPump.renderC1(0.0725F); - modelPump.renderC2(0.0725F); - modelPump.renderC3(0.0725F); - GL11.glPopMatrix(); - } - if(block.blockID == BasicPipesMain.rodID) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.5F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture("/textures/GearRod.png")); - modelRod.render(0.0825F,0); - GL11.glPopMatrix(); - } - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - return false; - } - - public boolean shouldRender3DInInventory() { - - return true; - } - - public int getRenderId() - { - return renderID; - } -} diff --git a/1.4.2/src/minecraft/basicpipes/ModelGearRod.java b/1.4.2/src/minecraft/basicpipes/ModelGearRod.java deleted file mode 100644 index 4a8f6330..00000000 --- a/1.4.2/src/minecraft/basicpipes/ModelGearRod.java +++ /dev/null @@ -1,139 +0,0 @@ -// Date: 9/25/2012 4:29:17 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGearRod extends ModelBase -{ - //fields - ModelRenderer Rod; - ModelRenderer front; - ModelRenderer back; - ModelRenderer f2; - ModelRenderer b2; - ModelRenderer b3; - ModelRenderer b4; - ModelRenderer b1; - ModelRenderer f1; - ModelRenderer f4; - ModelRenderer f3; - ModelRenderer Rod2; - - public ModelGearRod() - { - textureWidth = 64; - textureHeight = 32; - - Rod = new ModelRenderer(this, 0, 0); - Rod.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); - Rod.setRotationPoint(0F, 16F, -6F); - Rod.setTextureSize(64, 32); - Rod.mirror = true; - setRotation(Rod, 0F, 0F, 0F); - front = new ModelRenderer(this, 35, 0); - front.addBox(-2F, -2F, -2F, 4, 4, 2); - front.setRotationPoint(0F, 16F, -6F); - front.setTextureSize(64, 32); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - back = new ModelRenderer(this, 35, 0); - back.addBox(-2F, -2F, 0F, 4, 4, 2); - back.setRotationPoint(0F, 16F, 6F); - back.setTextureSize(64, 32); - back.mirror = true; - setRotation(back, 0F, 0F, 0.7853982F); - f2 = new ModelRenderer(this, 0, 17); - f2.addBox(0F, 0F, 0F, 1, 1, 2); - f2.setRotationPoint(1F, 17F, -10F); - f2.setTextureSize(64, 32); - f2.mirror = true; - setRotation(f2, 0F, 0F, 0F); - b2 = new ModelRenderer(this, 0, 17); - b2.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b2.setRotationPoint(0F, 18F, 8F); - b2.setTextureSize(64, 32); - b2.mirror = true; - setRotation(b2, 0F, 0F, 0.7853982F); - b3 = new ModelRenderer(this, 0, 17); - b3.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b3.setRotationPoint(-2F, 16F, 8F); - b3.setTextureSize(64, 32); - b3.mirror = true; - setRotation(b3, 0F, 0F, 0.7853982F); - b4 = new ModelRenderer(this, 0, 17); - b4.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b4.setRotationPoint(2F, 16F, 8F); - b4.setTextureSize(64, 32); - b4.mirror = true; - setRotation(b4, 0F, 0F, 0.7853982F); - b1 = new ModelRenderer(this, 0, 17); - b1.addBox(-0.5F, -0.5F, 0F, 1, 1, 2); - b1.setRotationPoint(0F, 14F, 8F); - b1.setTextureSize(64, 32); - b1.mirror = true; - setRotation(b1, 0F, 0F, 0.7853982F); - f1 = new ModelRenderer(this, 0, 17); - f1.addBox(0F, 0F, 0F, 1, 1, 2); - f1.setRotationPoint(1F, 14F, -10F); - f1.setTextureSize(64, 32); - f1.mirror = true; - setRotation(f1, 0F, 0F, 0F); - f4 = new ModelRenderer(this, 0, 17); - f4.addBox(0F, 0F, 0F, 1, 1, 2); - f4.setRotationPoint(-2F, 17F, -10F); - f4.setTextureSize(64, 32); - f4.mirror = true; - setRotation(f4, 0F, 0F, 0F); - f3 = new ModelRenderer(this, 0, 17); - f3.addBox(0F, 0F, 0F, 1, 1, 2); - f3.setRotationPoint(-2F, 14F, -10F); - f3.setTextureSize(64, 32); - f3.mirror = true; - setRotation(f3, 0F, 0F, 0F); - Rod2 = new ModelRenderer(this, 0, 0); - Rod2.addBox(-1.5F, -1.5F, 0F, 3, 3, 12); - Rod2.setRotationPoint(0F, 16F, -6F); - Rod2.setTextureSize(64, 32); - Rod2.mirror = true; - setRotation(Rod2, 0F, 0F, 0.7853982F); - } - public void render(float f5,int r) - { - - Rod.rotateAngleZ= 45 * r; - Rod2.rotateAngleZ= Rod.rotateAngleZ + 45; - Rod.render(f5); - Rod2.render(f5); - //TODO add rotation to rods - front.render(f5); - back.render(f5); - f2.render(f5); - b2.render(f5); - b3.render(f5); - b4.render(f5); - b1.render(f5); - f1.render(f5); - f4.render(f5); - f3.render(f5); - - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/basicpipes/ModelLargePipe.java b/1.4.2/src/minecraft/basicpipes/ModelLargePipe.java deleted file mode 100644 index cc8e8f02..00000000 --- a/1.4.2/src/minecraft/basicpipes/ModelLargePipe.java +++ /dev/null @@ -1,177 +0,0 @@ -// Date: 9/20/2012 12:00:21 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelLargePipe extends ModelBase -{ - //fields - ModelRenderer Mid; - ModelRenderer RightPipe; - ModelRenderer RightInter; - ModelRenderer RightConnect; - ModelRenderer LeftInter; - ModelRenderer LeftPipe; - ModelRenderer LeftConnect; - ModelRenderer TopInter; - ModelRenderer TopPipe; - ModelRenderer TopConnect; - ModelRenderer BottomPipe; - ModelRenderer BottomInter; - ModelRenderer BottomConnect; - ModelRenderer BackPipe; - ModelRenderer BackInter; - ModelRenderer BackConnect; - ModelRenderer FrontInter; - ModelRenderer FrontPipe; - ModelRenderer FrontConnect; - - public ModelLargePipe() - { - textureWidth = 128; - textureHeight = 32; - - Mid = new ModelRenderer(this, 50, 13); - Mid.addBox(-3F, -3F, -3F, 6, 6, 6); - Mid.setRotationPoint(0F, 16F, 0F); - Mid.setTextureSize(128, 32); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - RightPipe = new ModelRenderer(this, 25, 0); - RightPipe.addBox(0F, -3F, -3F, 4, 6, 6); - RightPipe.setRotationPoint(3F, 16F, 0F); - RightPipe.setTextureSize(128, 32); - RightPipe.mirror = true; - setRotation(RightPipe, 0F, 0F, 0F); - RightInter = new ModelRenderer(this, 98, 0); - RightInter.addBox(0F, -4F, -4F, 1, 8, 8); - RightInter.setRotationPoint(2F, 16F, 0F); - RightInter.setTextureSize(128, 32); - RightInter.mirror = true; - setRotation(RightInter, 0F, 0F, 0F); - RightConnect = new ModelRenderer(this, 98, 0); - RightConnect.addBox(0F, -4F, -4F, 1, 8, 8); - RightConnect.setRotationPoint(7F, 16F, 0F); - RightConnect.setTextureSize(128, 32); - RightConnect.mirror = true; - setRotation(RightConnect, 0F, 0F, 0F); - LeftInter = new ModelRenderer(this, 98, 0); - LeftInter.addBox(-1F, -4F, -4F, 1, 8, 8); - LeftInter.setRotationPoint(-2F, 16F, 0F); - LeftInter.setTextureSize(128, 32); - LeftInter.mirror = true; - setRotation(LeftInter, 0F, 0F, 0F); - LeftPipe = new ModelRenderer(this, 25, 0); - LeftPipe.addBox(-4F, -3F, -3F, 4, 6, 6); - LeftPipe.setRotationPoint(-3F, 16F, 0F); - LeftPipe.setTextureSize(128, 32); - LeftPipe.mirror = true; - setRotation(LeftPipe, 0F, 0F, 0F); - LeftConnect = new ModelRenderer(this, 98, 0); - LeftConnect.addBox(-1F, -4F, -4F, 1, 8, 8); - LeftConnect.setRotationPoint(-7F, 16F, 0F); - LeftConnect.setTextureSize(128, 32); - LeftConnect.mirror = true; - setRotation(LeftConnect, 0F, 0F, 0F); - TopInter = new ModelRenderer(this, 77, 17); - TopInter.addBox(-4F, -1F, -4F, 8, 1, 8); - TopInter.setRotationPoint(0F, 14F, 0F); - TopInter.setTextureSize(128, 32); - TopInter.mirror = true; - setRotation(TopInter, 0F, 0F, 0F); - TopPipe = new ModelRenderer(this, 50, 0); - TopPipe.addBox(-3F, -4F, -3F, 6, 4, 6); - TopPipe.setRotationPoint(0F, 13F, 0F); - TopPipe.setTextureSize(128, 32); - TopPipe.mirror = true; - setRotation(TopPipe, 0F, 0F, 0F); - TopConnect = new ModelRenderer(this, 77, 17); - TopConnect.addBox(-4F, -1F, -4F, 8, 1, 8); - TopConnect.setRotationPoint(0F, 9F, 0F); - TopConnect.setTextureSize(128, 32); - TopConnect.mirror = true; - setRotation(TopConnect, 0F, 0F, 0F); - BottomPipe = new ModelRenderer(this, 50, 0); - BottomPipe.addBox(-3F, 0F, -3F, 6, 4, 6); - BottomPipe.setRotationPoint(0F, 19F, 0F); - BottomPipe.setTextureSize(128, 32); - BottomPipe.mirror = true; - setRotation(BottomPipe, 0F, 0F, 0F); - BottomInter = new ModelRenderer(this, 77, 17); - BottomInter.addBox(-4F, 0F, -4F, 8, 1, 8); - BottomInter.setRotationPoint(0F, 18F, 0F); - BottomInter.setTextureSize(128, 32); - BottomInter.mirror = true; - setRotation(BottomInter, 0F, 0F, 0F); - BottomConnect = new ModelRenderer(this, 77, 17); - BottomConnect.addBox(-4F, 0F, -4F, 8, 1, 8); - BottomConnect.setRotationPoint(0F, 23F, 0F); - BottomConnect.setTextureSize(128, 32); - BottomConnect.mirror = true; - setRotation(BottomConnect, 0F, 0F, 0F); - BackPipe = new ModelRenderer(this, 0, 0); - BackPipe.addBox(-3F, -3F, 0F, 6, 6, 4); - BackPipe.setRotationPoint(0F, 16F, 3F); - BackPipe.setTextureSize(128, 32); - BackPipe.mirror = true; - setRotation(BackPipe, 0F, 0F, 0F); - BackInter = new ModelRenderer(this, 0, 23); - BackInter.addBox(-4F, -4F, 0F, 8, 8, 1); - BackInter.setRotationPoint(0F, 16F, 2F); - BackInter.setTextureSize(128, 32); - BackInter.mirror = true; - setRotation(BackInter, 0F, 0F, 0F); - BackConnect = new ModelRenderer(this, 0, 23); - BackConnect.addBox(-4F, -4F, 0F, 8, 8, 1); - BackConnect.setRotationPoint(0F, 16F, 7F); - BackConnect.setTextureSize(128, 32); - BackConnect.mirror = true; - setRotation(BackConnect, 0F, 0F, 0F); - FrontInter = new ModelRenderer(this, 0, 23); - FrontInter.addBox(-4F, -4F, -1F, 8, 8, 1); - FrontInter.setRotationPoint(0F, 16F, -2F); - FrontInter.setTextureSize(128, 32); - FrontInter.mirror = true; - setRotation(FrontInter, 0F, 0F, 0F); - FrontPipe = new ModelRenderer(this, 0, 0); - FrontPipe.addBox(-3F, -3F, -4F, 6, 6, 4); - FrontPipe.setRotationPoint(0F, 16F, -3F); - FrontPipe.setTextureSize(128, 32); - FrontPipe.mirror = true; - setRotation(FrontPipe, 0F, 0F, 0F); - FrontConnect = new ModelRenderer(this, 0, 23); - FrontConnect.addBox(-4F, -4F, -1F, 8, 8, 1); - FrontConnect.setRotationPoint(0F, 16F, -7F); - FrontConnect.setTextureSize(128, 32); - FrontConnect.mirror = true; - setRotation(FrontConnect, 0F, 0F, 0F); - } - public void renderMiddle() { Mid.render(0.0625F); } - public void renderBottom() { BottomPipe.render(0.0625F); BottomConnect.render(0.0625F); BottomInter.render(0.0625F);} - public void renderTop() { TopPipe.render(0.0625F);TopConnect.render(0.0625F); TopInter.render(0.0625F);} - public void renderLeft() { LeftPipe.render(0.0625F);LeftConnect.render(0.0625F); LeftInter.render(0.0625F);} - public void renderRight() { RightPipe.render(0.0625F);RightConnect.render(0.0625F); RightInter.render(0.0625F);} - public void renderBack() { BackPipe.render(0.0625F); BackConnect.render(0.0625F);BackInter.render(0.0625F); } - public void renderFront() { FrontPipe.render(0.0625F);FrontConnect.render(0.0625F);FrontInter.render(0.0625F);} - - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/basicpipes/ModelPipe.java b/1.4.2/src/minecraft/basicpipes/ModelPipe.java deleted file mode 100644 index 6ddce333..00000000 --- a/1.4.2/src/minecraft/basicpipes/ModelPipe.java +++ /dev/null @@ -1,93 +0,0 @@ -package basicpipes; - -import net.minecraft.src.*; - -public class ModelPipe extends ModelBase -{ - //fields - ModelRenderer Middle; - ModelRenderer Right; - ModelRenderer Left; - ModelRenderer Back; - ModelRenderer Front; - ModelRenderer Top; - ModelRenderer Bottom; - - public ModelPipe() - { - textureWidth = 64; - textureHeight = 32; - - Middle = new ModelRenderer(this, 0, 0); - Middle.addBox(-1F, -1F, -1F, 4, 4, 4); - Middle.setRotationPoint(-1F, 15F, -1F); - Middle.setTextureSize(64, 32); - Middle.mirror = true; - setRotation(Middle, 0F, 0F, 0F); - Right = new ModelRenderer(this, 21, 0); - Right.addBox(0F, 0F, 0F, 6, 4, 4); - Right.setRotationPoint(2F, 14F, -2F); - Right.setTextureSize(64, 32); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - Left = new ModelRenderer(this, 21, 0); - Left.addBox(0F, 0F, 0F, 6, 4, 4); - Left.setRotationPoint(-8F, 14F, -2F); - Left.setTextureSize(64, 32); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - Back = new ModelRenderer(this, 0, 11); - Back.addBox(0F, 0F, 0F, 4, 4, 6); - Back.setRotationPoint(-2F, 14F, 2F); - Back.setTextureSize(64, 32); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - Front = new ModelRenderer(this, 0, 11); - Front.addBox(0F, 0F, 0F, 4, 4, 6); - Front.setRotationPoint(-2F, 14F, -8F); - Front.setTextureSize(64, 32); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - Top = new ModelRenderer(this, 21, 11); - Top.addBox(0F, 0F, 0F, 4, 6, 4); - Top.setRotationPoint(-2F, 8F, -2F); - Top.setTextureSize(64, 32); - Top.mirror = true; - setRotation(Top, 0F, 0F, 0F); - Bottom = new ModelRenderer(this, 21, 11); - Bottom.addBox(0F, 0F, 0F, 4, 6, 4); - Bottom.setRotationPoint(-2F, 18F, -2F); - Bottom.setTextureSize(64, 32); - Bottom.mirror = true; - setRotation(Bottom, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - this.renderMiddle(); - this.renderBottom(); - this.renderTop(); - this.renderLeft(); - this.renderRight(); - this.renderBack(); - this.renderFront(); - } - - public void renderMiddle() { Middle.render(0.0625F); } - public void renderBottom() { Bottom.render(0.0625F); } - public void renderTop() { Top.render(0.0625F); } - public void renderLeft() { Left.render(0.0625F); } - public void renderRight() { Right.render(0.0625F); } - public void renderBack() { Back.render(0.0625F); } - public void renderFront() { Front.render(0.0625F);} - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/basicpipes/ModelPump.java b/1.4.2/src/minecraft/basicpipes/ModelPump.java deleted file mode 100644 index 53a2af45..00000000 --- a/1.4.2/src/minecraft/basicpipes/ModelPump.java +++ /dev/null @@ -1,140 +0,0 @@ -// Date: 9/3/2012 6:12:15 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelPump extends ModelBase -{ - //fields - ModelRenderer Main; - ModelRenderer sidePort; - ModelRenderer FrontPort; - ModelRenderer pivit; - ModelRenderer crank; - ModelRenderer Rope; - ModelRenderer pivit2; - ModelRenderer Piston; - ModelRenderer pPlate; - ModelRenderer Rope2; - ModelRenderer BackPort; - - public ModelPump() - { - textureWidth = 128; - textureHeight = 128; - - Main = new ModelRenderer(this, 0, 0); - Main.addBox(-5F, 0F, -5F, 10, 13, 10); - Main.setRotationPoint(1F, 11F, 0F); - Main.setTextureSize(128, 128); - Main.mirror = true; - setRotation(Main, 0F, 0F, 0F); - sidePort = new ModelRenderer(this, 0, 76); - sidePort.addBox(-6F, -3F, -3F, 6, 6, 6); - sidePort.setRotationPoint(8F, 16F, 0F); - sidePort.setTextureSize(128, 128); - sidePort.mirror = true; - setRotation(sidePort, 0F, 0F, 0F); - FrontPort = new ModelRenderer(this, 0, 63); - FrontPort.addBox(-3F, -3F, 0F, 6, 6, 6); - FrontPort.setRotationPoint(0F, 16F, -8F); - FrontPort.setTextureSize(128, 128); - FrontPort.mirror = true; - setRotation(FrontPort, 0F, 0F, 0F); - pivit = new ModelRenderer(this, 0, 40); - pivit.addBox(-1F, 0F, -1F, 2, 3, 1); - pivit.setRotationPoint(0F, 8F, 1F); - pivit.setTextureSize(128, 128); - pivit.mirror = true; - setRotation(pivit, 0F, 0F, 0F); - crank = new ModelRenderer(this, 48, 0); - crank.addBox(-8F, 0F, -1F, 14, 2, 1); - crank.setRotationPoint(0F, 7F, 0F); - crank.setTextureSize(128, 128); - crank.mirror = true; - setRotation(crank, 0F, 0F, 0F); - Rope = new ModelRenderer(this, 0, 28); - Rope.addBox(0F, 0F, 0F, 1, 7, 1); - Rope.setRotationPoint(4F, 8F, -1F); - Rope.setTextureSize(128, 128); - Rope.mirror = true; - setRotation(Rope, 0F, 0F, 0F); - pivit2 = new ModelRenderer(this, 0, 40); - pivit2.addBox(-1F, 0F, -1F, 2, 3, 1); - pivit2.setRotationPoint(0F, 8F, -1F); - pivit2.setTextureSize(128, 128); - pivit2.mirror = true; - setRotation(pivit2, 0F, 0F, 0F); - pPlate = new ModelRenderer(this, 34, 30); - pPlate.addBox(0F, 0F, 0F, 1, 12, 1); - pPlate.setRotationPoint(-5F, 12F, -1F); - pPlate.setTextureSize(128, 128); - pPlate.mirror = true; - setRotation(pPlate, 0F, 0F, 0F); - Piston = new ModelRenderer(this, 20, 30); - Piston.addBox(0F, 0F, 0F, 3, 12, 3); - Piston.setRotationPoint(-8F, 12F, -2F); - Piston.setTextureSize(128, 128); - Piston.mirror = true; - setRotation(Piston, 0F, 0F, 0F); - Rope2 = new ModelRenderer(this, 0, 28); - Rope2.addBox(0F, 0F, 0F, 1, 7, 1); - Rope2.setRotationPoint(-7F, 8F, -1F); - Rope2.setTextureSize(128, 128); - Rope2.mirror = true; - setRotation(Rope2, 0F, 0F, 0F); - BackPort = new ModelRenderer(this, 0, 50); - BackPort.addBox(-3F, -3F, -6F, 6, 6, 6); - BackPort.setRotationPoint(0F, 16F, 8F); - BackPort.setTextureSize(128, 128); - BackPort.mirror = true; - setRotation(BackPort, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - public void renderMain(float f5) - { - Main.render(f5); - pivit.render(f5); - crank.render(f5); - Rope.render(f5); - pivit2.render(f5); - Piston.render(f5); - pPlate.render(f5); - Rope2.render(f5); - } - public void renderC1(float f5) - { - sidePort.render(f5); - } - public void renderC2(float f5) - { - FrontPort.render(f5); - } - public void renderC3(float f5) - { - BackPort.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/1.4.2/src/minecraft/basicpipes/PipeClientProxy.java b/1.4.2/src/minecraft/basicpipes/PipeClientProxy.java deleted file mode 100644 index 6c65d868..00000000 --- a/1.4.2/src/minecraft/basicpipes/PipeClientProxy.java +++ /dev/null @@ -1,34 +0,0 @@ -package basicpipes; - -import steampower.SteamPowerMain; -import basicpipes.PipeProxy; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import basicpipes.renderTank.RenderLTank; -import net.minecraftforge.client.MinecraftForgeClient; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.common.registry.GameRegistry; - -public class PipeClientProxy extends PipeProxy -{ - @Override - public void preInit() - { - //Preload textures - MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/Items.png"); - MinecraftForgeClient.preloadTexture(BasicPipesMain.textureFile+"/blocks.png"); - RenderingRegistry.registerBlockHandler(new ItemRenderHelper()); - } - - @Override - public void init() - { - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPipe.class, new RenderPipe()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPump.class, new RenderPump()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRod.class, new RenderGearRod()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLTank.class, new RenderLTank()); - } -} diff --git a/1.4.2/src/minecraft/basicpipes/RenderGearRod.java b/1.4.2/src/minecraft/basicpipes/RenderGearRod.java deleted file mode 100644 index 85e52659..00000000 --- a/1.4.2/src/minecraft/basicpipes/RenderGearRod.java +++ /dev/null @@ -1,49 +0,0 @@ -package basicpipes; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.geared.ModelGearPiston; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.conductors.TileEntityRod; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; - - -public class RenderGearRod extends TileEntitySpecialRenderer -{ - private ModelGearRod model; - public RenderGearRod() - { - model = new ModelGearRod(); - } - public void renderAModelAt(TileEntityRod tileEntity, double d, double d1, double d2, float f) - { - bindTextureByName("/textures/GearRod.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(meta) - { - case 0: GL11.glRotatef(90f, 1f, 0f, 0f);break; - case 1: GL11.glRotatef(-90f, 1f, 0f, 0f);break; - case 2:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 5: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.render(0.0625F,tileEntity.pos); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityRod)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/basicpipes/RenderPipe.java b/1.4.2/src/minecraft/basicpipes/RenderPipe.java deleted file mode 100644 index b1a76cbb..00000000 --- a/1.4.2/src/minecraft/basicpipes/RenderPipe.java +++ /dev/null @@ -1,62 +0,0 @@ -package basicpipes; - -import net.minecraft.src.ModelBase; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.Liquid; - - -public class RenderPipe extends TileEntitySpecialRenderer -{ - Liquid type; - int size = 6; - - private ModelPipe fourPipe; - private ModelLargePipe SixPipe; - private ModelBase model = fourPipe; - - public RenderPipe() - { - fourPipe = new ModelPipe(); - SixPipe = new ModelLargePipe(); - } - - public void renderAModelAt(TileEntityPipe tileEntity, double d, double d1, double d2, float f) - { - //Texture file - - type = tileEntity.getType(); - - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - switch(type.ordinal()) - { - case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; - case 1: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixWaterPipe.png");break; - case 2: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixLavaPipe.png");break; - case 3: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixOilPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/pipes/DefaultPipe.png"); break; - } - if(tileEntity.connectedBlocks[0] != null) SixPipe.renderBottom(); - if(tileEntity.connectedBlocks[1] != null) SixPipe.renderTop(); - if(tileEntity.connectedBlocks[3] != null) SixPipe.renderFront(); - if(tileEntity.connectedBlocks[2] != null) SixPipe.renderBack(); - if(tileEntity.connectedBlocks[5] != null) SixPipe.renderRight(); - if(tileEntity.connectedBlocks[4] != null) SixPipe.renderLeft(); - SixPipe.renderMiddle(); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPipe)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/basicpipes/RenderPump.java b/1.4.2/src/minecraft/basicpipes/RenderPump.java deleted file mode 100644 index 47daad6b..00000000 --- a/1.4.2/src/minecraft/basicpipes/RenderPump.java +++ /dev/null @@ -1,59 +0,0 @@ -package basicpipes; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import basicpipes.conductors.TileEntityPipe; -import basicpipes.machines.TileEntityPump; -import basicpipes.pipes.api.Liquid; - - -public class RenderPump extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelPump model; - - public RenderPump() - { - model = new ModelPump(); - } - - public void renderAModelAt(TileEntityPump tileEntity, double d, double d1, double d2, float f) - { - Liquid type = tileEntity.type; - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(type.ordinal()) - { - default: bindTextureByName("/textures/pumps/Pump.png");break; - //case 0://steam - case 1:bindTextureByName("/textures/pumps/WaterPump.png");break;//water - case 2:bindTextureByName("/textures/pumps/LavaPump.png");break;//lava - case 3:bindTextureByName("/textures/pumps/OilPump.png");break;//oil - //case 4://fuel - } - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.renderMain(0.0625F); - model.renderC1(0.0625F); - model.renderC2(0.0625F); - model.renderC3(0.0625F); - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityPump)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java deleted file mode 100644 index a2a31d3c..00000000 --- a/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTank.java +++ /dev/null @@ -1,422 +0,0 @@ -// Date: 10/8/2012 7:31:40 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package basicpipes.renderTank; - -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; - -public class ModelLiquidTank extends ModelBase -{ - //fields - ModelRenderer Mid; - ModelRenderer Corner; - ModelRenderer Corner2; - ModelRenderer Corner3; - ModelRenderer Corner4; - ModelRenderer C8; - ModelRenderer C7; - ModelRenderer C6; - ModelRenderer C5; - ModelRenderer C4; - ModelRenderer C; - ModelRenderer C3; - ModelRenderer C2; - ModelRenderer GuageT; - ModelRenderer GuageB; - ModelRenderer Guage; - ModelRenderer GuageR; - ModelRenderer GuageGlass; - ModelRenderer GuageL; - - ModelRenderer GuageT2; - ModelRenderer GuageB2; - ModelRenderer Guage2; - ModelRenderer GuageR2; - ModelRenderer GuageGlass2; - ModelRenderer GuageL2; - - ModelRenderer GuageT3; - ModelRenderer GuageB3; - ModelRenderer Guage3; - ModelRenderer GuageR3; - ModelRenderer GuageGlass3; - ModelRenderer GuageL3; - - ModelRenderer GuageT4; - ModelRenderer GuageB4; - ModelRenderer Guage4; - ModelRenderer GuageR4; - ModelRenderer GuageGlass4; - ModelRenderer GuageL4; - - ModelRenderer CCBottom; - ModelRenderer CCRight; - ModelRenderer CCLeft; - ModelRenderer CCFront; - ModelRenderer CCBack; - ModelRenderer CCTop; - - public ModelLiquidTank() - { - textureWidth = 128; - textureHeight = 128; - - Mid = new ModelRenderer(this, 0, 50); - Mid.addBox(-6F, 0F, -6F, 12, 14, 12); - Mid.setRotationPoint(0F, 9F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Corner = new ModelRenderer(this, 0, 30); - Corner.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner.setRotationPoint(-7F, 8F, 7F); - Corner.setTextureSize(128, 128); - Corner.mirror = true; - setRotation(Corner, 0F, 0F, 0F); - Corner2 = new ModelRenderer(this, 0, 30); - Corner2.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner2.setRotationPoint(-7F, 8F, -7F); - Corner2.setTextureSize(128, 128); - Corner2.mirror = true; - setRotation(Corner2, 0F, 0F, 0F); - Corner3 = new ModelRenderer(this, 0, 30); - Corner3.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner3.setRotationPoint(7F, 8F, -7F); - Corner3.setTextureSize(128, 128); - Corner3.mirror = true; - setRotation(Corner3, 0F, 0F, 0F); - Corner4 = new ModelRenderer(this, 0, 30); - Corner4.addBox(-1F, 0F, -1F, 2, 16, 2); - Corner4.setRotationPoint(7F, 8F, 7F); - Corner4.setTextureSize(128, 128); - Corner4.mirror = true; - setRotation(Corner4, 0F, 0F, 0F); - C8 = new ModelRenderer(this, 9, 35); - C8.addBox(-1F, 0F, -1F, 2, 2, 12); - C8.setRotationPoint(6F, 22F, -5F); - C8.setTextureSize(128, 128); - C8.mirror = true; - setRotation(C8, 0F, 0F, 0F); - C7 = new ModelRenderer(this, 9, 35); - C7.addBox(-1F, 0F, -1F, 2, 2, 12); - C7.setRotationPoint(-6F, 8F, -5F); - C7.setTextureSize(128, 128); - C7.mirror = true; - setRotation(C7, 0F, 0F, 0F); - C6 = new ModelRenderer(this, 9, 35); - C6.addBox(-1F, 0F, -1F, 2, 2, 12); - C6.setRotationPoint(6F, 8F, -5F); - C6.setTextureSize(128, 128); - C6.mirror = true; - setRotation(C6, 0F, 0F, 0F); - C5 = new ModelRenderer(this, 9, 30); - C5.addBox(-1F, 0F, -1F, 12, 2, 2); - C5.setRotationPoint(-5F, 8F, 6F); - C5.setTextureSize(128, 128); - C5.mirror = true; - setRotation(C5, 0F, 0F, 0F); - C4 = new ModelRenderer(this, 9, 35); - C4.addBox(-1F, 0F, -1F, 2, 2, 12); - C4.setRotationPoint(-6F, 22F, -5F); - C4.setTextureSize(128, 128); - C4.mirror = true; - setRotation(C4, 0F, 0F, 0F); - C = new ModelRenderer(this, 9, 30); - C.addBox(-1F, 0F, -1F, 12, 2, 2); - C.setRotationPoint(-5F, 22F, 6F); - C.setTextureSize(128, 128); - C.mirror = true; - setRotation(C, 0F, 0F, 0F); - C3 = new ModelRenderer(this, 9, 30); - C3.addBox(-1F, 0F, -1F, 12, 2, 2); - C3.setRotationPoint(-5F, 8F, -6F); - C3.setTextureSize(128, 128); - C3.mirror = true; - setRotation(C3, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 9, 30); - C2.addBox(-1F, 0F, -1F, 12, 2, 2); - C2.setRotationPoint(-5F, 22F, -6F); - C2.setTextureSize(128, 128); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - //G1-------------------------------------- - GuageT = new ModelRenderer(this, 54, 42); - GuageT.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT.setRotationPoint(0F, 12F, -8F); - GuageT.setTextureSize(128, 128); - GuageT.mirror = true; - setRotation(GuageT, 0F, 0F, 0F); - GuageB = new ModelRenderer(this, 54, 42); - GuageB.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB.setRotationPoint(0F, 12F, -8F); - GuageB.setTextureSize(128, 128); - GuageB.mirror = true; - setRotation(GuageB, 0F, 0F, 0F); - Guage = new ModelRenderer(this, 54, 32); - Guage.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage.setRotationPoint(0F, 12F, -7F); - Guage.setTextureSize(128, 128); - Guage.mirror = true; - setRotation(Guage, 0F, 0F, 0F); - GuageR = new ModelRenderer(this, 44, 32); - GuageR.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR.setRotationPoint(0F, 12F, -7F); - GuageR.setTextureSize(128, 128); - GuageR.mirror = true; - setRotation(GuageR, 0F, 0F, 0F); - GuageGlass = new ModelRenderer(this, 60, 32); - GuageGlass.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass.setRotationPoint(0F, 12F, -8F); - GuageGlass.setTextureSize(128, 128); - GuageGlass.mirror = true; - setRotation(GuageGlass, 0F, 0F, 0F); - GuageL = new ModelRenderer(this, 44, 32); - GuageL.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL.setRotationPoint(0F, 12F, -7F); - GuageL.setTextureSize(128, 128); - GuageL.mirror = true; - setRotation(GuageL, 0F, 0F, 0F); - //G2---------------------------------- - GuageT2 = new ModelRenderer(this, 54, 42); - GuageT2.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT2.setRotationPoint(-8F, 12F, 0F); - GuageT2.setTextureSize(128, 128); - GuageT2.mirror = true; - setRotation(GuageT2, 0F, 1.570796F, 0F); - GuageB2 = new ModelRenderer(this, 54, 42); - GuageB2.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB2.setRotationPoint(-8F, 12F, 0F); - GuageB2.setTextureSize(128, 128); - GuageB2.mirror = true; - setRotation(GuageB2, 0F, 1.570796F, 0F); - Guage2 = new ModelRenderer(this, 54, 32); - Guage2.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage2.setRotationPoint(-7F, 12F, 0F); - Guage2.setTextureSize(128, 128); - Guage2.mirror = true; - setRotation(Guage2, 0F, 1.570796F, 0F); - GuageR2 = new ModelRenderer(this, 44, 32); - GuageR2.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR2.setRotationPoint(-7F, 12F, 0F); - GuageR2.setTextureSize(128, 128); - GuageR2.mirror = true; - setRotation(GuageR2, 0F, 1.570796F, 0F); - GuageGlass2 = new ModelRenderer(this, 60, 32); - GuageGlass2.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass2.setRotationPoint(-8F, 12F, 0F); - GuageGlass2.setTextureSize(128, 128); - GuageGlass2.mirror = true; - setRotation(GuageGlass2, 0F, 1.570796F, 0F); - GuageL2 = new ModelRenderer(this, 44, 32); - GuageL2.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL2.setRotationPoint(-7F, 12F, 0F); - GuageL2.setTextureSize(128, 128); - GuageL2.mirror = true; - setRotation(GuageL2, 0F, 1.570796F, 0F); - //G3-------------------------------------- - GuageT3 = new ModelRenderer(this, 54, 42); - GuageT3.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT3.setRotationPoint(0F, 12F, 8F); - GuageT3.setTextureSize(128, 128); - GuageT3.mirror = true; - setRotation(GuageT3, 0F, 3.141593F, 0F); - GuageB3 = new ModelRenderer(this, 54, 42); - GuageB3.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB3.setRotationPoint(0F, 12F, 8F); - GuageB3.setTextureSize(128, 128); - GuageB3.mirror = true; - setRotation(GuageB3, 0F, 3.141593F, 0F); - Guage3 = new ModelRenderer(this, 54, 32); - Guage3.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage3.setRotationPoint(0F, 12F, 7F); - Guage3.setTextureSize(128, 128); - Guage3.mirror = true; - setRotation(Guage3, 0F, 3.141593F, 0F); - GuageR3 = new ModelRenderer(this, 44, 32); - GuageR3.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR3.setRotationPoint(0F, 12F, 7F); - GuageR3.setTextureSize(128, 128); - GuageR3.mirror = true; - setRotation(GuageR3, 0F, 3.141593F, 0F); - GuageGlass3 = new ModelRenderer(this, 60, 32); - GuageGlass3.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass3.setRotationPoint(0F, 12F, 8F); - GuageGlass3.setTextureSize(128, 128); - GuageGlass3.mirror = true; - setRotation(GuageGlass3, 0F, 3.141593F, 0F); - GuageL3 = new ModelRenderer(this, 44, 32); - GuageL3.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL3.setRotationPoint(0F, 12F, 7F); - GuageL3.setTextureSize(128, 128); - GuageL3.mirror = true; - setRotation(GuageL3, 0F, 3.141593F, 0F); - //G4------------------------------- - GuageT4 = new ModelRenderer(this, 54, 42); - GuageT4.addBox(-1F, -1F, 0F, 2, 1, 2); - GuageT4.setRotationPoint(8F, 12F, 0F); - GuageT4.setTextureSize(128, 128); - GuageT4.mirror = true; - setRotation(GuageT4, 0F, -1.570796F, 0F); - GuageB4 = new ModelRenderer(this, 54, 42); - GuageB4.addBox(-1F, 8F, 0F, 2, 1, 2); - GuageB4.setRotationPoint(8F, 12F, 0F); - GuageB4.setTextureSize(128, 128); - GuageB4.mirror = true; - setRotation(GuageB4, 0F, -1.570796F, 0F); - Guage4 = new ModelRenderer(this, 54, 32); - Guage4.addBox(-1F, 0F, 0F, 2, 8, 1); - Guage4.setRotationPoint(7F, 12F, 0F); - Guage4.setTextureSize(128, 128); - Guage4.mirror = true; - setRotation(Guage4, 0F, -1.570796F, 0F); - GuageR4 = new ModelRenderer(this, 44, 32); - GuageR4.addBox(1F, -1F, -1F, 2, 10, 2); - GuageR4.setRotationPoint(7F, 12F, 0F); - GuageR4.setTextureSize(128, 128); - GuageR4.mirror = true; - setRotation(GuageR4, 0F, -1.570796F, 0F); - GuageGlass4 = new ModelRenderer(this, 60, 32); - GuageGlass4.addBox(-1F, 0F, 0F, 2, 8, 1); - GuageGlass4.setRotationPoint(8F, 12F, 0F); - GuageGlass4.setTextureSize(128, 128); - GuageGlass4.mirror = true; - setRotation(GuageGlass4, 0F, -1.570796F, 0F); - GuageL4 = new ModelRenderer(this, 44, 32); - GuageL4.addBox(-3F, -1F, -1F, 2, 10, 2); - GuageL4.setRotationPoint(7F, 12F, 0F); - GuageL4.setTextureSize(128, 128); - GuageL4.mirror = true; - setRotation(GuageL4, 0F, -1.570796F, 0F); - //Pipe Connectors - CCBottom = new ModelRenderer(this, 0, 0); - CCBottom.addBox(-3F, -9F, -3F, 6, 1, 6); - CCBottom.setRotationPoint(0F, 15F, 0F); - CCBottom.setTextureSize(128, 128); - CCBottom.mirror = true; - setRotation(CCBottom, 3.141593F, 0F, 0F); - CCRight = new ModelRenderer(this, 0, 0); - CCRight.addBox(-3F, -8F, -3F, 6, 2, 6); - CCRight.setRotationPoint(0F, 15F, 0F); - CCRight.setTextureSize(128, 128); - CCRight.mirror = true; - setRotation(CCRight, 0F, 0F, -1.570796F); - CCLeft = new ModelRenderer(this, 0, 0); - CCLeft.addBox(-3F, -8F, -3F, 6, 2, 6); - CCLeft.setRotationPoint(0F, 15F, 0F); - CCLeft.setTextureSize(128, 128); - CCLeft.mirror = true; - setRotation(CCLeft, 0F, 0F, 1.570796F); - CCFront = new ModelRenderer(this, 0, 0); - CCFront.addBox(-3F, -8F, -3F, 6, 2, 6); - CCFront.setRotationPoint(0F, 15F, 0F); - CCFront.setTextureSize(128, 128); - CCFront.mirror = true; - setRotation(CCFront, 1.570796F, 0F, 0F); - CCBack = new ModelRenderer(this, 0, 0); - CCBack.addBox(-3F, -8F, -3F, 6, 2, 6); - CCBack.setRotationPoint(0F, 15F, 0F); - CCBack.setTextureSize(128, 128); - CCBack.mirror = true; - setRotation(CCBack, -1.570796F, 0F, 0F); - CCTop = new ModelRenderer(this, 0, 0); - CCTop.addBox(-3F, -7F, -3F, 6, 1, 6); - CCTop.setRotationPoint(0F, 15F, 0F); - CCTop.setTextureSize(128, 128); - CCTop.mirror = true; - setRotation(CCTop, 0F, 0F, 0F); - } - - public void renderMain(TileEntityLTank te ,float f5) - { - //render regardless of sides - Mid.render(f5); - Corner.render(f5); - Corner2.render(f5); - Corner3.render(f5); - Corner4.render(f5); - C8.render(f5); - C7.render(f5); - C6.render(f5); - C5.render(f5); - C4.render(f5); - C.render(f5); - C3.render(f5); - C2.render(f5); - CCTop.render(f5);CCBottom.render(f5); - //Front - if(te.cc[2] instanceof TileEntityPipe) - { - CCFront.render(f5); - }else - { - GuageT.render(f5); - GuageB.render(f5); - Guage.render(f5); - GuageR.render(f5); - GuageGlass.render(f5); - GuageL.render(f5); - } - //back - if(te.cc[3] instanceof TileEntityPipe) - { - CCBack.render(f5); - }else - { - GuageT3.render(f5); - Guage3.render(f5); - Guage3.render(f5); - GuageR3.render(f5); - GuageGlass3.render(f5); - GuageL3.render(f5); - } - //right - if(te.cc[4] instanceof TileEntityPipe) - { - CCRight.render(f5); - }else - { - GuageT4.render(f5); - Guage4.render(f5); - Guage4.render(f5); - GuageR4.render(f5); - GuageGlass4.render(f5); - GuageL4.render(f5); - } - //left - if(te.cc[5] instanceof TileEntityPipe) - { - CCLeft.render(f5); - }else - { - GuageT2.render(f5); - Guage2.render(f5); - Guage2.render(f5); - GuageR2.render(f5); - GuageGlass2.render(f5); - GuageL2.render(f5); - - } - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java b/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java deleted file mode 100644 index 83587214..00000000 --- a/1.4.2/src/minecraft/basicpipes/renderTank/ModelLiquidTankCorner.java +++ /dev/null @@ -1,133 +0,0 @@ -package basicpipes.renderTank; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelLiquidTankCorner extends ModelBase -{ - //fields - ModelRenderer sOne; - ModelRenderer sTwo; - ModelRenderer d7; - ModelRenderer d5; - ModelRenderer d3; - ModelRenderer d4; - ModelRenderer d1; - ModelRenderer d6; - ModelRenderer d2; - ModelRenderer d8; - ModelRenderer d9; - ModelRenderer d10; - ModelRenderer face; - - public ModelLiquidTankCorner() - { - textureWidth = 128; - textureHeight = 128; - - sOne = new ModelRenderer(this, 0, 30); - sOne.addBox(-1F, 0F, -1F, 2, 16, 2); - sOne.setRotationPoint(-7F, 8F, 7F); - sOne.setTextureSize(128, 128); - sOne.mirror = true; - setRotation(sOne, 0F, 0F, 0F); - sTwo = new ModelRenderer(this, 0, 30); - sTwo.addBox(-1F, 0F, -1F, 2, 16, 2); - sTwo.setRotationPoint(-7F, 8F, -7F); - sTwo.setTextureSize(128, 128); - sTwo.mirror = true; - setRotation(sTwo, 0F, 0F, 0F); - d7 = new ModelRenderer(this, 43, 2); - d7.addBox(-1F, 0F, -1F, 2, 16, 12); - d7.setRotationPoint(-7F, 8F, -5F); - d7.setTextureSize(128, 128); - d7.mirror = true; - setRotation(d7, 0F, 0F, 0F); - d5 = new ModelRenderer(this, 9, 12); - d5.addBox(-1F, 0F, -1F, 14, 16, 2); - d5.setRotationPoint(-5F, 8F, 7F); - d5.setTextureSize(128, 128); - d5.mirror = true; - setRotation(d5, 0F, 0F, 0F); - d3 = new ModelRenderer(this, 9, 67); - d3.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); - d3.setRotationPoint(-6F, 22F, -6F); - d3.setTextureSize(128, 128); - d3.mirror = true; - setRotation(d3, 0F, -0.7853982F, 0F); - d4 = new ModelRenderer(this, 9, 88); - d4.addBox(0F, 0F, -9F, 5, 2, 4); - d4.setRotationPoint(-6F, 22F, 6F); - d4.setTextureSize(128, 128); - d4.mirror = true; - setRotation(d4, 0F, 0F, 0F); - d1 = new ModelRenderer(this, 9, 67); - d1.addBox(-1.5F, 0F, -1.3F, 20, 2, 2); - d1.setRotationPoint(-6F, 8F, -6F); - d1.setTextureSize(128, 128); - d1.mirror = true; - setRotation(d1, 0F, -0.7853982F, 0F); - d6 = new ModelRenderer(this, 9, 75); - d6.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); - d6.setRotationPoint(-6F, 22F, -4F); - d6.setTextureSize(128, 128); - d6.mirror = true; - setRotation(d6, 0F, -0.7853982F, 0F); - d2 = new ModelRenderer(this, 9, 80); - d2.addBox(0F, 0F, -5F, 9, 2, 5); - d2.setRotationPoint(-6F, 22F, 6F); - d2.setTextureSize(128, 128); - d2.mirror = true; - setRotation(d2, 0F, 0F, 0F); - d8 = new ModelRenderer(this, 9, 75); - d8.addBox(-1.5F, 0F, -1.3F, 17, 2, 2); - d8.setRotationPoint(-6F, 8F, -4F); - d8.setTextureSize(128, 128); - d8.mirror = true; - setRotation(d8, 0F, -0.7853982F, 0F); - d9 = new ModelRenderer(this, 9, 88); - d9.addBox(0F, 0F, -9F, 5, 2, 4); - d9.setRotationPoint(-6F, 8F, 6F); - d9.setTextureSize(128, 128); - d9.mirror = true; - setRotation(d9, 0F, 0F, 0F); - d10 = new ModelRenderer(this, 9, 80); - d10.addBox(0F, 0F, -5F, 9, 2, 5); - d10.setRotationPoint(-6F, 8F, 6F); - d10.setTextureSize(128, 128); - d10.mirror = true; - setRotation(d10, 0F, 0F, 0F); - face = new ModelRenderer(this, 0, 50); - face.addBox(-8.5F, 0F, 0F, 17, 14, 2); - face.setRotationPoint(0F, 9F, 0F); - face.setTextureSize(128, 128); - face.mirror = true; - setRotation(face, 0F, -0.7853982F, 0F); - } - - public void render(float f5) - { - sOne.render(f5); - sTwo.render(f5); - d7.render(f5); - d5.render(f5); - d3.render(f5); - d4.render(f5); - d1.render(f5); - d6.render(f5); - d2.render(f5); - d8.render(f5); - d9.render(f5); - d10.render(f5); - face.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java b/1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java deleted file mode 100644 index 10d87ef8..00000000 --- a/1.4.2/src/minecraft/basicpipes/renderTank/RenderLTank.java +++ /dev/null @@ -1,71 +0,0 @@ -package basicpipes.renderTank; - -import net.minecraft.src.ModelBase; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.SteamPowerMain; - -import basicpipes.BasicPipesMain; -import basicpipes.ModelLargePipe; -import basicpipes.ModelPipe; -import basicpipes.LTanks.TileEntityLTank; -import basicpipes.conductors.TileEntityPipe; -import basicpipes.pipes.api.Liquid; -import basicpipes.pipes.api.MHelper; - - -public class RenderLTank extends TileEntitySpecialRenderer -{ - private Liquid type = Liquid.DEFUALT; - private ModelLiquidTank model; - private ModelLiquidTankCorner modelC; - private int pos = 0; - - public RenderLTank() - { - model = new ModelLiquidTank(); - modelC = new ModelLiquidTankCorner(); - } - - public void renderAModelAt(TileEntityLTank te, double d, double d1, double d2, float f) - { - type = te.getType(); - pos = Math.min(te.getStoredLiquid(type),4); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - if(MHelper.corner(te) > 0) - { - bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTankCorner.png"); - int corner = MHelper.corner(te); - switch(corner) - { - case 2: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 1: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - modelC.render(0.0625F); - } - else - { - switch(type.ordinal()) - { - //case 0: bindTextureByName(BasicPipesMain.textureFile+"/pipes/SixSteamPipe.png");break; - default:bindTextureByName(BasicPipesMain.textureFile+"/tanks/LiquidTank"+pos+".png"); break; - } - model.renderMain(te, 0.0625F); - } - GL11.glPopMatrix(); - - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double var2, double var4, double var6, float var8) { - this.renderAModelAt((TileEntityLTank)tileEntity, var2, var4, var6, var8); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/mcp.png b/1.4.2/src/minecraft/mcp.png deleted file mode 100644 index 8ebae880d0244f25a76a984a55729e4c0c9c3cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6940 zcmV+%8{_1OP)N2bPDNB8 zb~7$DE;u(kfL#Cp8ktE%K~#8N?VU}MB*hVhduD_{BQs$bCbSqsW}1bTy2313VXQHh z?AdStZUCp?oUM6P^Yy%ZxJP7G6+^cai?Z&_it_OApBMfUS#|f%zkhoF#iuV%uYbS# z{Pfa2e{r9`|M}NH?)72}_g}qwb+1>BXIwYWnt#cE+27OmzdL}z!J%{R8K@)(&8~g! zHUE2XUh=QOb=lu}v+p+bnZM=xxAwmUChwxG1!fD(W)buPvoV<6xqvclNhJI7i_h-$ z%5j+TVqLKuKCX`_^!6JcSFeRhtdD?It!YyS5Ix+VW}A$Zx}xN!T}{BMEDyXTS?m@P2N zM!^EJV_W z+fGKl`Of4#n=fVb)Hl=9p|uR}_$q;1T$jsNPJtkQ{PD*Vpg5>xHGVdK8oI8f?C-z- z{zTX5rGfF;ufP8Kfd?P&3g>_LJ-UAHf>nIzUh=EYbUb(K_WS%VSyWxPYHT-OcfSh% zHD4vWBRuE1B3(OOKmvUqSxefr^VB$N645I=QH#p~mvA%;l&)Q8f1R02Uz6MM>KAbMf@Az;7 z_O)=IC{Wj37vczwN{8A#XJCTt(&>G7@AyckmwY-t_N)aR&cLLKLiAa;gHDGPn9OwO zvdQ&vjXgXDFcE<0CA;GPH*fCB!Z?0%D!`_(a8daMezg zJGVzAiZ+sN#|PjeUPn$00Qye9XZ=oBavJfG5ng48ZtQ8)6>Z73iX4y9&fQ<1uhuWU zc5AF?bbPq|X$>Q~N7mwWpTDDQVIm55$%3f|Ek1A8R#QuE!fYYqNthoUW z{S|od^6T_d=-vcOBt-3C9`@>*h(v;xLM8mp=-nB8(WxNO)eCTdCZF&40CaqQAIpv= z1Cv2Jua_vZ;sYK=U;-bkGi6FWBJX!{?bcZF*U389uer3ABQ!cb5==x_o5ZEGk(=Zs zn-H(EJ?y1h;}JPYf7plUV&_L_bbS0#VB#Q>z(I5Zu(V)O749+u=^_Tk0Vb|U-{B?f z=g*%#C}7rw@%by-awJj_(bbD+z@3l+7c~$E9-=A6dok<`erJ9?5ABe>IxpjNp)DsN zI&&FxYs~weHek5WMh5Pj)fzpF&$at}fST@gwT&bEtdToU^0NXPv)JHwh-x zwnnsFCgN{ITlCp*0F;V0^6+)LJbW!gCQethD;m;y#~*X~oWCcSbkPS92Xdhz^}*E&M_VVN3)Dv8nZhx#}Nc-LT#g|@LV{zK(!|9G_!|%r*z1T$3 z%=Pl+%aaXY|GrM<(0ZM>s@sFU8TZ#u{(SPmOZ>00Ki{OGnW>5cNag=TC+_RIr}gWz ze*d8Wdo7r_BX~68pyE5cM-?#S&gWsc-*?(52xVq#IwK^nudv>3&T2gxt2r+L6JL*Z zFHfCVeyfm?|GKeY#Cjj2!l`g9z4yy6 zzdRgt%3L{V6Pd`_^h!|5IW=F7JvwI=PrXo%p>}q?psRIw1mQe6P0gjT)J)takfF;!W4-vv82-u* zNlD;AOEQ*=9wCl55u7M%^DAo-ki)uG+)c zh4T#E>@2xH8LzR}U)L=4gek%_Fy9Yrx#DN z=8@I%N-nJ53&4D?;sx;XG@#Q*&hG}&@#2NPj_yeRT8Gnic_m2U^dnwaCu7;o0ev

_~`&Fa@&~$bKKN-Eu);~OF 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 i 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" KJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/1.4.2/src/minecraft/steampower/GUISteamPiston.java b/1.4.2/src/minecraft/steampower/GUISteamPiston.java deleted file mode 100644 index 61bb8bb8..00000000 --- a/1.4.2/src/minecraft/steampower/GUISteamPiston.java +++ /dev/null @@ -1,79 +0,0 @@ -package steampower; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import steampower.turbine.TileEntitySteamPiston; -import universalelectricity.electricity.ElectricInfo; -import universalelectricity.electricity.ElectricInfo.ElectricUnit; - - public class GUISteamPiston extends GuiContainer - { - private TileEntitySteamPiston tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUISteamPiston(InventoryPlayer par1InventoryPlayer, TileEntitySteamPiston tileEntity) - { - super(new ContainerFake(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Steam Piston Guage Read outs", 55, 6, 4210752); - this.fontRenderer.drawString("MeterReadings", 90, 33, 4210752); - String displayText = ""; - String displayText2 = ""; - String displayText3 = ""; - /** - if(tileEntity.connectedElectricUnit == null) - { - displayText = "Not Connected"; - } - else*/ - if(!tileEntity.running) - { - if(tileEntity.steam> 0) - { - displayText = "No Load"; - } - if(tileEntity.steam<= 0) - { - displayText = "No Steam"; - } - } - else - { - //displayText = ElectricUnit.getWattDisplay((int)(tileEntity.generateRate*20)); - displayText = "ForceOut: "+tileEntity.force+"N"; - displayText2 = "water" + "-" + tileEntity.water; - displayText3 = "steam" + "-" + tileEntity.steam; - } - - 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(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - } diff --git a/1.4.2/src/minecraft/steampower/GuiBoiler.java b/1.4.2/src/minecraft/steampower/GuiBoiler.java deleted file mode 100644 index c6038f9f..00000000 --- a/1.4.2/src/minecraft/steampower/GuiBoiler.java +++ /dev/null @@ -1,94 +0,0 @@ -package steampower; -import java.text.DecimalFormat; - -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.StatCollector; - -import org.lwjgl.opengl.GL11; - -import steampower.boiler.TileEntityBoiler; -import basicpipes.pipes.api.Liquid; - -public class GuiBoiler extends GuiContainer -{ - private TileEntityBoiler boilerInventory; - - public GuiBoiler(InventoryPlayer par1InventoryPlayer, TileEntityBoiler par2TileEntityGrinder) - { - super(new ContainerFake(par1InventoryPlayer, par2TileEntityGrinder)); - this.boilerInventory = par2TileEntityGrinder; - } - - /** - * Draw the foreground layer for the GuiContainer (everythin in front of the items) - */ - protected void drawGuiContainerForegroundLayer() - { - this.fontRenderer.drawString("Boiler", 60, 6, 4210752); - this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); - if(boilerInventory.hullHeat >=10000) - { - //this.fontRenderer.drawString("Heat Danger", (int)(105), 50, 4210752); - } - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"BoilerGui.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - int var5 = (this.width - this.xSize) / 2; - int var6 = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize-1, this.ySize); - int var7; - int var8; - int var9; - int var10; - if (this.boilerInventory.getStoredLiquid(Liquid.WATER)> 0) - { - var7 = boilerInventory.getStoredLiquid(Liquid.WATER)*4 + 1; - this.drawTexturedModalRect(var5 + 29, var6 + 72 - var7, 176, 148 - var7, 23, var7); - } - if (this.boilerInventory.getStoredLiquid(Liquid.STEAM) > 0) - { - var8 = boilerInventory.getStoredLiquid(Liquid.STEAM)/14*4 + 1; - this.drawTexturedModalRect(var5 + 108, var6 + 72 - var8, 176, 90 - var8, 23, var8); - } - - float precentH = Math.min(boilerInventory.hullHeat/1000 + 1, 10); - var9 = (int) Math.min(precentH*3.0F,30); - this.drawTexturedModalRect(var5 + 59, var6 + 70 - var9, 199, 71 - var9, 9, var9); - float precentSH = this.boilerInventory.heat/1000; - var10 = (int) Math.round(precentSH*5.33); - this.drawTexturedModalRect(var5 + 78, var6 + 16, 176, 14, var10, 16); - //debug - this.fontRenderer.drawString("NonGraphic Debug", (int)(200), 90, 000000); - this.fontRenderer.drawString("Water:"+this.boilerInventory.water+"/14", (int)(200), 100, 000000); - this.fontRenderer.drawString("Steam:"+this.boilerInventory.steam+"/140", (int)(200), 110, 000000); - - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" kJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/1.4.2/src/minecraft/steampower/ItemRenderHelperS.java b/1.4.2/src/minecraft/steampower/ItemRenderHelperS.java deleted file mode 100644 index 247aa927..00000000 --- a/1.4.2/src/minecraft/steampower/ItemRenderHelperS.java +++ /dev/null @@ -1,62 +0,0 @@ -package steampower; - -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.RenderBlocks; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -//ItemRenderHelperS.renderID -public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { - public static ItemRenderHelperS instance = new ItemRenderHelperS(); - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - private ModelGenerator modelGen = new ModelGenerator(); - private ModelTank modelTank = new ModelTank(0f); - private ModelFurnace modelFurnace = new ModelFurnace(); - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == SteamPowerMain.genID) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1.3F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Generator.png")); - modelGen.RenderMain(0.0725F); - GL11.glPopMatrix(); - } - if(block.blockID == SteamPowerMain.machine.blockID && metadata == 1) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); - modelTank.generalRender(0.0625F); - GL11.glPopMatrix(); - } - if(block.blockID == SteamPowerMain.machine.blockID && metadata > 1 && metadata < 6) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); - modelFurnace.genRender(0.0625F); - GL11.glPopMatrix(); - } - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - return false; - } - - public boolean shouldRender3DInInventory() { - - return true; - } - - public int getRenderId() - { - return renderID; - } -} diff --git a/1.4.2/src/minecraft/steampower/ModelCenterTank.java b/1.4.2/src/minecraft/steampower/ModelCenterTank.java deleted file mode 100644 index c8bc81cd..00000000 --- a/1.4.2/src/minecraft/steampower/ModelCenterTank.java +++ /dev/null @@ -1,53 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCenterTank extends ModelBase -{ - - ModelRenderer Block; - - public ModelCenterTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //block - Block = new ModelRenderer(this, 0, 0); - Block.addBox(0F, 0F, 0F, 16, 16, 16); - Block.setRotationPoint(-8F, 8F, -8F); - Block.setTextureSize(128, 32); - Block.mirror = true; - setRotation(Block, 0F, 0F, 0F); - } - public void renderBlock(float f5) - { - Block.render(f5); - } - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/1.4.2/src/minecraft/steampower/ModelCornerTank.java b/1.4.2/src/minecraft/steampower/ModelCornerTank.java deleted file mode 100644 index b3bcd70d..00000000 --- a/1.4.2/src/minecraft/steampower/ModelCornerTank.java +++ /dev/null @@ -1,95 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelCornerTank extends ModelBase -{ - //Corner - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape4; - - public ModelCornerTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //corner - Shape1 = new ModelRenderer(this, 0, 1); - Shape1.addBox(0F, 0F, 0F, 1, 16, 20); - Shape1.setRotationPoint(7F, 8F, -7F); - Shape1.setTextureSize(128, 128); - Shape1.mirror = true; - setRotation(Shape1, 0F, -0.7853982F, 0F); - Shape2 = new ModelRenderer(this, 44, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, 6F); - Shape2.setTextureSize(128, 128); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 44, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(6F, 8F, -8F); - Shape3.setTextureSize(128, 128); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 44); - Shape6.addBox(0F, 0F, 0F, 1, 15, 13); - Shape6.setRotationPoint(-8F, 9F, -7F); - Shape6.setTextureSize(128, 128); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 73); - Shape7.addBox(0F, 0F, 0F, 14, 15, 1); - Shape7.setRotationPoint(-8F, 9F, -8F); - Shape7.setTextureSize(128, 128); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 92); - Shape4.addBox(0F, 0F, 0F, 16, 1, 16); - Shape4.setRotationPoint(-8F, 8F, -8F); - Shape4.setTextureSize(128, 128); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - public void renderCorner(float f5) - { - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape4.render(f5); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/steampower/ModelEngine.java b/1.4.2/src/minecraft/steampower/ModelEngine.java deleted file mode 100644 index 449c6f17..00000000 --- a/1.4.2/src/minecraft/steampower/ModelEngine.java +++ /dev/null @@ -1,109 +0,0 @@ -// Date: 8/24/2012 1:44:37 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelEngine extends ModelBase -{ - //fields - ModelRenderer Base; - ModelRenderer top; - ModelRenderer TopPiston; - ModelRenderer BottomPiston; - ModelRenderer center; - ModelRenderer C1; - ModelRenderer C2; - - public ModelEngine() - { - textureWidth = 64; - textureHeight = 64; - - Base = new ModelRenderer(this, 0, 20); - Base.addBox(-6F, 0F, -6F, 12, 8, 12); - Base.setRotationPoint(0F, 16F, 0F); - Base.setTextureSize(64, 64); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - top = new ModelRenderer(this, 0, 0); - top.addBox(-6F, 0F, -6F, 12, 8, 12); - top.setRotationPoint(0F, -8F, 0F); - top.setTextureSize(64, 64); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - TopPiston = new ModelRenderer(this, 0, 52); - TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - TopPiston.setRotationPoint(0F, 0F, 0F); - TopPiston.setTextureSize(64, 64); - TopPiston.mirror = true; - setRotation(TopPiston, 0F, 0F, 0F); - BottomPiston = new ModelRenderer(this, 16, 52); - BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - BottomPiston.setRotationPoint(0F, 8F, 0F); - BottomPiston.setTextureSize(64, 64); - BottomPiston.mirror = true; - setRotation(BottomPiston, 0F, 0F, 0F); - center = new ModelRenderer(this, 32, 52); - center.addBox(-3F, 0F, -3F, 6, 6, 6); - //center.setRotationPoint(0F, 5F, 0F); - center.setTextureSize(64, 64); - center.mirror = true; - setRotation(center, 0F, 0F, 0F); - C1 = new ModelRenderer(this, 0, 41); - C1.addBox(-2F, -3F, 0F, 4, 6, 3); - C1.setRotationPoint(0F, 8F, 3F); - C1.setTextureSize(64, 64); - C1.mirror = true; - setRotation(C1, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 15, 41); - C2.addBox(-2F, -3F, -3F, 4, 6, 3); - C2.setRotationPoint(0F, 8F, -3F); - C2.setTextureSize(64, 64); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - //renderBot(f5); - //renderTop(f5); - } - public void renderBot(float f5) - { - Base.render(f5); - BottomPiston.render(f5); - } - public void renderTop(float f5) - { - top.render(f5); - TopPiston.render(f5); - C1.render(f5); - C2.render(f5); - } - public void renderMid(float f5,float p) - { - - center.setRotationPoint(0F, p, 0F); - center.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/1.4.2/src/minecraft/steampower/ModelFurnace.java b/1.4.2/src/minecraft/steampower/ModelFurnace.java deleted file mode 100644 index ec58045d..00000000 --- a/1.4.2/src/minecraft/steampower/ModelFurnace.java +++ /dev/null @@ -1,77 +0,0 @@ -// Date: 8/14/2012 3:02:31 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelFurnace extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer top; - ModelRenderer bottom; - ModelRenderer Shape1; - - public ModelFurnace() - { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(64, 32); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(64, 32); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(64, 32); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 27); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - genRender(f5); - } - public void genRender(float f5) - { - Body.render(f5); - top.render(f5); - bottom.render(f5); - Shape1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/steampower/ModelGenerator.java b/1.4.2/src/minecraft/steampower/ModelGenerator.java deleted file mode 100644 index 508294ac..00000000 --- a/1.4.2/src/minecraft/steampower/ModelGenerator.java +++ /dev/null @@ -1,131 +0,0 @@ -// Date: 8/27/2012 3:20:21 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGenerator extends ModelBase -{ - //fields - ModelRenderer BasePlate; - ModelRenderer LeftConnection; - ModelRenderer RightConnection; - ModelRenderer Mid; - ModelRenderer Mid2; - ModelRenderer front; - ModelRenderer front2; - ModelRenderer front3; - ModelRenderer Mid3; - ModelRenderer FrontConnector; - - public ModelGenerator() - { - textureWidth = 128; - textureHeight = 128; - - BasePlate = new ModelRenderer(this, 0, 0); - BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); - BasePlate.setRotationPoint(0F, 23F, 0F); - BasePlate.setTextureSize(128, 128); - BasePlate.mirror = true; - setRotation(BasePlate, 0F, 0F, 0F); - LeftConnection = new ModelRenderer(this, 0, 112); - LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); - LeftConnection.setRotationPoint(-6F, 16F, 0F); - LeftConnection.setTextureSize(128, 128); - LeftConnection.mirror = true; - setRotation(LeftConnection, 0F, 0F, 0F); - RightConnection = new ModelRenderer(this, 12, 112); - RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); - RightConnection.setRotationPoint(6F, 16F, 0F); - RightConnection.setTextureSize(128, 128); - RightConnection.mirror = true; - setRotation(RightConnection, 0F, 0F, 0F); - Mid = new ModelRenderer(this, 0, 29); - Mid.addBox(-4F, 0F, -6F, 8, 12, 12); - Mid.setRotationPoint(0F, 10F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Mid2 = new ModelRenderer(this, 0, 53); - Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); - Mid2.setRotationPoint(0F, 12F, 0F); - Mid2.setTextureSize(128, 128); - Mid2.mirror = true; - setRotation(Mid2, 0F, 0F, 0F); - front = new ModelRenderer(this, 20, 15); - front.addBox(-2F, -4F, 0F, 4, 8, 1); - front.setRotationPoint(0F, 16F, -7F); - front.setTextureSize(128, 128); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - front2 = new ModelRenderer(this, 0, 24); - front2.addBox(-4F, -2F, 0F, 8, 4, 1); - front2.setRotationPoint(0F, 16F, -7F); - front2.setTextureSize(128, 128); - front2.mirror = true; - setRotation(front2, 0F, 0F, 0F); - front3 = new ModelRenderer(this, 0, 16); - front3.addBox(-3F, -3F, 0F, 6, 6, 1); - front3.setRotationPoint(0F, 16F, -7F); - front3.setTextureSize(128, 128); - front3.mirror = true; - setRotation(front3, 0F, 0F, 0F); - Mid3 = new ModelRenderer(this, 40, 29); - Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); - Mid3.setRotationPoint(0F, 12F, 0F); - Mid3.setTextureSize(128, 128); - Mid3.mirror = true; - setRotation(Mid3, 0F, 0F, 0F); - FrontConnector = new ModelRenderer(this, 0, 120); - FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); - FrontConnector.setRotationPoint(0F, 14F, -6F); - FrontConnector.setTextureSize(128, 128); - FrontConnector.mirror = true; - setRotation(FrontConnector, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - } - public void RenderMain(float f5) - { - BasePlate.render(f5); - Mid.render(f5); - Mid2.render(f5); - front.render(f5); - front2.render(f5); - front3.render(f5); - Mid3.render(f5); - FrontConnector.render(f5); - } - public void RenderLeft(float f5) - { - LeftConnection.render(f5); - } - public void RenderRight(float f5) - { - RightConnection.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/steampower/ModelTank.java b/1.4.2/src/minecraft/steampower/ModelTank.java deleted file mode 100644 index ebe93a57..00000000 --- a/1.4.2/src/minecraft/steampower/ModelTank.java +++ /dev/null @@ -1,148 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelTank extends ModelBase -{ - //One Block Tank - ModelRenderer TANK_WALL_1; - ModelRenderer TANK_WALL_2; - ModelRenderer TANK_WALL_3; - ModelRenderer TANK_WALL_4; - ModelRenderer TANK_SUPPORT_1; - ModelRenderer TANK_TOP_1; - ModelRenderer TANK_WALL_5; - ModelRenderer TANK_SUPPORT_2; - ModelRenderer TANK_SUPPORT_3; - ModelRenderer TANK_WALL_6; - ModelRenderer TANK_TOP_2; - ModelRenderer TANK_TOP_3; - ModelRenderer TANK_VALVE; - - public ModelTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - TANK_WALL_1 = new ModelRenderer(this, 0, 49); - TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); - TANK_WALL_1.setRotationPoint(6F, 12F, -4F); - TANK_WALL_1.setTextureSize(128, 128); - TANK_WALL_1.mirror = true; - setRotation(TANK_WALL_1, 0F, 0F, 0F); - TANK_WALL_2 = new ModelRenderer(this, 0, 70); - TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); - TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); - TANK_WALL_2.setTextureSize(128, 128); - TANK_WALL_2.mirror = true; - setRotation(TANK_WALL_2, 0F, 0F, 0F); - TANK_WALL_3 = new ModelRenderer(this, 0, 34); - TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_3.setRotationPoint(0F, 12F, 8F); - TANK_WALL_3.setTextureSize(128, 128); - TANK_WALL_3.mirror = true; - setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); - TANK_WALL_4 = new ModelRenderer(this, 0, 34); - TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_4.setRotationPoint(0F, 12F, -8F); - TANK_WALL_4.setTextureSize(128, 128); - TANK_WALL_4.mirror = true; - setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); - TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); - TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); - TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_1.setTextureSize(128, 128); - TANK_SUPPORT_1.mirror = true; - setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); - TANK_TOP_1 = new ModelRenderer(this, 43, 11); - TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); - TANK_TOP_1.setRotationPoint(0F, 10F, 0F); - TANK_TOP_1.setTextureSize(128, 128); - TANK_TOP_1.mirror = true; - setRotation(TANK_TOP_1, 0F, 0F, 0F); - TANK_WALL_5 = new ModelRenderer(this, 0, 34); - TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_5.setRotationPoint(0F, 12F, -7F); - TANK_WALL_5.setTextureSize(128, 128); - TANK_WALL_5.mirror = true; - setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); - TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_2.setTextureSize(128, 128); - TANK_SUPPORT_2.mirror = true; - setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); - TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_3.setTextureSize(128, 128); - TANK_SUPPORT_3.mirror = true; - setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); - TANK_WALL_6 = new ModelRenderer(this, 0, 34); - TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_6.setRotationPoint(0F, 12F, 7F); - TANK_WALL_6.setTextureSize(128, 128); - TANK_WALL_6.mirror = true; - setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); - TANK_TOP_2 = new ModelRenderer(this, 43, 0); - TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_2.setRotationPoint(0F, 10F, 0F); - TANK_TOP_2.setTextureSize(128, 128); - TANK_TOP_2.mirror = true; - setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); - TANK_TOP_3 = new ModelRenderer(this, 43, 0); - TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_3.setRotationPoint(0F, 10F, 0F); - TANK_TOP_3.setTextureSize(128, 128); - TANK_TOP_3.mirror = true; - setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); - TANK_VALVE = new ModelRenderer(this, 84, 0); - TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); - TANK_VALVE.setRotationPoint(-1F, 9F, -1F); - TANK_VALVE.setTextureSize(128, 128); - TANK_VALVE.mirror = true; - setRotation(TANK_VALVE, 0F, 0F, 0F); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - public void generalRender(float f5) - { - TANK_WALL_1.render(f5); - TANK_WALL_2.render(f5); - TANK_WALL_3.render(f5); - TANK_WALL_4.render(f5); - TANK_SUPPORT_1.render(f5); - TANK_TOP_1.render(f5); - TANK_WALL_5.render(f5); - TANK_SUPPORT_2.render(f5); - TANK_SUPPORT_3.render(f5); - TANK_WALL_6.render(f5); - TANK_TOP_2.render(f5); - TANK_TOP_3.render(f5); - TANK_VALVE.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/1.4.2/src/minecraft/steampower/RenderBoiler.java b/1.4.2/src/minecraft/steampower/RenderBoiler.java deleted file mode 100644 index 5ffe2a32..00000000 --- a/1.4.2/src/minecraft/steampower/RenderBoiler.java +++ /dev/null @@ -1,62 +0,0 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.boiler.TileEntityBoiler; -import basicpipes.pipes.api.MHelper; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - private ModelCenterTank model2; - private ModelCornerTank model3; - - public RenderBoiler(float par1) - { - model = new ModelTank(par1); - model2 = new ModelCenterTank(par1); - model3 = new ModelCornerTank(par1); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; - int meta = 0; - if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) - { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - model.generalRender(0.0625F); - } - else - if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) - { - bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); - model2.renderBlock(0.0625F); - } - else - { - int corner = MHelper.corner(tileEntity); - bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); - switch(corner) - { - case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - model3.renderCorner(0.0625f); - - } - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/steampower/RenderFurnace.java b/1.4.2/src/minecraft/steampower/RenderFurnace.java deleted file mode 100644 index 5513ae1e..00000000 --- a/1.4.2/src/minecraft/steampower/RenderFurnace.java +++ /dev/null @@ -1,37 +0,0 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderFurnace extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelFurnace model; - - public RenderFurnace() - { - model = new ModelFurnace(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - 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.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/steampower/RenderGenerator.java b/1.4.2/src/minecraft/steampower/RenderGenerator.java deleted file mode 100644 index c919afd4..00000000 --- a/1.4.2/src/minecraft/steampower/RenderGenerator.java +++ /dev/null @@ -1,37 +0,0 @@ -package steampower; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderGenerator extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelGenerator model; - - public RenderGenerator() - { - model = new ModelGenerator(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(meta) - { - case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; - case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.RenderMain(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/steampower/SteamClientProxy.java b/1.4.2/src/minecraft/steampower/SteamClientProxy.java deleted file mode 100644 index 2d21e051..00000000 --- a/1.4.2/src/minecraft/steampower/SteamClientProxy.java +++ /dev/null @@ -1,34 +0,0 @@ -package steampower; - - -import net.minecraftforge.client.MinecraftForgeClient; -import steampower.boiler.TileEntityBoiler; -import steampower.burner.TileEntityFireBox; -import steampower.geared.RenderGearPiston; -import steampower.turbine.TileEntityGen; -import steampower.turbine.TileEntitySteamPiston; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class SteamClientProxy extends SteamProxy{ - - public void preInit() - { - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); - RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); - } - @Override - public void init() - { - ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); - ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); - ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); - } - public void postInit() - { - - } - -} diff --git a/1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java b/1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java deleted file mode 100644 index ccc2c70e..00000000 --- a/1.4.2/src/minecraft/steampower/geared/ModelGearPiston.java +++ /dev/null @@ -1,381 +0,0 @@ -// Date: 10/1/2012 12:32:21 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package steampower.geared; - -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; - -public class ModelGearPiston extends ModelBase -{ - //fields - ModelRenderer PistonCover; - ModelRenderer RSpiston; - ModelRenderer LSpiston; - ModelRenderer RodPiston; - ModelRenderer Base; - ModelRenderer Front; - ModelRenderer BackCC; - ModelRenderer RightPipe; - ModelRenderer FrontCC; - ModelRenderer LeftCC; - ModelRenderer FrontPipe; - ModelRenderer Right; - ModelRenderer RightCC; - ModelRenderer Back; - ModelRenderer BackPipe; - ModelRenderer Left; - ModelRenderer LeftPipe; - ModelRenderer RigthF4; - ModelRenderer LeftF4; - ModelRenderer LeftF3; - ModelRenderer LeftF2; - ModelRenderer LeftF1; - ModelRenderer RigthF3; - ModelRenderer RigthF2; - ModelRenderer RigthF1; - ModelRenderer RigthGCC; - ModelRenderer RightSlide; - ModelRenderer midRod; - ModelRenderer RightRod2; - ModelRenderer LeftGCC; - ModelRenderer LeftRod2; - ModelRenderer LeftSlide2; - - public ModelGearPiston() - { - textureWidth = 128; - textureHeight = 128; - - PistonCover = new ModelRenderer(this, 13, 31); - PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); - PistonCover.setRotationPoint(-3F, 20F, 0F); - PistonCover.setTextureSize(128, 128); - PistonCover.mirror = true; - setRotation(PistonCover, 0F, 0F, 0F); - RSpiston = new ModelRenderer(this, 0, 32); - RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); - RSpiston.setRotationPoint(1F, 3F, 0F); - RSpiston.setTextureSize(128, 128); - RSpiston.mirror = true; - setRotation(RSpiston, 0F, 0F, 0F); - LSpiston = new ModelRenderer(this, 0, 32); - LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); - LSpiston.setRotationPoint(2F, 3F, 0F); - LSpiston.setTextureSize(128, 128); - LSpiston.mirror = true; - setRotation(LSpiston, 0F, 0F, 0F); - RodPiston = new ModelRenderer(this, 0, 59); - RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); - RodPiston.setRotationPoint(0F, 8F, 0F); - RodPiston.setTextureSize(128, 128); - RodPiston.mirror = true; - setRotation(RodPiston, 0F, 0F, 0F); - Base = new ModelRenderer(this, 12, 49); - Base.addBox(0F, 0F, 0F, 10, 5, 10); - Base.setRotationPoint(-5F, 19F, -5F); - Base.setTextureSize(128, 128); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - Front = new ModelRenderer(this, 28, 68); - Front.addBox(-3F, 0F, 0F, 6, 12, 1); - Front.setRotationPoint(0F, 12F, -7F); - Front.setTextureSize(128, 128); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - BackCC = new ModelRenderer(this, 43, 68); - BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); - BackCC.setRotationPoint(0F, 16F, 6F); - BackCC.setTextureSize(128, 128); - BackCC.mirror = true; - setRotation(BackCC, 0F, 0F, 0F); - RightPipe = new ModelRenderer(this, 12, 87); - RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); - RightPipe.setRotationPoint(-6F, 14F, 0F); - RightPipe.setTextureSize(128, 128); - RightPipe.mirror = true; - setRotation(RightPipe, 0F, 0F, 0F); - FrontCC = new ModelRenderer(this, 43, 68); - FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); - FrontCC.setRotationPoint(0F, 16F, -7F); - FrontCC.setTextureSize(128, 128); - FrontCC.mirror = true; - setRotation(FrontCC, 0F, 0F, 0F); - LeftCC = new ModelRenderer(this, 43, 74); - LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); - LeftCC.setRotationPoint(7F, 16F, 0F); - LeftCC.setTextureSize(128, 128); - LeftCC.mirror = true; - setRotation(LeftCC, 0F, 0F, 0F); - FrontPipe = new ModelRenderer(this, 28, 82); - FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); - FrontPipe.setRotationPoint(0F, 14F, -6F); - FrontPipe.setTextureSize(128, 128); - FrontPipe.mirror = true; - setRotation(FrontPipe, 0F, 0F, 0F); - Right = new ModelRenderer(this, 12, 68); - Right.addBox(0F, 0F, -3F, 1, 12, 6); - Right.setRotationPoint(-7F, 12F, 0F); - Right.setTextureSize(128, 128); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - RightCC = new ModelRenderer(this, 43, 74); - RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); - RightCC.setRotationPoint(-7F, 16F, 0F); - RightCC.setTextureSize(128, 128); - RightCC.mirror = true; - setRotation(RightCC, 0F, 0F, 0F); - Back = new ModelRenderer(this, 28, 68); - Back.addBox(-3F, 0F, 0F, 6, 12, 1); - Back.setRotationPoint(0F, 12F, 6F); - Back.setTextureSize(128, 128); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - BackPipe = new ModelRenderer(this, 28, 82); - BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); - BackPipe.setRotationPoint(0F, 14F, 6F); - BackPipe.setTextureSize(128, 128); - BackPipe.mirror = true; - setRotation(BackPipe, 0F, 0F, 0F); - Left = new ModelRenderer(this, 12, 68); - Left.addBox(0F, 0F, -3F, 1, 12, 6); - Left.setRotationPoint(6F, 12F, 0F); - Left.setTextureSize(128, 128); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - LeftPipe = new ModelRenderer(this, 12, 87); - LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); - LeftPipe.setRotationPoint(6F, 14F, 0F); - LeftPipe.setTextureSize(128, 128); - LeftPipe.mirror = true; - setRotation(LeftPipe, 0F, 0F, 0F); - RigthF4 = new ModelRenderer(this, 0, 56); - RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); - RigthF4.setRotationPoint(-8F, 0F, 0F); - RigthF4.setTextureSize(128, 128); - RigthF4.mirror = true; - setRotation(RigthF4, 0F, 0F, 0F); - LeftF4 = new ModelRenderer(this, 0, 56); - LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); - LeftF4.setRotationPoint(8F, 0F, 0F); - LeftF4.setTextureSize(128, 128); - LeftF4.mirror = true; - setRotation(LeftF4, 0.7853982F, 0F, 0F); - LeftF3 = new ModelRenderer(this, 0, 56); - LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); - LeftF3.setRotationPoint(8F, 0F, 0F); - LeftF3.setTextureSize(128, 128); - LeftF3.mirror = true; - setRotation(LeftF3, 0.7853982F, 0F, 0F); - LeftF2 = new ModelRenderer(this, 0, 56); - LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); - LeftF2.setRotationPoint(8F, 0F, 0F); - LeftF2.setTextureSize(128, 128); - LeftF2.mirror = true; - setRotation(LeftF2, 0.7853982F, 0F, 0F); - LeftF1 = new ModelRenderer(this, 0, 56); - LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); - LeftF1.setRotationPoint(8F, 0F, 0F); - LeftF1.setTextureSize(128, 128); - LeftF1.mirror = true; - setRotation(LeftF1, 0.7853982F, 0F, 0F); - RigthF3 = new ModelRenderer(this, 0, 56); - RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); - RigthF3.setRotationPoint(-8F, 0F, 0F); - RigthF3.setTextureSize(128, 128); - RigthF3.mirror = true; - setRotation(RigthF3, 0F, 0F, 0F); - RigthF2 = new ModelRenderer(this, 0, 56); - RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); - RigthF2.setRotationPoint(-8F, 0F, 0F); - RigthF2.setTextureSize(128, 128); - RigthF2.mirror = true; - setRotation(RigthF2, 0F, 0F, 0F); - RigthF1 = new ModelRenderer(this, 0, 56); - RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); - RigthF1.setRotationPoint(-8F, 0F, 0F); - RigthF1.setTextureSize(128, 128); - RigthF1.mirror = true; - setRotation(RigthF1, 0F, 0F, 0F); - RigthGCC = new ModelRenderer(this, 12, 18); - RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); - RigthGCC.setRotationPoint(-6F, 0F, 0F); - RigthGCC.setTextureSize(128, 128); - RigthGCC.mirror = true; - setRotation(RigthGCC, 0F, 0F, 0F); - RightSlide = new ModelRenderer(this, 0, 44); - RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); - RightSlide.setRotationPoint(-4F, 0F, 0F); - RightSlide.setTextureSize(128, 128); - RightSlide.mirror = true; - setRotation(RightSlide, 0F, 0F, 0F); - LeftSlide2 = new ModelRenderer(this, 0, 27); - LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); - LeftSlide2.setRotationPoint(-3F, 0F, 0F); - LeftSlide2.setTextureSize(128, 128); - LeftSlide2.mirror = true; - setRotation(LeftSlide2, 0F, 0F, 0F); - RightRod2 = new ModelRenderer(this, 0, 20); - RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); - RightRod2.setRotationPoint(-6F, 0F, 0F); - RightRod2.setTextureSize(128, 128); - RightRod2.mirror = true; - setRotation(RightRod2, 0F, 0F, 0F); - LeftGCC = new ModelRenderer(this, 24, 18); - LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); - LeftGCC.setRotationPoint(7F, 0F, 0F); - LeftGCC.setTextureSize(128, 128); - LeftGCC.mirror = true; - setRotation(LeftGCC, 0.7853982F, 0F, 0F); - LeftRod2 = new ModelRenderer(this, 0, 20); - LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); - LeftRod2.setRotationPoint(7F, 0F, 0F); - LeftRod2.setTextureSize(128, 128); - LeftRod2.mirror = true; - setRotation(LeftRod2, 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) - { - Base.render(f5); - PistonCover.render(f5); - - } - public void renderGear(float f5) - { - //Rod connectors - LeftF4.render(f5); - LeftF3.render(f5); - LeftF2.render(f5); - LeftF1.render(f5); - RigthF4.render(f5); - RigthF3.render(f5); - RigthF2.render(f5); - RigthF1.render(f5); - RigthGCC.render(f5); - LeftGCC.render(f5); - } - public void renderR(float f5,int pos) - { - 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); - //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); - midRod.render(f5); - RightRod2.render(f5); - LeftRod2.render(f5); - LeftSlide2.render(f5); - } - public void renderLeft(float f5) - { - Left.render(f5); - LeftPipe.render(f5); - LeftCC.render(f5); - } - public void renderRight(float f5) - { - Right.render(f5); - RightCC.render(f5); - RightPipe.render(f5); - } - public void renderFront(float f5) - { - Front.render(f5); - FrontCC.render(f5); - FrontPipe.render(f5); - } - public void renderBack(float f5) - { - Back.render(f5); - BackPipe.render(f5); - BackCC.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java b/1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java deleted file mode 100644 index 70c79aa1..00000000 --- a/1.4.2/src/minecraft/steampower/geared/RenderGearPiston.java +++ /dev/null @@ -1,51 +0,0 @@ -package steampower.geared; - -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; - -import org.lwjgl.opengl.GL11; - -import steampower.SteamPowerMain; -import steampower.turbine.TileEntitySteamPiston; - -public class RenderGearPiston extends TileEntitySpecialRenderer -{ - private ModelGearPiston model; - - public RenderGearPiston() - { - model = new ModelGearPiston(); - } - public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - - 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.renderGear(0.0625F); - model.renderR(0.0625F,tileEntity.pos); - model.renderBody(0.0625F); - model.renderBack(0.0625F); - model.renderFront(0.0625F); - model.renderLeft(0.0625F); - model.renderRight(0.0625F); - GL11.glPopMatrix(); - } - - - @Override - public void renderTileEntityAt(TileEntity var1, double d, double d1, - double d2, float d3) { - this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); - - } - -} \ No newline at end of file diff --git a/1.4.2/src/minecraft/textures/BoilerGui.png b/1.4.2/src/minecraft/textures/BoilerGui.png deleted file mode 100644 index f7ba4f4b5f930d630bc3c9ed7794b41482ac715d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1900 zcmcIk`Bzid7Tz}rCX7iy1r*XW0xCE_^c8K4Tosf+p-3q+g(p}*Bp`}p1%#wleNKRj zK|qAqqJSuag;J0q51C{s(n19ZlYonPQjjt5PHca8?+pdk4i&(4b6rA*XTBaseVx{eaZd6tKq1f3JzW&xhzdgSR|le(g; zzQI1n!lKvs{V=oZ8sQ^GUFy5^53jraFN*d#n&qg(FO-&hWVpr3Kv#);rC)Orr)@vw zF=14`-ko4<|LR`w4gawAuF8nAwdI(D%%)4L_t)lEd*|2WlkclplP1JJ91g6+Ip_W3 z;|1B&yy`c)XZEt1o)oY0{N}W+$~dH|%IRm~hJBH9x>}2-up`>>NlD2DTU%Ss=hNxi zQw8Kg-{{pu-G4sVxg$N+K3i+^=FKN9Yg5hY7kc)tS}4}6e~m8 z+eh1J;5Y974HFvM3m)JQU(jnO2BvrQjT!$8(_n(==)yp0HAw_amx!;#&{)^iRn%F} zFO?NlMH`mwcRM(CQ<_DP+8tQzEz;=bo0pY6jR=Vxx9~_lxqq~^z&vEti2~+k>frmou4^mdchf?(T;zk%ZL~sZ zp4+3_yS;lNDuUXp=nx*JHKy!zzo{-w*56J{G26KIcG4isV?_v83SH+-^kGie!#a3A=}D6fh4g+~S6frG8DJ#vOIzZYE+GC0)?fm8#yKoZ??r2^Jx zWV9iqV(w#0=5o47)2AWl>)1tB{H$vqp$|VeJimq2|IVx6g1oPHNLZOlg?Fv9#qN*8 z+B^&L^EVQhzuyrA2k&%tahU_1W$~>}dBO#1U$=A6&`%mw(arLFvT1E3eWprNqI-2U zrywDMDjA{P7$-32R3DQ2#P`VYGfE{=uIVgzIy`7277_ze^8EQ$>H8ToZ@TZcXGBd1 zJa2k9Con|%c&pdKWbX3kg$-j|F0dng{Mv~fK{M1yFDf%6*8-JbKa~jK&twX65+T*g zfeTbMOhOisFEd08IFA%k*m<{4s(a%Ep|!I6wzpZV{*R-XXE;&2QHnnPbBSzXcy6Wn zvjMItBih6vfuZB3Bwboc%Bq%^cJq&w=Go6kbL@{NpVXzBS;U+&UVE05^v*q`KTyuy zr>Cl#y@hqc*LREiW9MMQnh(1xbgYiAx66E$I|Yt0DhVz~|JW1)4e-mcX#_{-`5_>| zFt!atSJyTSr{aJ>XhJ}Th7W(TqxNE{Y~oh+a){o5+UADrqhlpgQ-l{U_3tdqe|*}_ z-?3}griOjKaeD;bOJ0a~3*v^#F#(O){Q`3guivPxjqWg}f7RAQRG@(fU=|vmWqZH= zprl_GCI11KfgcJg_?n4|sYDnYm>il?lP}J=SnTBuknnH4Ed%ui+MW|KU$hVpJ^W2M zUErI}tJgh1517W|%L#pX=H6jU>kV7WPxJYounbt6DuB?yN9^)aCPG*Y5kCqFIS_yV z4g|zcfzMC@^S`E$KIu-r>25k#g!}1@`}S~~bF{>x#`JW`dV3PP`EA^uQA?&`b8&#A zWH23z(m;2VnX0EUPykm}sCEd@S<_Uo)I{q@Xw#9RkV5#Y=fdrTQ#bag4h&;$LA_dH zpN;An6ekxL3}eMJ{+1p;v12-oAkCH5r(Qa9RA0sBCI_=`37f%o|@?>=cANu(cl zuS_^=Y|49c!8p`%!9el}I7k*{F%QocZ@bpf*~u=8AJLGwy1TQr42}>BzkIs&cbRdP hpqBvurw6~dLYx}8H<9(l`!Yofo|V02{$ZaV{sSf1{bT?D diff --git a/1.4.2/src/minecraft/textures/CornerTank.png b/1.4.2/src/minecraft/textures/CornerTank.png deleted file mode 100644 index 43e1ddefa731bd31873530ed97455fc68aa1b1e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2658 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 diff --git a/1.4.2/src/minecraft/textures/Engine.png b/1.4.2/src/minecraft/textures/Engine.png deleted file mode 100644 index 0f68fe758befe90e39392f330cb363dd0cf91623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmV+k1or!hP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2iyq* z6&(Z01?N@(00W6hL_t(|+U;2}XcJKw{@>j-gEpmfGpk^rgD#mBN(Vub!L5UC64J%e zMH~u35IdA&agd@8Dy54{D+SR~u;64DMLI~_-Fq+Z<)yhF z!rgoK{Xe-c|NGznz968qQa*=4pgn(ofIy-dEKZMKe*{g_pxf<&rfGoje@>dsrh8v5 z7To(MZ+D4!FIJ{$EKZhXL8H-dugzxD{RG+4`ZhegGaHI87YneozC92Em@=TzXaL3- z5JG@4hOx0R-}6?h)q`JL-3n)p>DU*NJ!lh{WH% ze)W9UfYrr0V!Up*dp>IbX{#H$ZIHGGl#2y;@a&z>&x>DJ*>JZ=!!V>0K;3qVZiU<0 zh0Lq1{Ud1vh<+i_#(Q=!SbBTa@Z1DgmPLIQPzldX084ML5}um?o_$>fJU0P6y}b%} zZUT6Edlm4>HYmFj6lpaJq0LWUoZ`(sw1EMrO z+V}{e;iv&L8Xrykejap$)c_iek2b#SC7|3{z^qzm>&uVPB_PoR6HPGD1QSg#(F7As zFwq31ZG$6kKK5?qE)%n1=ipZ;+dRHuR;^YssSn6xGN>;#z-v!8Kb*>1b2kIWB;)ZN zR6n3}22?5)OzH!&*(`Skpr|iSdLbU)IJo2EV@%o}`>_NxZ>ji4x6TlP1D4sd=AgA9m3J{G8|1W z!~EJIoE@LV^ZE~(0Hr%YXU)f%46gv!ImE;V2RUWpUYKnrhE7 zpA^BU45-y=zDe2RffFz}Iq92}Js$a8fTr5B%#-XdmUg36nq(&l00000NkvXXu0mjf DZza#8 diff --git a/1.4.2/src/minecraft/textures/Furnace.png b/1.4.2/src/minecraft/textures/Furnace.png deleted file mode 100644 index a3eca67538223cc56f945fffdaad118a9a913a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1455 zcmds1i&N5h5dVVZGbIXNX=&J{Tn2cVhL4m6#K)!KnP!4`(Us*J3_KyQv#ZHc=gLmY zGhdmCg}t=I6z;ODFsL~TO?>oFQX zbyz4V8UPp+!hpFcYMnC^+7kbrSft2*k>K#WCZXgnJLo4bn! z>&|G{3z25oVcW@OY6}yTw|{-U2nE1WTo{QMlk-BSj>>TAb~GE|{#mluD)Z;t$9IXz z;pn=v{Obv*2i4eu#N1GuIr#5Lnad@W`qNrgs10GA*J*Zn?aQDQWd9>fRC0yGp)`v6 zA+b7%Ttq6kj@hj=F<;W=|K{KWy{_loyGsty@#4{(!t_DOxmVU-B-&3GpW(i4h=G}d zU;yA?ImiQG32^;3Cqy}K=vP_hHx~1-^TcC=TiF9d`)@fphfew8`R%tRO4= zWfkAfmC{um)XbPUJ~)|J9M7bySX3dQ@WZ_&$%+8jS`1Y0+S|{$FHhPF+y(^2fQAv#B zv-GK*Q_pDp!_&kb!EADa&)YNF{cO@QT6*8Kd*F^^zb!REw7XRvT`epT!=2;pllo2svo*M`d&7?>Ri_TOQrkbw z<{QO|iB&QuZ_^zpa!*fBm+$aUF}mXp?rA@*vN296sWg23eBwM4|Ca3abtyUgz%Wu! zYdp0Xh(raC)7{Z%!(6=?68W)z0O5vy#fZCADTJCjV ztuvkp$=DDoYCZ7k1UXM<5(dc1?P@7UV95@=8NxCrSQO*9 z5$@cn3-Gm*Q5|yK12+fi@3izr-cn8WCfd1LMaYdx%)Si%TwA(qITPrQNDa$mf~G3z z!WQ48Jx9xH@MFV?U0+C5`TLFrwh4Tcf?1Dg7ewxBqN+T*d167>tQz9J6L4cmr3?ey>q$hqM85 zg0Wd7+C| zgW!U_%O?XxI14-?iy0XB4ude`@%$AjKtc8rPhVH|JDk$u;tDKFu5JJdHF~-@hGg7( zd)<)F!9k$)p=6*XMDB=8khCz+PQbgpkx8k-6SMm)EU!Ph8w4LEYxb$CpaV4e+znno_Pgg&ebxsLQ0Ce45_&F z_Kt1Pp#TxK3*vQB<_Fk}3~~;hisPQ1wQ%p$=z@|P4AL7C4a`#5loUB_j1(=G2X%;i zczW-5oQfjQR0#MxG3FPOJb(GkfA7D)xA#2rc;~u_+Y@f6{oZe5YbQTv?)rTFbAF-? z2SXZ)tNz95pRYetc3f0`ef6GIm(v)!QunV>&0vpWU}E^<6|{|IO_JILrWc;9C(1+@ zyz$`|J-?bo%VDR9?`9KU{g*yB~knRujJdN6h8pnc+cq`egf;CH~&cdGz?YLS2Rb?jirf%92GFoNSkV9ieE* ztiZs*z|_DXkS&@ZnV31` zJqkOneZbPX^XL65JM|l*FJ&?Ut#sJ!oFL6pAfeR0z5cp?!Hc(14BO)vSDpLwsPMQJ zqZY$NmDsfm%hMRGt}u1Uui*FL1_jSAOXd*X!ZapPpqmU%A6T}91;_$P0D}(_-7r$> Z2lMyImjd>!kbead@^tlcS?83{1OS^U6FL9@ diff --git a/1.4.2/src/minecraft/textures/Generator.png b/1.4.2/src/minecraft/textures/Generator.png deleted file mode 100644 index 3d52662b4363867c2de6b1000143900a1f2fffc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1423 zcmZ`(eKgYx82$~}FBC_7<;la~Sh8*NzzJbJ`z z3jGcQ0yZ?Knru9;G>uyND^jluRN~gQc$snlwSRDjd2ES(WP;V=#ty@uFtDp0Uo5a?flVJf)xZxv%#HLsc@V_h_7qT$ zQ1_4YifQ{~)DaghbJs8YMCGhgIae*40&W)z>dG;fh#TJX(?QI&Rj-%1qS-k3s;lF* z{t&(BhIgsEXlQu#!!evyAu_gP*t&{-A#_MK2I0eltT?WSseKrOX90+C@V7;UeNNCT zK~Zj_tJN(TOmygz{UV^ynyl~VQ@UN{B%wdI07jL(Aqgl9gm^M~%`al2wfP&DO2aH) zEd;vNDV|&OP+>IRqXMBES9E%fqt0q=p6ixV$-s3kue^McQS&1?0AyG0qEyfcteZ1w zp{3t8H(eaGO4uFznwkd^MGmSd9;7}emSKaweiM3q6O~>(Kks**e)CtJ3u9`f(b<;h z>gaQ=w8&m%W*ogveO6?zI=j->a#+rv?mQuB*n^UL;3Mu!cDSrlMqsduoX^e#KMSV> zBV+%R^RRhYw4At@aF6hmQXd4*RXnfN-NBZ3Y8d#%%(6;nq~y~bBlV+;#t7UcY^BI^ zm;NFP$x~1~ON-Hfa%oVY%=O%_X@d16YsvZ7o>m?deXkT=f$Hw&+f^X1D98H!Bqo8) z{3N18R&u{I847HmcfG)U8q5F9z->{wvG z$Fyi*RAFgYj^}j{mPlab9QS~Zg26T8VMj7yByBtz38%Y!Q{vX$=PnRDja~c8;!i)%uB?r*?(*~yeN-gw3zB)-}9kt%p#LI(yrm2&- zJrDI=KNWK_48_K_XN}SMgX+yj!5HKCWKg_dxXd4;ud)V+n+XF60_G`68;Y2qg%}th z_AhwCGd_&iXkM|Hp$I?A|JI%S`<2A71G8<`68E-#anETkhIz{su~^(yc&BPN{|^+`uS_=)UVT{nb^~Q%g5tE=WP_*w8tB zBuJ6^(iW7<+W&3!M7C&*IuJAud0t$D_&7DmXgoZhVxwu6!tBaM_*tUyoR3o~NTg4C zaa?Oiwe_0Wz?P)TB9shZvok~R10_@H%{-)vE>^8@3mOMmF>PIi;&%?h<7}}Nr%AW| E28)4(K>z>% diff --git a/1.4.2/src/minecraft/textures/GrinderGUI.png b/1.4.2/src/minecraft/textures/GrinderGUI.png deleted file mode 100644 index 498818ae1f6e4a365c24187fcaefdc6ffe170970..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1284 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn`1yx4R3& ze-K=-cll(X2xoyuWHAE+-$4*&+%YlxEl`lX#M9T6{SK=HlQ~o8i^)w43@k04E{-7; zx8B}0^cQiIXn2_4dLuAGVzK>!84;O!iaWWIUH7+~JJc7nnbrPaA77Pq(e-R+r&156 z0wifAXi|c6_jZSjlmzmE&<$oI;M zXOy{pH^NNYSRO0d0%sg!tdZ!fLhWb=A`yu3~A&6nzI>npe?Zd$6YAH!I3_1Cw=w}zi=`tRN8 zn|kRZ$C6(%KF_x^RL;Bp>(?TUq;h8lmjhx9IqWQ8+Gu5i8J~>bS+!<1f$t{IS`a^S}?*6^k{xB>38o8Tvgf ztogT47oT|?4Vu7wBV_W?rorYsP~WZlM=XvloVlq(2TRi(dKmn}tdf z3Z?A(gd6oy7KUd^y4eC$2%R~F=7oANB}f2%wQ5=P;m5PG4gwSJh4n|9tVr> z6BmVO1_w~)*P2-&d|~AQh*MdgH8B~~F}^BzwYKn8-{X)3s3H~y0f=f8h5$n_&|Z}j zAl-i~&h!O0X38#Sx($h;ld=DdWj_l}OpOfdb5owo-5JN2^0)4O&IPGF2EXGcIdyzF kb!*=<0gDfs00;Iz4DXut%rjDsZva`~>FVdQ&MBb@0Q70SS^xk5 diff --git a/1.4.2/src/minecraft/textures/Items.png b/1.4.2/src/minecraft/textures/Items.png deleted file mode 100644 index 3a5c5cafe657afcad99e6de3daa51e66d7c4b2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29075 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

lrdx^KPA8^8k`Zj?Lv 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 QOa#eGD}So~X!7lU0b{|gWB>pF diff --git a/1.4.2/src/minecraft/textures/SteamGUI.png b/1.4.2/src/minecraft/textures/SteamGUI.png deleted file mode 100644 index c68427369418297ae9a762b1f57959b01482cdf7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3750 zcmbtWXHXQ%vYsX9BtbwVN|GEU!!9{WlBi@BK_nhYf{WxJh)8A;L~@WIizHow6eQ~gbM^>j~v{i9=U>uZpcFp&TN$h9<8jR1gLLI@xt zxD?jj#m)eb7~F@!Zr^tC@b&O<@$h8Rg2C84y*-@oKX3xTe;R2FH!ipm7M=ByN6oVk+%u_Pi-N!&YiFH9Y3-+-Tf{1VlWYp#WJd$t2+l`|E_T z{OH);lf|HXxAA7|+Q50;gyMSn0kU?85KTmuswr+Li6AS1UZ-9N>+0xSToF^^6l5O5qKFMpE*P51#o{6|TN09r2#EpjdDf^rL*VGTiqL(slSw{(aQv_Ls9 z0a^%@)gcIEI=3;%#RIl|4))97wji+Od9pSN5Xj?bOvt&|;(U8b^7TR;Y*Sf~W$!a+X( zxk+@FzdbnfAEc-p9F$5xQP>D>eI&Txu(w}6UmYs*R0d$tH)Qx+K)99(AxD64KYx8= z7tiG$Y3?7`IOiHls0|X!L?TWnO4$M zTd8m;S4SI^3QFRLxaMukSN;^r8#z$L!fz}5MVUncZRir2>`5WiX8N8&!ISc*9Z^mz zZ*wRyo=P{-6+8CnXo!8RIcEY9Lq^0gd#ffMO&k|nPc*F|hfb2Drl?V@37e@V%f5m) zj!cxbdSjAYHxPSz8riHN`ZBb}P~i(%9ju{PnkiiUHR)$ZU(w7&`rNF~-tU+c;-&J| zKbN^sPA4kDx_0^&68Bni2Jphen*60wq}znoOL@J=2bEHH0!R1=wzO zN30-M+E>I^m{-{Mtw@me%3g1djhA?hdR?^{SE*JdRtcQa#Z*l5GmU18^Gv8E6D^?? zc_^c|hEc^=B>u>h83?1-(kZBToifVg!r+3v|8~Q-k$N`ex_;Vcvyr|{jg7Po+(SPy z@<_U{u4p(fW7bu|t8hlYt8deF3mHe_7`seFq(!&W*E1+HJWS2`QT&hTl6px}v{SfK znE8cGN=ge$=SoRU4@~<^5=-tG2Un__iW@JN5PwN6Gc85l-Zo}7hL^|{N0q{hJxr9| zgjk%#5LmS9wj03S80J>nEH`(ukvcHe`U|kTk(WjO5h~fiT|F@M_z{0o`WZ`8oI+_y zo(xP}TimSH=-{QZ65(>X*KxM5KJhwlQQARB>>TYL-x42lp@eROsFSr@X=+-kd6{OJ zVVTBui&W)K5wfsFt;ymfltQITo5z|*1D-gDk6bsNGM+6WDWca?kUgptDs?Mh&TCTj z`}nYEH$CUWJw%SKN6}nB%lgl2!NO-IXYN0Xjx@;332Mo>2ry)WSLHuRdU?pR2zOz= z8N%+iE5i!xQtZ+e!;>0@<@3kXpQ%&E-|w_u=2~{|bnndPCg5i0*3sM2+s!o6YbfL^ zl+%^d?HcGGcs($lA(^EhIw7{6wVpMRHD7OQ>2E23Dn`9`(yCdpEVS4~H9w57l(8r< zH?_Q5t6qVuxG~;T(NsiT)S#cNUzRftZ?F1>>Oqy%Gghrm5@0G(?x8{Ei2l-M_zXq14oXKS+!YhJH?o{yHdON zccW%r^-H|s%drsm`P|+OTQFQ5Rw8|sBH}h*9%2A92!+?Ja|$~MCz(}DRMi*wm16Do z7!6b>=ch~nBw0q>(M9jmUa9%iG1YQh-BE$^{95*IZCDaP% zG8Iq{T3#(LI^uo$+5~ zj`HaJm@)J6T}fF-gX56%i1X&!oM4U>MQUlc1Z;1e<&WAf(#B3`Y~gRd5sEMcNm;^ zrS#Zqr1D)HQM-s+mur?AwBCR3yI+G@y<+y>Ec30bjr*4Gmi&40s6kg#c2j0$gSA`3 zZeUAYkTZ6ZIY)YM_OK=38~w%jSdNUsY|BBQ2lf;8Xr6vH#GB`Au&-&#k7u`{*`V3x zPtx zxahsZJ10A>elvb7d-?N}1}l%*p736{{HQ)M{#*zfeyLPilYZtB=H}gqn6w)}wqm1SLdM%Y3TdNLy7ketARRHcSpg zvEl(La5;5Bz&``@F6SpopHVwoj56yRCvyf@66g_KkbC*tje58uWMR1r)C>KQcAnH! zfEqxkAb$yel4r1!rT|42Gz&rwLWL0bCPZi;c$CU*&Qkr3y$Bbim531SlsF4t!@#Xm zHbC+F+Vyph6?ZK=e_K|G_|`Iu@;o-l$np$F9tYq6BESX^;4kn$;JOcXauZpH$SW_u56i2wwU#{c( zCvs%(e)IrO4371AfVVIGcl=O+v`gl0@iB+?S5tSZv;CGE5B`yJ?hvVpZK43)H=^I= zL~{)I*}S8h%vR{n@W6MLL*ZoAp2(nZg77XQ{@12~coHiEL~;$?bKNeky}@nd~uTm6-z s5wSr1-vj+k4u50%r+xnadlG>Rz_%9nUyTib`-97+rKYc13AKItFWwR@)&Kwi diff --git a/1.4.2/src/minecraft/textures/SteelPiston.png b/1.4.2/src/minecraft/textures/SteelPiston.png deleted file mode 100644 index 0f68fe758befe90e39392f330cb363dd0cf91623..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmV+k1or!hP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m?d01m?e$8V@)00007bV*G`2iyq* z6&(Z01?N@(00W6hL_t(|+U;2}XcJKw{@>j-gEpmfGpk^rgD#mBN(Vub!L5UC64J%e zMH~u35IdA&agd@8Dy54{D+SR~u;64DMLI~_-Fq+Z<)yhF z!rgoK{Xe-c|NGznz968qQa*=4pgn(ofIy-dEKZMKe*{g_pxf<&rfGoje@>dsrh8v5 z7To(MZ+D4!FIJ{$EKZhXL8H-dugzxD{RG+4`ZhegGaHI87YneozC92Em@=TzXaL3- z5JG@4hOx0R-}6?h)q`JL-3n)p>DU*NJ!lh{WH% ze)W9UfYrr0V!Up*dp>IbX{#H$ZIHGGl#2y;@a&z>&x>DJ*>JZ=!!V>0K;3qVZiU<0 zh0Lq1{Ud1vh<+i_#(Q=!SbBTa@Z1DgmPLIQPzldX084ML5}um?o_$>fJU0P6y}b%} zZUT6Edlm4>HYmFj6lpaJq0LWUoZ`(sw1EMrO z+V}{e;iv&L8Xrykejap$)c_iek2b#SC7|3{z^qzm>&uVPB_PoR6HPGD1QSg#(F7As zFwq31ZG$6kKK5?qE)%n1=ipZ;+dRHuR;^YssSn6xGN>;#z-v!8Kb*>1b2kIWB;)ZN zR6n3}22?5)OzH!&*(`Skpr|iSdLbU)IJo2EV@%o}`>_NxZ>ji4x6TlP1D4sd=AgA9m3J{G8|1W z!~EJIoE@LV^ZE~(0Hr%YXU)f%46gv!ImE;V2RUWpUYKnrhE7 zpA^BU45-y=zDe2RffFz}Iq92}Js$a8fTr5B%#-XdmUg36nq(&l00000NkvXXu0mjf DZza#8 diff --git a/1.4.2/src/minecraft/textures/blocks.png b/1.4.2/src/minecraft/textures/blocks.png deleted file mode 100644 index a2286ff26383c240c22524ae12cc3f7f4243f14e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22475 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%0AbMeZq%L-(Jd-Vy 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 WV**nd(hB$(kd4LhqoqgAUH>ok(3-da diff --git a/1.4.2/src/minecraft/textures/pipes/DefaultPipe.png b/1.4.2/src/minecraft/textures/pipes/DefaultPipe.png deleted file mode 100644 index 05cb6ff1ead8095fba54f0530b3febf09e3f333f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 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 VQv-q^vG)J~002ovPDHLkV1fs?P%8ic diff --git a/1.4.2/src/minecraft/textures/pipes/SteamPipe.png b/1.4.2/src/minecraft/textures/pipes/SteamPipe.png deleted file mode 100644 index 05cb6ff1ead8095fba54f0530b3febf09e3f333f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 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 diff --git a/1.4.2/src/minecraft/textures/pumps/Pump.png b/1.4.2/src/minecraft/textures/pumps/Pump.png deleted file mode 100644 index dd4712087f17d30c5dd42f286ccf1cde0f48d0d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 735 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!oZ=j2raQdqeHj>-;yqm)Ln>~) zy>l?@wt)mgLgkdZY^m!nh+M9|zp(Ym1^2fLTi?o->8st;?m3jVyFy($dD1bxqD3C} z%Zp@|F1eQf^1te2EuWC<<+&XzGViUDs88Qq*Y#`fvWm*ubxvyQihihX+x;wf{_fbT z^MB>U-ru^B>BpUYEL~w|JAa8RXAqjf6n6jL*WJ>CRs_ z1{MbKNVa2o?~{V{)Fv^@czx37;Zy`{wNz@We&z`()a7s-0& ztUGvHF)=3)4z`+Z^tI9o)c+cu-KUAdg0WAOxOK4ikI`t@-Z;13}M_<`I007K<-!XB9jX=AXUIqh-P{ zr5Y5vN7)*x?prmKHk`T1W5jxcXA*Nj83T}F@nTwdLh!)_X|raP##*y{;}sVe0^Uh7 z3NVOBGrX#O&2Wv;DBbvkNP@8kpTkW?ASI;1$pTDY=)hw0e>qK;?GG1*cYvfkUHx3v IIVCg!00Z7KVE_OC diff --git a/1.4.2/src/minecraft/textures/pumps/WaterPump.png b/1.4.2/src/minecraft/textures/pumps/WaterPump.png deleted file mode 100644 index c59427b9d7a5fb5a0bcdfd87dc572f0aaf90d7d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!oXldXIwia})-o_K#d^9phE&{o zd&e;Ewt)ykz$%VCq8z)@dYBcf^B(e8X0<;PyUTp=-HWXp7j(OgJOx;GPh&c@?BsW~ z$Ysp#f0X{KvxX-w+Eth1?Be@5?C1~c^RuU~xS!n>zutcJgwEMA|2p5U`+4cP+_kUM z?V_*u=dNMcwN z!;Vu%24$7vvx^KT$~*{}WPXM@XKr7D&8&lo~sOw!7vt(dmU~FJ;U?@1JmEae) zFC;bK+?8+c|9!1? z;JmCmAJ^~yU%|3^OKHPWnd*BVZWPzWR-b2_cm9$0!T0a$`Q`rWM+DUegfg7j@jE}i z{>$^W<0)3GK0B-1b9uf?_Awkb{iAt2We)R%A0i9h7z3Rxz%V76t*<^?fBF4`kB@MC z*i)IgefP3@o9x}$YmUrh5@1Nbww5DG(q{b&@#=S979M6~P?)OaV3sed&?0cCZa>%W zzgeFujkp>T+5Iim4hu3cI;>CF&G)K2(FIl$Sc-ZX4dmACzFs`p;p9S<03nWWQzn_}!)X&#Hk^N!%O)ztaLQJh zfvF*h*;Wr>XE|&$nR3`pGHO^eZ7GJM@v%J7 diff --git a/1.4.2/src/minecraft/textures/tankBlock.png b/1.4.2/src/minecraft/textures/tankBlock.png deleted file mode 100644 index 21b97d4c5a4126ae7d0dd46dcbe118bad20f6b75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2478 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 P3?%L8>gTe~DWM4fP^b7L diff --git a/1.4.2/src/minecraft/textures/tanks/GUITurret.png b/1.4.2/src/minecraft/textures/tanks/GUITurret.png deleted file mode 100644 index ab367dbb75ab11df7cd8c85ffda82f85c34d06b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G!U;i$lZxy-8q?;Kn`1yx4R3& ze-K=-cll(X2xoyuWHAE+-$4*&+%YlxEl`lX#M9T6{SFr!2d|*`Kf68#1{MoX7srr_ zTW{|y%oh%nIqSTipz$@2JPTFh}rWl57gqxtsAJC~{qRDxx_4LC$N zSQwp~lujHjXfAo|^}Fir?tSOo6Td}Qysj-SZ;luIw}Pp}Iq?6&`|tH_pZxh_^Sk-Z zO8tMUivC`nxO%_Fs{P6zzFqv?n*Js3PU(dG%nu$d4_y&+y=pI77ilZiX#7-@E_szsKlsYFlk$yETIYC>^jc2%s_6UHDPYcxn^R;)@!; zX3t>G)NBcjjb$o9(3Z9tr1Q;S)76LuTE^zpmba4`p`$QIZ$Z#-lG$;e(#3)61 zg5}Bc3vGL)8x>s5m?~Mo(UhRstIwFrYNp<5xjDKqGMM3&yaP{k{@KpC$=Vy-(P9xE zRv?A|gF7$?Qci>=6i=G(T%E(ZtT>1D8_+tSTT;q@pU-;JBG9!+W7W%&R|Sffts9aI xBrJHX4s##4I>YwBsfiaZp4S6rdD?)S#`sn4)7Ymkf4c@`fv2mV%Q~loCIA9jjS2t& diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTank.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank.png deleted file mode 100644 index 446b443d90dab18984ac1d9f993f26d74c6815c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ%^A}@|=t^u0z%+tj&q~g}w zJBE3;4Mf-;95=c9B$`9hYU%fkcDVz`PcvF=`MzSgLYw}An|HdxV$WO)TjIc^qq1#Z zKBvOz4#mGUOEfQOveoSPedC+#|G&?}-~ZfwSC3Wv`M0Iw^SAZi4VW^!wrJ0~?C?)c zcXzNbH83RbT(B2-W4rGBe!0w78UOE|{r%x>0;6cc3%B{NYk*FKfpZV<&-%M--R+M5 zr*{JlI)Cl+^x|W)c7^PDUvH!zeRx_N<1XF(Z$4PAV{zWyeoX3?sY%M2yhWdOe*azT z;$q_a`HgL8Y5k|2#rKwM%Y9#^@8T6L`k*W1YVGXLRz-30dH>FLWJKrwyYhDF*Ryx0 z?T=b}$~!k+b;YXo!}tB$1q>`1f~V>&p7QVd9fet+tyaA{csBl(!iOD98xAnc>0=B4 z!x^8W58Tf9Ia_37=bZljWgcp?rwcZ`+jG$SyhRD)3Wn*6tXEz!IlE$7yxP)JDpS1* zp2jxJUw)ajU>%pi*TRDD6F=SfzP~k{y_>tCo0r>c=hyn5e@d^pir%lU37*KqB*?(R z!05mr0H+#0dlsL6d;aWZW>HiL7!MY581#eCzpM**=D*|M_74L|db;|#taD0e0ssrv B04@Lk diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTank0.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank0.png deleted file mode 100644 index 821f9a02880771dff7838456c0ec2855b8084c30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$7l6CE^-+-oE@^o&e&W zk8SK+c=Yp|rCC=0KL5U3@h@$2XX9*R%dd~J_O5AHy8EX2apk<-lgwWoR25)gVMuOx z)|l|Pu=d~Ij#~HM{rvt1w>JxhG;EWuUH6$0=rky>Xumt_ug&?@0{^C$ufKMB@z*~u z=dAmsCz}6jKF{fE8#abFRGs#>uKA|zc>CSLb+^iRx4zsoTch^f+cIe}a#eqN;`zEDT}<+FAHr=@4*XWfaqACv#{@=KGwA*P{C zIxT2Ra01PEQL?4*C<EF2a){Q!x#f&?^ZdjQ?9_6&fBfKA_fxU= z>v_-fxrsA~OS`Qpe_dZ)D_;_L^!fGnt`va|1_cHV2BroCHOF73Dz83cp6m)V38*qy daADHoU)fcY=Y2>Jo>B>t^mO%eS?83{1OV7Z?H>RD diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTank1.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank1.png deleted file mode 100644 index 4d427d6a945b2b38807a20ed480aa3a816c99162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$7T)!-jXaG(5zGJdmphH9f_;=iD1DgV}zbF}pV{Z87`! zJy*%HPw3|U`#tG4o`#R^p8cJd@%z2~_vYXE+i#1^nfvja4;}6*c~WvFDTe;_P=P!&b@!l!}AZ{J;OP3?0mtm zwKdoJ8r{+yt-~Yeg(?9%qTQ<9CbMfCxv%k;YU8iyCter*N^{v{K z%hts(F*-09ut~^q@X1|&9^YqDy5;}7SG7M%H#Be+ym6cVss`vt81Q@ea^~M%>vnhi z?=Qcf|8Ab``S^2^*{>Eqa;~3Tc~ffJ7p@EWKU3S!*Qr`;tIk-Hyt}PWa`WsJHSh1{ zi3!TSG(S&eQ;W`C6H0iBXsTVIkQjf)HJtOT6Fmtf9(9|`*-qx zuD-fz&sE;grd3h)d#4!~7%~J;)muE}-}O5Rvx*--)2|fR5ziPA!?4fwT)e#Y!F=b2 z)Uby4{p;u7d8^9yU<1ia&q8I=dQixG)GXurL6F4o>;0pS9g?Z=TJr#lY0SpuoU^M!~`mgFdjjiebT{ V1y$vLce8*bJzf1=);T3K0RW@L{lNeL diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTank3.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank3.png deleted file mode 100644 index dec251e778d615c39b4322b14e74d15da86f8856..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$-dT+&xt$?Py_jGX#skrs_ zj$__s2NAXh=1bqqiH>kxbI3N~B6ETAx{J&k8mb?JUeyr)V71x#L7vsp!nvoWCAA*8 zzkTBq3$G_XpZ6MnQ#r~gpJ!L*{QLi(zqS>B%69u6yt%XP_0jgTwe})QH-7(iz4Wcm zyp`I^9T)@{Vwid2Ir!e0Ka1}(`I`0r?$zHPUMDb$J_vA@e_a7|Bnif&>bKb?`W; zpWP#!D*F=>mH?lx2BPjOaUdIluv>FVdQ I&MBb@0DJWUh5!Hn diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTank4.png b/1.4.2/src/minecraft/textures/tanks/LiquidTank4.png deleted file mode 100644 index f11129168a716278165b1cc3ad15834caf45e91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!TpZ$-a;MKZPXn6r%+tj&q~g}w zJBE3;4Mf-;95=c9B$`9hYU%fkcDVz`PcvF=`MzSgLYw}An|HdxV$WO)TjIc^qq1#Z zKBvOz4#mGUOEfQOveoSPedC+#|G&?}-~ZfwSC3Wv`M0Iw^SAZi4VW^!wrJ0~?C?)c zcXzNbH83RbT(B2-W4rGBe!0w78UOE|{r%x>0;6cc3%B{NYk*FKfpZV<&-%M--R+M5 zr*{JlI)Cl+^x|W)c7^PDUvH!zeRx_N<1XF(Z$4PAV{zWyeoX3?sY%M2yhWdOe*azT z;$q_a`HgL8Y5k|2#rKwM%Y9#^@8T6L`k*W1YVGXLRz-30dH>FLWJKrwyYhDF*Ryx0 z?T=b}$~!k+b;YXo!}tB$1q>`1f~V>&p7QVd9fet+tyaA{csBl(!iOD98xAnc>0=B4 z!x^8W58Tf9Ia_37=bZljWgcp?rwcZ`+jG$SyhRD)3Wn*6tXEz!IlE$7yxP)JDpS1* zp2jxJUw)ajU>%pi*TRDD6F=SfzP~k{y_>tCo0r>c=hyn5e@d^pir%lU37*KqB*?(R z!05mr0H+#0dlsL6d;aWZW>HiL7!MY581#eCzpM**=D*|M_74L|db;|#taD0e0su5Y B073u& diff --git a/1.4.2/src/minecraft/textures/tanks/LiquidTankCorner.png b/1.4.2/src/minecraft/textures/tanks/LiquidTankCorner.png deleted file mode 100644 index 7e7c581cfde59c9d0003c9e7871a9f0e226b6a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!T%1h867Q$$lmbn$^K@|xskrs_ zu4CRI0|AGN5``l7*~DZ_xp(xw7b+7}aP3r;Y5TEPHb{KwUrA}&HP}pS0`CKPd|^FgY-AFfb}Gurx5dIK1;&x4r+hsN$k@rV9~W6;JhjnS@WUAXK0z zzmZb6|Mv42J`7cJ7_!T6&R|hvV8W`D;eh&IegK+uVTQ+z+myqvLSX~IHLu-0jCc`!g1e( z?$m=4+gZTwFW^f^&R}BLc%E^a9;e$*RR%@{hCMu6)Il22z=}^SRVy84-}t|hA0*@H L>gTe~DWM4fj_idZ diff --git a/src/common/dark/SteamPower/ItemRenderHelperS.java b/src/common/dark/SteamPower/ItemRenderHelperS.java index d198f53c..568fd4b2 100644 --- a/src/common/dark/SteamPower/ItemRenderHelperS.java +++ b/src/common/dark/SteamPower/ItemRenderHelperS.java @@ -22,7 +22,7 @@ public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { private ModelFurnace modelFurnace = new ModelFurnace(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == SteamPowerMain.machine.blockID && metadata == 4) + if(block.blockID == SteamPowerMain.heaters.blockID && metadata == 4) { GL11.glPushMatrix(); GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); @@ -31,7 +31,7 @@ public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { modelTank.generalRender(0.0625F); GL11.glPopMatrix(); } - if(block.blockID == SteamPowerMain.machine.blockID && metadata >= 0 && metadata <= 3) + if(block.blockID == SteamPowerMain.heaters.blockID && metadata >= 0 && metadata <= 3) { GL11.glPushMatrix(); GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); diff --git a/src/common/dark/SteamPower/SteamPowerMain.java b/src/common/dark/SteamPower/SteamPowerMain.java index 5d01a020..e17072c2 100644 --- a/src/common/dark/SteamPower/SteamPowerMain.java +++ b/src/common/dark/SteamPower/SteamPowerMain.java @@ -22,22 +22,24 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.LanguageRegistry; import dark.BasicUtilities.BasicUtilitiesMain; +import dark.SteamPower.boiler.BlockBoiler; +import dark.SteamPower.firebox.BlockHeaters; import dark.SteamPower.steamengine.BlockSteamPiston; import dark.SteamPower.steamengine.ItemSteamPiston; -import dark.SteamPower.steamengine.TileEntitytopGen; -@Mod(modid = "SteamPower", name = "Steam Power", version = "1.9", dependencies = "after:basicPipes") +@Mod(modid = "SteamPower", name = "Steam Power", version = "0.2.3", dependencies = "after:basicPipes") @NetworkMod(channels = - { "SPpack" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) + { SteamPowerMain.channel }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain { - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "/UniversalElectricity/SteamPower.cfg"))); + static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); public static final String channel = "SPpack"; public static String textureFile = "/dark/SteamPower/textures/"; // Blocks and items - public static Block machine = new SteamMachines(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "MachinesID", 3030).value)).setBlockName("machine"); - public static Block engine = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamEngineID", 3031).value)).setBlockName("SteamEngien"); - public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "EngineItem", 30308).value)).setItemName("SteamEngine"); + public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", 3030).value)).setBlockName("machine"); + public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", 3031).value)).setBlockName("SteamEngien"); + public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", 3032).value)).setBlockName("machine"); + public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "SteamPistonItem", 30308).value)).setItemName("SteamEngine"); public static SteamPowerMain instance; @@ -53,20 +55,26 @@ public class SteamPowerMain { instance = this; NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + proxy.preInit(); - GameRegistry.registerBlock(machine); - GameRegistry.registerBlock(engine); + + GameRegistry.registerBlock(heaters); + GameRegistry.registerBlock(piston); + GameRegistry.registerBlock(boilers); } @Init public void load(FMLInitializationEvent evt) { proxy.init(); - GameRegistry.registerTileEntity(TileEntitytopGen.class, "gentop"); - // Names............... - LanguageRegistry.addName((new ItemStack(machine, 1, 4)), "Boiler"); - LanguageRegistry.addName((new ItemStack(machine, 1, 0)), "FireBox"); - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "SteamPiston"); + + // Burner Names + + LanguageRegistry.addName((new ItemStack(heaters, 1, 0)), BlockHeaters.Burners.values()[0].name); + // Boiler Names + LanguageRegistry.addName((new ItemStack(boilers, 1, 0)), BlockBoiler.Boilers.values()[0].name); + // Steam Piston Name + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "Steam Piston"); } @@ -74,28 +82,22 @@ public class SteamPowerMain public void postInit(FMLPostInitializationEvent event) { proxy.postInit(); - try - { - // Boiler - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(machine, 1, 4), new Object[] - { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); - // Furnace - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(machine, 1, 0), new Object[] - { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); - // SteamPiston - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] - { "GGG", "VPV", "@T@", - 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), - 'G', BasicUtilitiesMain.rod, '@', "plateSteel", - 'P', Block.pistonBase, - 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), - 'M', "motor" })); - } - catch (Exception e) - { - e.printStackTrace(); - System.out.print("UE based recipes not loaded"); - } + + // Boiler basic + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(boilers, 1, 0), new Object[] + { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); + // Burner Coal + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(heaters, 1, 0), new Object[] + { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); + // SteamPiston + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] + { "GGG", "VPV", "@T@", + 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), + 'G', BasicUtilitiesMain.rod, '@', "plateSteel", + 'P', Block.pistonBase, + 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), + 'M', "motor" })); + } } diff --git a/src/common/dark/SteamPower/boiler/BlockBoiler.java b/src/common/dark/SteamPower/boiler/BlockBoiler.java new file mode 100644 index 00000000..c8074359 --- /dev/null +++ b/src/common/dark/SteamPower/boiler/BlockBoiler.java @@ -0,0 +1,117 @@ +package dark.SteamPower.boiler; + +import java.util.List; + +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 universalelectricity.prefab.BlockMachine; +import dark.Library.Util.MetaGroupingHelper; +import dark.Library.prefab.TileEntityMachine; +import dark.SteamPower.ItemRenderHelperS; + +public class BlockBoiler extends BlockMachine +{ + + /** + * Quick enum to help sort out meta data info + */ + public enum Boilers + { + Basic("Boiler", TileEntityBoiler.class, -1), + e("", null, -1), + ee("", null, -1), + eee("", null, -1); + + public String name; + public Class ent; + public int gui; + + private Boilers(String name, Class tileEntity, int gui) + { + this.name = name; + this.gui = gui; + this.ent = tileEntity; + } + } + + public BlockBoiler(int par1) + { + super("Boilers", par1, Material.iron); + this.setRequiresSelfNotify(); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setHardness(1f); + this.setResistance(3f); + } + + @Override + public int damageDropped(int metadata) + { + return MetaGroupingHelper.getGroupStartMeta(MetaGroupingHelper.getGrouping(metadata)); + } + + /** + * Called upon block activation (left or right click on the block.). The + * three integers represent x,y,z of the block. + */ + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) + { + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + try + { + return Boilers.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); + } + catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + /** + * Called when the block is placed in the world. + */ + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) + { + int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = world.getBlockMetadata(x, y, z); + TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); + // world.setBlockMetadata(x, y, z, angle); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return ItemRenderHelperS.renderID; + } + + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(par1, 1, 0)); + } +} diff --git a/src/common/dark/SteamPower/boiler/TileEntityBoiler.java b/src/common/dark/SteamPower/boiler/TileEntityBoiler.java index 6553f1e1..0a3a47a4 100644 --- a/src/common/dark/SteamPower/boiler/TileEntityBoiler.java +++ b/src/common/dark/SteamPower/boiler/TileEntityBoiler.java @@ -1,4 +1,5 @@ package dark.SteamPower.boiler; + import net.minecraft.src.Block; import net.minecraft.src.EntityPlayer; import net.minecraft.src.INetworkManager; @@ -11,256 +12,258 @@ import universalelectricity.prefab.network.IPacketReceiver; import com.google.common.io.ByteArrayDataInput; import dark.BasicUtilities.api.IProducer; +import dark.BasicUtilities.api.IReadOut; import dark.BasicUtilities.api.IStorageTank; import dark.BasicUtilities.api.Liquid; import dark.BasicUtilities.api.MHelper; import dark.Library.prefab.TileEntityMachine; import dark.SteamPower.SteamPowerMain; -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver,IProducer, IStorageTank +public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver, IProducer, IStorageTank, IReadOut { - public int steam = 0; - public int water = 0; - public int heat = 0; - public int hullHeat = 0; - public int heatMax = 4500; - public TileEntity[] connectedBlocks = {null,null,null,null,null,null}; - public int tankCount = 0; - public int tickCount = 0; - - //----------------------------- - //Update stuff - //----------------------------- - @Override - public void updateEntity() - { - //update connection list used for rendering - this.connectedBlocks = MHelper.getSourounding(worldObj,xCoord, yCoord, zCoord); - this.tankCount = 0; - for(int i =0; i < connectedBlocks.length; i++) - { - if(connectedBlocks[i] != null) - { - tankCount++; - } - }//end connection update - if(tickCount++ >= 10 && !worldObj.isRemote) - { - tickCount = 0; - - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if(ent instanceof IProducer && ((IProducer) ent).canProduceLiquid(Liquid.HEAT, ForgeDirection.UP)) - { - this.heat = (int) Math.min(((IProducer)ent).onProduceLiquid(Liquid.HEAT, 250, ForgeDirection.UP)+this.heat,4500); - }else - if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == Block.lavaStill.blockID) - { - this.heat = Math.min(90+heat,2000); - } - if(hullHeat < 10000) - { - int mHeat = 10000 - hullHeat; - int hHeat = mHeat - Math.max((mHeat - this.heat),0); - hullHeat = Math.min(hullHeat + hHeat,10000); - this.heat -=hHeat; - }else - { - if(heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - this.water--; - this.steam = Math.min(this.steam +20,this.getLiquidCapacity(Liquid.STEAM)); - this.heat -= 2000; - } - this.hullHeat-=5; - } - this.water = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.water,this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); - this.steam = MHelper.shareLiquid(worldObj,xCoord, yCoord, zCoord,this.steam,this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); - } - super.updateEntity(); - } - //----------------------------- - //Liquid stuff - //----------------------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) - { - if(type == Liquid.WATER) - { - if(this.water < this.getLiquidCapacity(Liquid.WATER)) - { - int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); - this.water += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord+1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - }else - if(type == Liquid.STEAM) - { - if(this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); - this.steam += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord-1, zCoord); - if( te instanceof IStorageTank) - { - return ((IStorageTank)te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); - } - } - } - return vol; - } + public int steam = 0; + public int water = 0; + public int heat = 0; + public int hullHeat = 0; + public int heatMax = 4500; + public TileEntity[] connectedBlocks = + { null, null, null, null, null, null }; + public int tankCount = 0; + public int tickCount = 0; - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection s) { - if(type == Liquid.WATER) - { - return true; - }else - if(type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) - { - return true; - } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return 14; - }else - if(type == Liquid.STEAM) - { - return 140; - } - return 0; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - //TODO setup the actual math for this - if(vol < this.steam) - { - this.steam -= vol; - return vol; - }else - if(this.steam >= 1) - { - this.steam -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.STEAM) - { - return 100; - } - return 0; - } - //----------------------------- - //Data - //----------------------------- - public Object[] getSendData() - { - return new Object[]{this.water,this.steam,this.heat,this.hullHeat}; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try{ - this.water = dataStream.readInt(); - this.steam = dataStream.readInt(); - this.heat = dataStream.readInt(); - this.hullHeat = dataStream.readInt(); - }catch(Exception e) - { - e.printStackTrace(); - } - - } - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("water", this.water); - par1NBTTagCompound.setInteger("steam", this.steam); - par1NBTTagCompound.setInteger("heat", this.heat); - par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.water = par1NBTTagCompound.getInteger("water"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.heat = par1NBTTagCompound.getInteger("heat"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } + // ----------------------------- + // Update stuff + // ----------------------------- @Override - public boolean needUpdate() - { + public void updateEntity() + { + // update connection list used for rendering + this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); + this.tankCount = 0; + for (int i = 0; i < connectedBlocks.length; i++) + { + if (connectedBlocks[i] != null) + { + tankCount++; + } + }// end connection update + if (tickCount++ >= 10 && !worldObj.isRemote) + { + tickCount = 0; + + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); + if (ent instanceof IProducer && ((IProducer) ent).canProduceLiquid(Liquid.HEAT, ForgeDirection.UP)) + { + this.heat = (int) Math.min(((IProducer) ent).onProduceLiquid(Liquid.HEAT, 250, ForgeDirection.UP) + this.heat, 4500); + } + else if (worldObj.getBlockId(xCoord, yCoord - 1, zCoord) == Block.lavaStill.blockID) + { + this.heat = Math.min(90 + heat, 2000); + } + if (hullHeat < 10000) + { + int mHeat = 10000 - hullHeat; + int hHeat = mHeat - Math.max((mHeat - this.heat), 0); + hullHeat = Math.min(hullHeat + hHeat, 10000); + this.heat -= hHeat; + } + else + { + if (heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + this.water--; + this.steam = Math.min(this.steam + 20, this.getLiquidCapacity(Liquid.STEAM)); + this.heat -= 2000; + } + this.hullHeat -= 5; + } + this.water = MHelper.shareLiquid(worldObj, xCoord, yCoord, zCoord, this.water, this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); + this.steam = MHelper.shareLiquid(worldObj, xCoord, yCoord, zCoord, this.steam, this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); + } + super.updateEntity(); + } + + // ----------------------------- + // Liquid stuff + // ----------------------------- + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) + { + if (type == Liquid.WATER) + { + if (this.water < this.getLiquidCapacity(Liquid.WATER)) + { + int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); + this.water += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord + 1, zCoord); + if (te instanceof IStorageTank) { return ((IStorageTank) te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); } + } + } + else if (type == Liquid.STEAM) + { + if (this.steam < this.getLiquidCapacity(Liquid.STEAM)) + { + int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); + this.steam += vol - rej; + return rej; + } + else + { + TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); + if (te instanceof IStorageTank) { return ((IStorageTank) te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); } + } + } + return vol; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection s) + { + if (type == Liquid.WATER) + { + return true; + } + else if (type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) { return true; } return false; } + + @Override + public int getStoredLiquid(Liquid type) + { + if (type == Liquid.WATER) + { + return this.water; + } + else if (type == Liquid.STEAM) { return this.steam; } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) + { + if (type == Liquid.WATER) + { + return 14; + } + else if (type == Liquid.STEAM) { return 140; } + return 0; + } + + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) + { + if (type == Liquid.STEAM) + { + // TODO setup the actual math for this + if (vol < this.steam) + { + this.steam -= vol; + return vol; + } + else if (this.steam >= 1) + { + this.steam -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) + { + if (type == Liquid.STEAM) { return true; } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + if (type == Liquid.STEAM) { return true; } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) + { + if (type == Liquid.STEAM) { return 100; } + return 0; + } + + // ----------------------------- + // Data + // ----------------------------- + public Object[] getSendData() + { + return new Object[] + { this.water, this.steam, this.heat, this.hullHeat }; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) + { + try + { + this.water = dataStream.readInt(); + this.steam = dataStream.readInt(); + this.heat = dataStream.readInt(); + this.hullHeat = dataStream.readInt(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + } + + @Override + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("water", this.water); + par1NBTTagCompound.setInteger("steam", this.steam); + par1NBTTagCompound.setInteger("heat", this.heat); + par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.water = par1NBTTagCompound.getInteger("water"); + this.steam = par1NBTTagCompound.getInteger("steam"); + this.heat = par1NBTTagCompound.getInteger("heat"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + @Override + public boolean needUpdate() + { + return false; + } + @Override public int getSizeInventory() { return 0; } + @Override public String getChannel() { return SteamPowerMain.channel; } - - + + @Override + public String getMeterReading(EntityPlayer user, ForgeDirection side) + { + return this.water + "B WATER " + this.steam + "B STEAM " + this.heat + "/" + this.heatMax + " Heat"; + } + } diff --git a/src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java b/src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java new file mode 100644 index 00000000..0c1b81bf --- /dev/null +++ b/src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java @@ -0,0 +1,8 @@ +package dark.SteamPower.boiler; + +import net.minecraft.src.TileEntity; + +public class TileEntityBoilerPipe extends TileEntity +{ + +} diff --git a/src/common/dark/SteamPower/SteamMachines.java b/src/common/dark/SteamPower/firebox/BlockHeaters.java similarity index 56% rename from src/common/dark/SteamPower/SteamMachines.java rename to src/common/dark/SteamPower/firebox/BlockHeaters.java index 97ec78f7..d3e575e5 100644 --- a/src/common/dark/SteamPower/SteamMachines.java +++ b/src/common/dark/SteamPower/firebox/BlockHeaters.java @@ -1,25 +1,45 @@ -package dark.SteamPower; +package dark.SteamPower.firebox; -import java.util.Random; +import java.util.List; import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityItem; 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.NBTTagCompound; import net.minecraft.src.TileEntity; import net.minecraft.src.World; +import dark.Library.Util.MetaGroupingHelper; import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.boiler.TileEntityBoiler; -import dark.SteamPower.firebox.TileEntityFireBox; +import dark.SteamPower.ItemRenderHelperS; +import dark.SteamPower.SteamPowerMain; -public class SteamMachines extends universalelectricity.prefab.BlockMachine +public class BlockHeaters extends universalelectricity.prefab.BlockMachine { + /** + * Quick enum to help sort out meta data info + */ + public enum Burners + { + Coal("FireBox", TileEntityFireBox.class, 0), + Liquid("LiquidBurner", TileEntityLiquidBurner.class, -1), + Lava("LavaBuffer", TileEntityLavaBuffer.class, -1), + Bio("BioFurnace", null, -1); - public SteamMachines(int par1) + public String name; + public Class ent; + public int gui; + + private Burners(String name, Class tileEntity, int gui) + { + this.name = name; + this.gui = gui; + this.ent = tileEntity; + } + } + + public BlockHeaters(int par1) { super("machine", par1, Material.iron); this.setRequiresSelfNotify(); @@ -31,7 +51,7 @@ public class SteamMachines extends universalelectricity.prefab.BlockMachine @Override public int damageDropped(int metadata) { - return metadata; + return MetaGroupingHelper.getGroupStartMeta(MetaGroupingHelper.getGrouping(metadata)); } /** @@ -55,9 +75,15 @@ public class SteamMachines extends universalelectricity.prefab.BlockMachine @Override public TileEntity createNewTileEntity(World var1, int meta) { - if (meta < 4) { return new TileEntityFireBox();} - if (meta == 4){return new TileEntityBoiler();} - return null; + try + { + return Burners.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); + } + catch (Exception e) + { + e.printStackTrace(); + return null; + } } /** @@ -69,12 +95,13 @@ public class SteamMachines extends universalelectricity.prefab.BlockMachine int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; int metadata = world.getBlockMetadata(x, y, z); TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); - - if(ent instanceof TileEntityFireBox) + + if (ent instanceof TileEntityFireBox) { - world.setBlockMetadata(x, y, z, angle); + world.setBlockMetadata(x, y, z, angle); } } + @Override public boolean isOpaqueCube() { @@ -93,4 +120,9 @@ public class SteamMachines extends universalelectricity.prefab.BlockMachine return ItemRenderHelperS.renderID; } + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(par1, 1, 0)); + } } diff --git a/src/common/dark/SteamPower/firebox/TileEntityFireBox.java b/src/common/dark/SteamPower/firebox/TileEntityFireBox.java index dfc98f6b..7c0fd4d1 100644 --- a/src/common/dark/SteamPower/firebox/TileEntityFireBox.java +++ b/src/common/dark/SteamPower/firebox/TileEntityFireBox.java @@ -30,7 +30,6 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei { null, null, null, null, null, null }; private int connectedUnits = 0; public static int maxGenerateRate = 250; - // Current generation rate based on hull heat. In TICKS. public int generateRate = 0; int count = 0; public int itemCookTime = 0; @@ -243,14 +242,14 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei @Override public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) { - if(type == Liquid.HEAT){return Math.min(this.generateRate,maxVol);} + if (type == Liquid.HEAT) { return Math.min(this.generateRate, maxVol); } return 0; } @Override public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.HEAT){return true;} + if (type == Liquid.HEAT) { return true; } return false; } diff --git a/src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java b/src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java new file mode 100644 index 00000000..75d021f8 --- /dev/null +++ b/src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java @@ -0,0 +1,8 @@ +package dark.SteamPower.firebox; + +import net.minecraft.src.TileEntity; + +public class TileEntityLavaBuffer extends TileEntity +{ + +} diff --git a/src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java b/src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java new file mode 100644 index 00000000..e0026d5c --- /dev/null +++ b/src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java @@ -0,0 +1,8 @@ +package dark.SteamPower.firebox; + +import net.minecraft.src.TileEntity; + +public class TileEntityLiquidBurner extends TileEntity +{ + +} diff --git a/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java b/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java index 4646e632..0669ac2f 100644 --- a/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java +++ b/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java @@ -97,7 +97,7 @@ public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine public TileEntity createNewTileEntity(World world, int metadata) { if (metadata >= 0 && metadata < 4) { return new TileEntitySteamPiston(); } - if (metadata == 14) { return new TileEntitytopGen(); } + if (metadata == 14) {} return null; } diff --git a/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java b/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java index f7a0cd14..7564094f 100644 --- a/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java +++ b/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java @@ -41,7 +41,7 @@ public class ItemSteamPiston extends Item { else { ++y; - Block piston = SteamPowerMain.engine; + Block piston = SteamPowerMain.piston; if (player.canPlayerEdit(x, y, z, par7, stak) && player.canPlayerEdit(x, y + 1, z, par7, stak)) { diff --git a/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java b/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java index 48991925..29ba1cf3 100644 --- a/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java +++ b/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java @@ -11,289 +11,295 @@ import universalelectricity.prefab.network.IPacketReceiver; import com.google.common.io.ByteArrayDataInput; import dark.BasicUtilities.api.IConsumer; -import dark.BasicUtilities.api.IProducer; import dark.BasicUtilities.api.IForce; +import dark.BasicUtilities.api.IProducer; +import dark.BasicUtilities.api.IReadOut; import dark.BasicUtilities.api.Liquid; import dark.Library.prefab.TileEntityMachine; import dark.SteamPower.SteamPowerMain; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,IConsumer,IProducer,IForce +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IConsumer, IProducer, IForce, IReadOut { - public int force = 0; - public int aForce = 0; - public int bForce = 0; - private int frictionLoad = 10; - public int steam = 0; - public int water = 0; - 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; - public int tCount = 0; - private ForgeDirection frontDir; - public TileEntity ff; - public TileEntity bb; - private int pWater = 0; + public int force = 0; + public int aForce = 0; + public int bForce = 0; + private int frictionLoad = 10; + public int steam = 0; + public int water = 0; + 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; + public int tCount = 0; + private ForgeDirection frontDir; + public TileEntity ff; + public TileEntity bb; + private int pWater = 0; private int pSteam = 0; private int pForce = 0; public int pCount = 0; - public boolean running= false; - - @Override - public void updateEntity() - { - super.updateEntity(); - if(tickCount++ >=10) - {tickCount = 0; - //this.pos += 1; if(pos >= 8){pos = 0;} - //++tCount;if(tCount > 120){tCount = 0;} - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - - switch(meta) - { - case 0: nMeta = 2;break; - case 1: nMeta = 5;break; - case 2: nMeta = 3;break; - case 3: nMeta = 4;break; - } - frontDir = ForgeDirection.getOrientation(nMeta); - ff = worldObj.getBlockTileEntity(xCoord+frontDir.offsetX, yCoord+1, zCoord+frontDir.offsetZ); - bb = worldObj.getBlockTileEntity(xCoord+frontDir.getOpposite().offsetX, yCoord+1, zCoord+frontDir.getOpposite().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(!worldObj.isRemote) - { - if(this.runTime < 1 && this.steam > 0) - { - this.steam--; - this.runTime=60; - } - if(bb instanceof IForce) - { - if(((IForce) bb).canOutputSide(frontDir)) - { - this.bForce = ((IForce) bb).getForce(); - }else - if( bb instanceof TileEntitySteamPiston) - { - if(((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) - { - this.bForce = ((TileEntitySteamPiston) bb).getForce(); - } - } - else - { - this.bForce = 0; - } - } - if(this.runTime > 0) - { - genRate=Math.min(genRate + 1, 100); - this.runTime-=1; - this.force = Math.min(genRate * 10,1000); - this.aForce = Math.max(force - this.frictionLoad+bForce,0); - } - if(runTime == 0 && this.steam == 0) - { - genRate = Math.max(genRate--, 0); - force= Math.max(force-=10, 0);; - } - - if(ff instanceof IForce) - { - if(((IForce) ff).canInputSide(frontDir.getOpposite())) - { - ((IForce) ff).applyForce(this.aForce); - }else - { - - } - } - pWater = this.water; - pSteam = this.steam; - pForce = this.force; - - - } - } - } - - - //------------------- - //Liquid and mechanical stuff - //---------------- - @Override - public int getForceSide(ForgeDirection side) { - return aForce; - } + public boolean running = false; - @Override - public boolean canOutputSide(ForgeDirection side) { - if(frontDir.getOpposite() == side) - { - return true; - } - return false; - } + @Override + public void updateEntity() + { + super.updateEntity(); + if (tickCount++ >= 10) + { + tickCount = 0; + // this.pos += 1; if(pos >= 8){pos = 0;} + // ++tCount;if(tCount > 120){tCount = 0;} - @Override - public boolean canInputSide(ForgeDirection side) { - if(frontDir == side) - { - return true; - } - return false; - } + int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + int nMeta = 0; - @Override - public int applyForce(int force) { - this.bForce = force; - return aForce; - } + switch (meta) + { + case 0: + nMeta = 2; + break; + case 1: + nMeta = 5; + break; + case 2: + nMeta = 3; + break; + case 3: + nMeta = 4; + break; + } + frontDir = ForgeDirection.getOrientation(nMeta); + ff = worldObj.getBlockTileEntity(xCoord + frontDir.offsetX, yCoord + 1, zCoord + frontDir.offsetZ); + bb = worldObj.getBlockTileEntity(xCoord + frontDir.getOpposite().offsetX, yCoord + 1, zCoord + frontDir.getOpposite().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 (!worldObj.isRemote) + { + if (this.runTime < 1 && this.steam > 0) + { + this.steam--; + this.runTime = 60; + } + if (bb instanceof IForce) + { + if (((IForce) bb).canOutputSide(frontDir)) + { + this.bForce = ((IForce) bb).getForce(); + } + else if (bb instanceof TileEntitySteamPiston) + { + if (((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) + { + this.bForce = ((TileEntitySteamPiston) bb).getForce(); + } + } + else + { + this.bForce = 0; + } + } + if (this.runTime > 0) + { + genRate = Math.min(genRate + 1, 100); + this.runTime -= 1; + this.force = Math.min(genRate * 10, 1000); + this.aForce = Math.max(force - this.frictionLoad + bForce, 0); + } + if (runTime == 0 && this.steam == 0) + { + genRate = Math.max(genRate--, 0); + force = Math.max(force -= 10, 0); + ; + } - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.WATER) - { - if(this.water > 0) - { - this.water -= 1; - return 1; - } - } - return 0; - } + if (ff instanceof IForce) + { + if (((IForce) ff).canInputSide(frontDir.getOpposite())) + { + ((IForce) ff).applyForce(this.aForce); + } + else + { - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } + } + } + pWater = this.water; + pSteam = this.steam; + pForce = this.force; - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return true; - } - return false; - } + } + } + } - @Override - public int presureOutput(Liquid type, ForgeDirection side) { - if(type == Liquid.WATER) - { - return 32; - } - return 0; - } + // ------------------- + // Liquid and mechanical stuff + // ---------------- + @Override + public int getForceSide(ForgeDirection side) + { + return aForce; + } - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) { - if(type == Liquid.STEAM) - { - int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); - this.steam += vol - rejectedSteam; - return rejectedSteam; - } - return 0; - } + @Override + public boolean canOutputSide(ForgeDirection side) + { + if (frontDir.getOpposite() == side) { return true; } + return false; + } - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) { - if(type == Liquid.STEAM) - { - return true; - } - return false; - } + @Override + public boolean canInputSide(ForgeDirection side) + { + if (frontDir == side) { return true; } + return false; + } - @Override - public int getStoredLiquid(Liquid type) { - if(type == Liquid.WATER) - { - return this.water; - }else - if(type == Liquid.STEAM) - { - return this.steam; - } - return 0; - } + @Override + public int applyForce(int force) + { + this.bForce = force; + return aForce; + } - @Override - public int getLiquidCapacity(Liquid type) { - if(type == Liquid.WATER) - { - return this.maxWater; - }else - if(type == Liquid.STEAM) - { - return this.maxSteam; - } - return 0; - } - //------------------- - //Data - //---------------- - public Object[] getSendData() - { - return new Object[]{steam,water,force,aForce,genRate,runTime}; - } - public boolean needUpdate() - { - if(this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) - { - return true; - } - return false; - } - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) { - try - { - this.steam = dataStream.readInt(); - this.water = dataStream.readInt(); - this.force = dataStream.readInt(); - this.aForce = dataStream.readInt(); - this.genRate= dataStream.readInt(); - this.runTime = dataStream.readInt(); - ++pCount; - } - catch(Exception e) - { - System.out.print("SteamPistonDataFail"); - e.printStackTrace(); - } - - } - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); + @Override + public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) + { + if (type == Liquid.WATER) + { + if (this.water > 0) + { + this.water -= 1; + return 1; + } + } + return 0; + } + + @Override + public boolean canProduceLiquid(Liquid type, ForgeDirection side) + { + if (type == Liquid.WATER) { return true; } + return false; + } + + @Override + public boolean canProducePresure(Liquid type, ForgeDirection side) + { + if (type == Liquid.WATER) { return true; } + return false; + } + + @Override + public int presureOutput(Liquid type, ForgeDirection side) + { + if (type == Liquid.WATER) { return 32; } + return 0; + } + + @Override + public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) + { + if (type == Liquid.STEAM) + { + int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); + this.steam += vol - rejectedSteam; + return rejectedSteam; + } + return 0; + } + + @Override + public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) + { + if (type == Liquid.STEAM) { return true; } + return false; + } + + @Override + public int getStoredLiquid(Liquid type) + { + if (type == Liquid.WATER) + { + return this.water; + } + else if (type == Liquid.STEAM) { return this.steam; } + return 0; + } + + @Override + public int getLiquidCapacity(Liquid type) + { + if (type == Liquid.WATER) + { + return this.maxWater; + } + else if (type == Liquid.STEAM) { return this.maxSteam; } + return 0; + } + + // ------------------- + // Data + // ---------------- + public Object[] getSendData() + { + return new Object[] + { steam, water, force, aForce, genRate, runTime }; + } + + public boolean needUpdate() + { + if (this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) { return true; } + return false; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, + Packet250CustomPayload packet, EntityPlayer player, + ByteArrayDataInput dataStream) + { + try + { + this.steam = dataStream.readInt(); + this.water = dataStream.readInt(); + this.force = dataStream.readInt(); + this.aForce = dataStream.readInt(); + this.genRate = dataStream.readInt(); + this.runTime = dataStream.readInt(); + ++pCount; + } + catch (Exception e) + { + System.out.print("SteamPistonDataFail"); + e.printStackTrace(); + } + + } + + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); this.runTime = par1NBTTagCompound.getInteger("time"); this.genRate = par1NBTTagCompound.getInteger("gen"); this.steam = par1NBTTagCompound.getInteger("steam"); @@ -306,30 +312,31 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("time", (int)this.runTime); - par1NBTTagCompound.setInteger("gen", (int)this.genRate); - par1NBTTagCompound.setInteger("steam", (int)this.steam); - par1NBTTagCompound.setInteger("water", (int)this.water); - + par1NBTTagCompound.setInteger("time", (int) this.runTime); + par1NBTTagCompound.setInteger("gen", (int) this.genRate); + par1NBTTagCompound.setInteger("steam", (int) this.steam); + par1NBTTagCompound.setInteger("water", (int) this.water); + } + @Override + public int getAnimationPos() + { + // TODO Auto-generated method stub + return this.pos; + } - @Override - public int getAnimationPos() { - // TODO Auto-generated method stub - return this.pos; - } - - - @Override - public int getForce() { - // TODO Auto-generated method stub - return this.force; - } - public int getMeta() { - return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - } + @Override + public int getForce() + { + // TODO Auto-generated method stub + return this.force; + } + public int getMeta() + { + return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); + } @Override public String getChannel() @@ -337,10 +344,15 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR return SteamPowerMain.channel; } - @Override public int getSizeInventory() { return 0; } + + @Override + public String getMeterReading(EntityPlayer user, ForgeDirection side) + { + return this.aForce+"N Out "+this.bForce+"N In"; + } } diff --git a/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java b/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java deleted file mode 100644 index afdf94b9..00000000 --- a/src/common/dark/SteamPower/steamengine/TileEntitytopGen.java +++ /dev/null @@ -1,32 +0,0 @@ -package dark.SteamPower.steamengine; - -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.SteamPowerMain; - -public class TileEntitytopGen extends TileEntityMachine { - - @Override - public Object[] getSendData() - { - return null; - } - - @Override - public boolean needUpdate() - { - return false; - } - - @Override - public String getChannel() - { - return SteamPowerMain.channel; - } - - @Override - public int getSizeInventory() - { - return 0; - } - -} From 2860ccfaf3e872cb28ab281b8c8e5bc2395c5398 Mon Sep 17 00:00:00 2001 From: Rseifert Date: Sat, 22 Dec 2012 20:43:35 -0500 Subject: [PATCH 109/115] etc etc part update to 1.4.5 Update to 1.4.5 as well forge's merged folder system also a part update to using forge's liquid api, the rest will be updated later after basic pipes is finished and can be used as a jar to prevent import issues --- .../SteamPower/boiler/TileEntityBoiler.java | 269 ------------------ .../SteamPower/ItemRenderHelperS.java | 9 +- .../SteamPower/SteamClientProxy.java | 0 .../SteamPower/SteamPowerMain.java | 21 +- .../SteamPower/SteamProxy.java | 6 +- .../SteamPower/boiler/BlockBoiler.java | 28 +- .../SteamPower/boiler/TileEntityBoiler.java | 189 ++++++++++++ .../boiler/TileEntityBoilerPipe.java | 2 +- .../SteamPower/firebox/BlockHeaters.java | 18 +- .../SteamPower/firebox/ContainerFireBox.java | 10 +- .../SteamPower/firebox/GUIFireBox.java | 8 +- .../SteamPower/firebox/TileEntityFireBox.java | 41 +-- .../firebox/TileEntityLavaBuffer.java | 2 +- .../firebox/TileEntityLiquidBurner.java | 2 +- .../dark => minecraft}/SteamPower/mcmod.info | 0 .../SteamPower/renders/ModelCenterTank.java | 6 +- .../SteamPower/renders/ModelCornerTank.java | 6 +- .../SteamPower/renders/ModelEngine.java | 6 +- .../SteamPower/renders/ModelFurnace.java | 6 +- .../SteamPower/renders/ModelGearPiston.java | 4 +- .../SteamPower/renders/ModelGenerator.java | 6 +- .../SteamPower/renders/ModelTank.java | 6 +- .../SteamPower/renders/RenderBoiler.java | 4 +- .../SteamPower/renders/RenderFurnace.java | 4 +- .../SteamPower/renders/RenderGearPiston.java | 4 +- .../SteamPower/renders/RenderGenerator.java | 4 +- .../steamengine/BlockSteamPiston.java | 28 +- .../steamengine/ItemSteamPiston.java | 15 +- .../steamengine/TileEntitySteamPiston.java | 92 +----- .../SteamPower/textures/CornerTank.png | Bin .../SteamPower/textures/Furnace.png | Bin .../SteamPower/textures/GearShaftPiston.png | Bin .../{dark => }/SteamPower/textures/Items.png | Bin .../SteamPower/textures/SteamGUI.png | Bin .../SteamPower/textures/tankBlock.png | Bin .../SteamPower/textures/tankTexture.png | Bin .../generaltextures/GearShaftPiston.png | Bin 0 -> 706 bytes src/minecraft/generaltextures/Items.png | Bin 0 -> 29075 bytes src/minecraft/generaltextures/Thumbs.db | Bin 0 -> 34816 bytes 39 files changed, 301 insertions(+), 495 deletions(-) delete mode 100644 src/common/dark/SteamPower/boiler/TileEntityBoiler.java rename src/{common/dark => minecraft}/SteamPower/ItemRenderHelperS.java (87%) rename src/{common/dark => minecraft}/SteamPower/SteamClientProxy.java (100%) rename src/{common/dark => minecraft}/SteamPower/SteamPowerMain.java (83%) rename src/{common/dark => minecraft}/SteamPower/SteamProxy.java (90%) rename src/{common/dark => minecraft}/SteamPower/boiler/BlockBoiler.java (75%) create mode 100644 src/minecraft/SteamPower/boiler/TileEntityBoiler.java rename src/{common/dark => minecraft}/SteamPower/boiler/TileEntityBoilerPipe.java (63%) rename src/{common/dark => minecraft}/SteamPower/firebox/BlockHeaters.java (85%) rename src/{common/dark => minecraft}/SteamPower/firebox/ContainerFireBox.java (81%) rename src/{common/dark => minecraft}/SteamPower/firebox/GUIFireBox.java (90%) rename src/{common/dark => minecraft}/SteamPower/firebox/TileEntityFireBox.java (86%) rename src/{common/dark => minecraft}/SteamPower/firebox/TileEntityLavaBuffer.java (64%) rename src/{common/dark => minecraft}/SteamPower/firebox/TileEntityLiquidBurner.java (64%) rename src/{common/dark => minecraft}/SteamPower/mcmod.info (100%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelCenterTank.java (85%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelCornerTank.java (91%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelEngine.java (92%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelFurnace.java (90%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelGearPiston.java (96%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelGenerator.java (93%) rename src/{common/dark => minecraft}/SteamPower/renders/ModelTank.java (94%) rename src/{common/dark => minecraft}/SteamPower/renders/RenderBoiler.java (90%) rename src/{common/dark => minecraft}/SteamPower/renders/RenderFurnace.java (85%) rename src/{common/dark => minecraft}/SteamPower/renders/RenderGearPiston.java (89%) rename src/{common/dark => minecraft}/SteamPower/renders/RenderGenerator.java (86%) rename src/{common/dark => minecraft}/SteamPower/steamengine/BlockSteamPiston.java (82%) rename src/{common/dark => minecraft}/SteamPower/steamengine/ItemSteamPiston.java (85%) rename src/{common/dark => minecraft}/SteamPower/steamengine/TileEntitySteamPiston.java (75%) rename src/minecraft/{dark => }/SteamPower/textures/CornerTank.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/Furnace.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/GearShaftPiston.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/Items.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/SteamGUI.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/tankBlock.png (100%) rename src/minecraft/{dark => }/SteamPower/textures/tankTexture.png (100%) create mode 100644 src/minecraft/generaltextures/GearShaftPiston.png create mode 100644 src/minecraft/generaltextures/Items.png create mode 100644 src/minecraft/generaltextures/Thumbs.db diff --git a/src/common/dark/SteamPower/boiler/TileEntityBoiler.java b/src/common/dark/SteamPower/boiler/TileEntityBoiler.java deleted file mode 100644 index 0a3a47a4..00000000 --- a/src/common/dark/SteamPower/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,269 +0,0 @@ -package dark.SteamPower.boiler; - -import net.minecraft.src.Block; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.prefab.network.IPacketReceiver; - -import com.google.common.io.ByteArrayDataInput; - -import dark.BasicUtilities.api.IProducer; -import dark.BasicUtilities.api.IReadOut; -import dark.BasicUtilities.api.IStorageTank; -import dark.BasicUtilities.api.Liquid; -import dark.BasicUtilities.api.MHelper; -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.SteamPowerMain; - -public class TileEntityBoiler extends TileEntityMachine implements IPacketReceiver, IProducer, IStorageTank, IReadOut -{ - public int steam = 0; - public int water = 0; - public int heat = 0; - public int hullHeat = 0; - public int heatMax = 4500; - public TileEntity[] connectedBlocks = - { null, null, null, null, null, null }; - public int tankCount = 0; - public int tickCount = 0; - - // ----------------------------- - // Update stuff - // ----------------------------- - @Override - public void updateEntity() - { - // update connection list used for rendering - this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); - this.tankCount = 0; - for (int i = 0; i < connectedBlocks.length; i++) - { - if (connectedBlocks[i] != null) - { - tankCount++; - } - }// end connection update - if (tickCount++ >= 10 && !worldObj.isRemote) - { - tickCount = 0; - - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); - if (ent instanceof IProducer && ((IProducer) ent).canProduceLiquid(Liquid.HEAT, ForgeDirection.UP)) - { - this.heat = (int) Math.min(((IProducer) ent).onProduceLiquid(Liquid.HEAT, 250, ForgeDirection.UP) + this.heat, 4500); - } - else if (worldObj.getBlockId(xCoord, yCoord - 1, zCoord) == Block.lavaStill.blockID) - { - this.heat = Math.min(90 + heat, 2000); - } - if (hullHeat < 10000) - { - int mHeat = 10000 - hullHeat; - int hHeat = mHeat - Math.max((mHeat - this.heat), 0); - hullHeat = Math.min(hullHeat + hHeat, 10000); - this.heat -= hHeat; - } - else - { - if (heat >= 2000 && this.water >= 1 && this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - this.water--; - this.steam = Math.min(this.steam + 20, this.getLiquidCapacity(Liquid.STEAM)); - this.heat -= 2000; - } - this.hullHeat -= 5; - } - this.water = MHelper.shareLiquid(worldObj, xCoord, yCoord, zCoord, this.water, this.getLiquidCapacity(Liquid.WATER), Liquid.WATER); - this.steam = MHelper.shareLiquid(worldObj, xCoord, yCoord, zCoord, this.steam, this.getLiquidCapacity(Liquid.STEAM), Liquid.STEAM); - } - super.updateEntity(); - } - - // ----------------------------- - // Liquid stuff - // ----------------------------- - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) - { - if (type == Liquid.WATER) - { - if (this.water < this.getLiquidCapacity(Liquid.WATER)) - { - int rej = Math.max((this.water + vol) - this.getLiquidCapacity(Liquid.WATER), 0); - this.water += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord + 1, zCoord); - if (te instanceof IStorageTank) { return ((IStorageTank) te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); } - } - } - else if (type == Liquid.STEAM) - { - if (this.steam < this.getLiquidCapacity(Liquid.STEAM)) - { - int rej = Math.max((this.steam + vol) - this.getLiquidCapacity(Liquid.STEAM), 0); - this.steam += vol - rej; - return rej; - } - else - { - TileEntity te = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); - if (te instanceof IStorageTank) { return ((IStorageTank) te).onReceiveLiquid(type, vol, ForgeDirection.UNKNOWN); } - } - } - return vol; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection s) - { - if (type == Liquid.WATER) - { - return true; - } - else if (type == Liquid.STEAM && s == ForgeDirection.UNKNOWN) { return true; } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) - { - if (type == Liquid.WATER) - { - return this.water; - } - else if (type == Liquid.STEAM) { return this.steam; } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) - { - if (type == Liquid.WATER) - { - return 14; - } - else if (type == Liquid.STEAM) { return 140; } - return 0; - } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) - { - if (type == Liquid.STEAM) - { - // TODO setup the actual math for this - if (vol < this.steam) - { - this.steam -= vol; - return vol; - } - else if (this.steam >= 1) - { - this.steam -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) - { - if (type == Liquid.STEAM) { return true; } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) - { - if (type == Liquid.STEAM) { return true; } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) - { - if (type == Liquid.STEAM) { return 100; } - return 0; - } - - // ----------------------------- - // Data - // ----------------------------- - public Object[] getSendData() - { - return new Object[] - { this.water, this.steam, this.heat, this.hullHeat }; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) - { - try - { - this.water = dataStream.readInt(); - this.steam = dataStream.readInt(); - this.heat = dataStream.readInt(); - this.hullHeat = dataStream.readInt(); - } - catch (Exception e) - { - e.printStackTrace(); - } - - } - - @Override - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("water", this.water); - par1NBTTagCompound.setInteger("steam", this.steam); - par1NBTTagCompound.setInteger("heat", this.heat); - par1NBTTagCompound.setInteger("hullHeat", this.hullHeat); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.water = par1NBTTagCompound.getInteger("water"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.heat = par1NBTTagCompound.getInteger("heat"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - @Override - public boolean needUpdate() - { - return false; - } - - @Override - public int getSizeInventory() - { - return 0; - } - - @Override - public String getChannel() - { - return SteamPowerMain.channel; - } - - @Override - public String getMeterReading(EntityPlayer user, ForgeDirection side) - { - return this.water + "B WATER " + this.steam + "B STEAM " + this.heat + "/" + this.heatMax + " Heat"; - } - -} diff --git a/src/common/dark/SteamPower/ItemRenderHelperS.java b/src/minecraft/SteamPower/ItemRenderHelperS.java similarity index 87% rename from src/common/dark/SteamPower/ItemRenderHelperS.java rename to src/minecraft/SteamPower/ItemRenderHelperS.java index 568fd4b2..28b1ce49 100644 --- a/src/common/dark/SteamPower/ItemRenderHelperS.java +++ b/src/minecraft/SteamPower/ItemRenderHelperS.java @@ -1,15 +1,14 @@ package dark.SteamPower; -import net.minecraft.src.Block; -import net.minecraft.src.IBlockAccess; -import net.minecraft.src.RenderBlocks; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; -import dark.BasicUtilities.BasicUtilitiesMain; import dark.SteamPower.renders.ModelFurnace; import dark.SteamPower.renders.ModelGenerator; import dark.SteamPower.renders.ModelTank; @@ -22,7 +21,7 @@ public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { private ModelFurnace modelFurnace = new ModelFurnace(); @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == SteamPowerMain.heaters.blockID && metadata == 4) + if(block.blockID == SteamPowerMain.boilers.blockID && metadata >= 0 && metadata <= 3) { GL11.glPushMatrix(); GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); diff --git a/src/common/dark/SteamPower/SteamClientProxy.java b/src/minecraft/SteamPower/SteamClientProxy.java similarity index 100% rename from src/common/dark/SteamPower/SteamClientProxy.java rename to src/minecraft/SteamPower/SteamClientProxy.java diff --git a/src/common/dark/SteamPower/SteamPowerMain.java b/src/minecraft/SteamPower/SteamPowerMain.java similarity index 83% rename from src/common/dark/SteamPower/SteamPowerMain.java rename to src/minecraft/SteamPower/SteamPowerMain.java index e17072c2..623d759e 100644 --- a/src/common/dark/SteamPower/SteamPowerMain.java +++ b/src/minecraft/SteamPower/SteamPowerMain.java @@ -2,10 +2,10 @@ package dark.SteamPower; import java.io.File; -import net.minecraft.src.Block; -import net.minecraft.src.CraftingManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; import net.minecraftforge.common.Configuration; import net.minecraftforge.oredict.ShapedOreRecipe; import universalelectricity.prefab.network.PacketManager; @@ -35,10 +35,11 @@ public class SteamPowerMain static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); public static final String channel = "SPpack"; public static String textureFile = "/dark/SteamPower/textures/"; + public final static int BLOCK_ID_PREFIX = 3100; // Blocks and items - public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", 3030).value)).setBlockName("machine"); - public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", 3031).value)).setBlockName("SteamEngien"); - public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", 3032).value)).setBlockName("machine"); + public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", BLOCK_ID_PREFIX).value)).setBlockName("machine"); + public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", BLOCK_ID_PREFIX+1).value)).setBlockName("SteamEngien"); + public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", BLOCK_ID_PREFIX+2).value)).setBlockName("machine"); public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "SteamPistonItem", 30308).value)).setItemName("SteamEngine"); public static SteamPowerMain instance; @@ -58,9 +59,9 @@ public class SteamPowerMain proxy.preInit(); - GameRegistry.registerBlock(heaters); - GameRegistry.registerBlock(piston); - GameRegistry.registerBlock(boilers); + GameRegistry.registerBlock(heaters,"heater units"); + GameRegistry.registerBlock(piston,"steam piston"); + GameRegistry.registerBlock(boilers,"boiler tanks"); } @Init diff --git a/src/common/dark/SteamPower/SteamProxy.java b/src/minecraft/SteamPower/SteamProxy.java similarity index 90% rename from src/common/dark/SteamPower/SteamProxy.java rename to src/minecraft/SteamPower/SteamProxy.java index ba73d8fc..b3f63c10 100644 --- a/src/common/dark/SteamPower/SteamProxy.java +++ b/src/minecraft/SteamPower/SteamProxy.java @@ -1,8 +1,8 @@ package dark.SteamPower; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.TileEntity; -import net.minecraft.src.World; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; import dark.BasicUtilities.mechanical.TileEntityGen; diff --git a/src/common/dark/SteamPower/boiler/BlockBoiler.java b/src/minecraft/SteamPower/boiler/BlockBoiler.java similarity index 75% rename from src/common/dark/SteamPower/boiler/BlockBoiler.java rename to src/minecraft/SteamPower/boiler/BlockBoiler.java index c8074359..10de561e 100644 --- a/src/common/dark/SteamPower/boiler/BlockBoiler.java +++ b/src/minecraft/SteamPower/boiler/BlockBoiler.java @@ -2,14 +2,14 @@ package dark.SteamPower.boiler; import java.util.List; -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.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; import universalelectricity.prefab.BlockMachine; import dark.Library.Util.MetaGroupingHelper; import dark.Library.prefab.TileEntityMachine; @@ -54,17 +54,6 @@ public class BlockBoiler extends BlockMachine { return MetaGroupingHelper.getGroupStartMeta(MetaGroupingHelper.getGrouping(metadata)); } - - /** - * Called upon block activation (left or right click on the block.). The - * three integers represent x,y,z of the block. - */ - @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) - { - return false; - } - @Override public TileEntity createNewTileEntity(World var1, int meta) { @@ -87,7 +76,6 @@ public class BlockBoiler extends BlockMachine { int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; int metadata = world.getBlockMetadata(x, y, z); - TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); // world.setBlockMetadata(x, y, z, angle); } diff --git a/src/minecraft/SteamPower/boiler/TileEntityBoiler.java b/src/minecraft/SteamPower/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..ec364da1 --- /dev/null +++ b/src/minecraft/SteamPower/boiler/TileEntityBoiler.java @@ -0,0 +1,189 @@ +package dark.SteamPower.boiler; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.liquids.ILiquidTank; +import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidStack; +import net.minecraftforge.liquids.LiquidTank; +import dark.BasicUtilities.BasicUtilitiesMain; +import dark.BasicUtilities.api.IHeatCreator; +import dark.BasicUtilities.api.IReadOut; +import dark.BasicUtilities.api.Liquid; +import dark.BasicUtilities.api.MHelper; +import dark.BasicUtilities.pipes.TileEntityPipe; + +public class TileEntityBoiler extends TileEntity implements IReadOut, ITankContainer +{ + public int heat = 0; + public int hullHeat = 0; + public final int heatMax = 4500; + public final int heatGain = 220; + public final int heatNeed = 2000; + public TileEntity[] connectedBlocks = + { null, null, null, null, null, null }; + public int tankCount = 0; + public int tickCount = 0; + + public LiquidTank SteamTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * 10); + public LiquidTank WaterTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * 4); + + // ----------------------------- + // Update stuff + // ----------------------------- + @Override + public void updateEntity() + { + // update connection list used for rendering + if (tickCount-- == 10) + { + this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); + this.tankCount = 0; + for (int i = 0; i < connectedBlocks.length; i++) + { + if (!(connectedBlocks[i] instanceof ILiquidTank || connectedBlocks[i] instanceof TileEntityPipe)) + { + connectedBlocks[i] = null; + } + if (connectedBlocks[i] != null) + { + tankCount++; + } + } + tickCount = 10; + } + if (!worldObj.isRemote) + { + TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); + if (ent instanceof IHeatCreator && ((IHeatCreator) ent).canCreatHeat(ForgeDirection.UP)) + { + this.heat = Math.min(heat + Math.max(((IHeatCreator) ent).createHeat(ForgeDirection.UP),0),this.heatMax); + } + if(this.hullHeat < 10000) + { + this.hullHeat += this.heat; + this.heat = 0; + }else + if(this.heat >= this.heatNeed) + { + this.WaterTank.drain(1, true); + LiquidStack Stack = Liquid.STEAM.liquid.copy(); + Stack.amount = LiquidContainerRegistry.BUCKET_VOLUME; + this.SteamTank.fill(Stack, true); + this.heat -= this.heatNeed; + } + } + + super.updateEntity(); + } + + // ----------------------------- + // Liquid stuff + // ----------------------------- + + // ----------------------------- + // Data + // ----------------------------- + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + // liquid saving + LiquidStack liquid = this.WaterTank.getLiquid(); + LiquidStack liquid2 = this.SteamTank.getLiquid(); + int water = 0; + int steam = 0; + if (liquid != null) water = liquid.amount; + if (liquid2 != null) steam = liquid2.amount; + nbt.setInteger("water", water); + nbt.setInteger("steam", steam); + // tempature saving + nbt.setInteger("heat", this.heat); + nbt.setInteger("hullHeat", this.hullHeat); + } + + @Override + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + // load up liquids + int water = par1NBTTagCompound.getInteger("water"); + int steam = par1NBTTagCompound.getInteger("steam"); + this.WaterTank.setLiquid(new LiquidStack(Block.waterStill.blockID, water)); + this.SteamTank.setLiquid(new LiquidStack(BasicUtilitiesMain.SteamBlock.blockID, steam)); + // load up heat/temp levels + this.heat = par1NBTTagCompound.getInteger("heat"); + this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); + } + + @Override + public String getMeterReading(EntityPlayer user, ForgeDirection side) + { + String output = " "; + LiquidStack liquid = this.WaterTank.getLiquid(); + LiquidStack liquid2 = this.SteamTank.getLiquid(); + if (liquid != null) output += (liquid.amount / LiquidContainerRegistry.BUCKET_VOLUME) + "B WATER "; + if (liquid2 != null) output += (liquid2.amount / LiquidContainerRegistry.BUCKET_VOLUME) + "B Steam "; + if (liquid != null || liquid2 != null) return output; + return "messurement error"; + + } + + @Override + public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) + { + int used = 0; + + if (resource.itemID == Block.waterStill.blockID) + { + used += WaterTank.fill(resource, doFill); + } + else if (resource.itemID == BasicUtilitiesMain.Steam.itemID) + { + used += SteamTank.fill(resource, doFill); + } + + return used; + } + + @Override + public int fill(int tankIndex, LiquidStack resource, boolean doFill) + { + if (resource.itemID == Block.waterStill.blockID) + return WaterTank.fill(resource, doFill); + return 0; + } + + @Override + public LiquidStack drain(ForgeDirection from, int maxEmpty, boolean doDrain) + { + return drain(2, maxEmpty, doDrain); + } + + @Override + public LiquidStack drain(int tankIndex, int maxEmpty, boolean doDrain) + { + if (tankIndex == 1) return SteamTank.drain(maxEmpty, doDrain); + return null; + } + + @Override + public ILiquidTank[] getTanks(ForgeDirection direction) + { + return new ILiquidTank[] + { SteamTank, WaterTank }; + } + + @Override + public ILiquidTank getTank(ForgeDirection direction, LiquidStack type) + { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java b/src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java similarity index 63% rename from src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java rename to src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java index 0c1b81bf..f7202caf 100644 --- a/src/common/dark/SteamPower/boiler/TileEntityBoilerPipe.java +++ b/src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java @@ -1,6 +1,6 @@ package dark.SteamPower.boiler; -import net.minecraft.src.TileEntity; +import net.minecraft.tileentity.TileEntity; public class TileEntityBoilerPipe extends TileEntity { diff --git a/src/common/dark/SteamPower/firebox/BlockHeaters.java b/src/minecraft/SteamPower/firebox/BlockHeaters.java similarity index 85% rename from src/common/dark/SteamPower/firebox/BlockHeaters.java rename to src/minecraft/SteamPower/firebox/BlockHeaters.java index d3e575e5..1117cd22 100644 --- a/src/common/dark/SteamPower/firebox/BlockHeaters.java +++ b/src/minecraft/SteamPower/firebox/BlockHeaters.java @@ -2,14 +2,14 @@ package dark.SteamPower.firebox; import java.util.List; -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.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; import dark.Library.Util.MetaGroupingHelper; import dark.Library.prefab.TileEntityMachine; import dark.SteamPower.ItemRenderHelperS; @@ -59,7 +59,7 @@ public class BlockHeaters extends universalelectricity.prefab.BlockMachine * three integers represent x,y,z of the block. */ @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player) + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { TileEntity blockEntity = (TileEntity) world.getBlockTileEntity(x, y, z); if (!world.isRemote && !player.isSneaking() && blockEntity instanceof TileEntityFireBox) diff --git a/src/common/dark/SteamPower/firebox/ContainerFireBox.java b/src/minecraft/SteamPower/firebox/ContainerFireBox.java similarity index 81% rename from src/common/dark/SteamPower/firebox/ContainerFireBox.java rename to src/minecraft/SteamPower/firebox/ContainerFireBox.java index aa3d7c01..39d6bea6 100644 --- a/src/common/dark/SteamPower/firebox/ContainerFireBox.java +++ b/src/minecraft/SteamPower/firebox/ContainerFireBox.java @@ -1,10 +1,10 @@ package dark.SteamPower.firebox; -import net.minecraft.src.Container; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Slot; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; public class ContainerFireBox extends Container { diff --git a/src/common/dark/SteamPower/firebox/GUIFireBox.java b/src/minecraft/SteamPower/firebox/GUIFireBox.java similarity index 90% rename from src/common/dark/SteamPower/firebox/GUIFireBox.java rename to src/minecraft/SteamPower/firebox/GUIFireBox.java index ec18fc11..fb1e6de7 100644 --- a/src/common/dark/SteamPower/firebox/GUIFireBox.java +++ b/src/minecraft/SteamPower/firebox/GUIFireBox.java @@ -2,10 +2,10 @@ package dark.SteamPower.firebox; import java.text.DecimalFormat; -import net.minecraft.src.GuiContainer; -import net.minecraft.src.InventoryPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.StatCollector; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.item.Item; +import net.minecraft.util.StatCollector; import org.lwjgl.opengl.GL11; diff --git a/src/common/dark/SteamPower/firebox/TileEntityFireBox.java b/src/minecraft/SteamPower/firebox/TileEntityFireBox.java similarity index 86% rename from src/common/dark/SteamPower/firebox/TileEntityFireBox.java rename to src/minecraft/SteamPower/firebox/TileEntityFireBox.java index 7c0fd4d1..6f437c9b 100644 --- a/src/common/dark/SteamPower/firebox/TileEntityFireBox.java +++ b/src/minecraft/SteamPower/firebox/TileEntityFireBox.java @@ -1,27 +1,26 @@ package dark.SteamPower.firebox; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.IInventory; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; +import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ISidedInventory; import universalelectricity.prefab.network.IPacketReceiver; import com.google.common.io.ByteArrayDataInput; -import dark.BasicUtilities.api.IProducer; -import dark.BasicUtilities.api.Liquid; +import dark.BasicUtilities.api.IHeatCreator; import dark.BasicUtilities.api.MHelper; import dark.Library.prefab.TileEntityMachine; import dark.SteamPower.SteamPowerMain; import dark.SteamPower.boiler.TileEntityBoiler; -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IProducer +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IHeatCreator { // max heat generated per second @@ -240,28 +239,16 @@ public class TileEntityFireBox extends TileEntityMachine implements IPacketRecei } @Override - public int onProduceLiquid(Liquid type, int maxVol, ForgeDirection side) + public boolean canCreatHeat(ForgeDirection dir) { - if (type == Liquid.HEAT) { return Math.min(this.generateRate, maxVol); } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) - { - if (type == Liquid.HEAT) { return true; } + if(dir == ForgeDirection.UP) return true; return false; } @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) - { - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) + public int createHeat(ForgeDirection dir) { + if(dir == ForgeDirection.UP) return this.generateRate; return 0; } } diff --git a/src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java b/src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java similarity index 64% rename from src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java rename to src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java index 75d021f8..7710f620 100644 --- a/src/common/dark/SteamPower/firebox/TileEntityLavaBuffer.java +++ b/src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java @@ -1,6 +1,6 @@ package dark.SteamPower.firebox; -import net.minecraft.src.TileEntity; +import net.minecraft.tileentity.TileEntity; public class TileEntityLavaBuffer extends TileEntity { diff --git a/src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java b/src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java similarity index 64% rename from src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java rename to src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java index e0026d5c..d8a1651d 100644 --- a/src/common/dark/SteamPower/firebox/TileEntityLiquidBurner.java +++ b/src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java @@ -1,6 +1,6 @@ package dark.SteamPower.firebox; -import net.minecraft.src.TileEntity; +import net.minecraft.tileentity.TileEntity; public class TileEntityLiquidBurner extends TileEntity { diff --git a/src/common/dark/SteamPower/mcmod.info b/src/minecraft/SteamPower/mcmod.info similarity index 100% rename from src/common/dark/SteamPower/mcmod.info rename to src/minecraft/SteamPower/mcmod.info diff --git a/src/common/dark/SteamPower/renders/ModelCenterTank.java b/src/minecraft/SteamPower/renders/ModelCenterTank.java similarity index 85% rename from src/common/dark/SteamPower/renders/ModelCenterTank.java rename to src/minecraft/SteamPower/renders/ModelCenterTank.java index 84f2b498..03dce021 100644 --- a/src/common/dark/SteamPower/renders/ModelCenterTank.java +++ b/src/minecraft/SteamPower/renders/ModelCenterTank.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelCenterTank extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelCornerTank.java b/src/minecraft/SteamPower/renders/ModelCornerTank.java similarity index 91% rename from src/common/dark/SteamPower/renders/ModelCornerTank.java rename to src/minecraft/SteamPower/renders/ModelCornerTank.java index 0e1db274..960828ce 100644 --- a/src/common/dark/SteamPower/renders/ModelCornerTank.java +++ b/src/minecraft/SteamPower/renders/ModelCornerTank.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelCornerTank extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelEngine.java b/src/minecraft/SteamPower/renders/ModelEngine.java similarity index 92% rename from src/common/dark/SteamPower/renders/ModelEngine.java rename to src/minecraft/SteamPower/renders/ModelEngine.java index a5cf4b15..498525c3 100644 --- a/src/common/dark/SteamPower/renders/ModelEngine.java +++ b/src/minecraft/SteamPower/renders/ModelEngine.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelEngine extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelFurnace.java b/src/minecraft/SteamPower/renders/ModelFurnace.java similarity index 90% rename from src/common/dark/SteamPower/renders/ModelFurnace.java rename to src/minecraft/SteamPower/renders/ModelFurnace.java index ba6c5f68..9ba99010 100644 --- a/src/common/dark/SteamPower/renders/ModelFurnace.java +++ b/src/minecraft/SteamPower/renders/ModelFurnace.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelFurnace extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelGearPiston.java b/src/minecraft/SteamPower/renders/ModelGearPiston.java similarity index 96% rename from src/common/dark/SteamPower/renders/ModelGearPiston.java rename to src/minecraft/SteamPower/renders/ModelGearPiston.java index 6a7e7de5..ed4241f4 100644 --- a/src/common/dark/SteamPower/renders/ModelGearPiston.java +++ b/src/minecraft/SteamPower/renders/ModelGearPiston.java @@ -11,8 +11,8 @@ package dark.SteamPower.renders; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; public class ModelGearPiston extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelGenerator.java b/src/minecraft/SteamPower/renders/ModelGenerator.java similarity index 93% rename from src/common/dark/SteamPower/renders/ModelGenerator.java rename to src/minecraft/SteamPower/renders/ModelGenerator.java index e37f6570..9316f5b7 100644 --- a/src/common/dark/SteamPower/renders/ModelGenerator.java +++ b/src/minecraft/SteamPower/renders/ModelGenerator.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelGenerator extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/ModelTank.java b/src/minecraft/SteamPower/renders/ModelTank.java similarity index 94% rename from src/common/dark/SteamPower/renders/ModelTank.java rename to src/minecraft/SteamPower/renders/ModelTank.java index f317b234..dd10d46f 100644 --- a/src/common/dark/SteamPower/renders/ModelTank.java +++ b/src/minecraft/SteamPower/renders/ModelTank.java @@ -11,9 +11,9 @@ package dark.SteamPower.renders; -import net.minecraft.src.Entity; -import net.minecraft.src.ModelBase; -import net.minecraft.src.ModelRenderer; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; public class ModelTank extends ModelBase { diff --git a/src/common/dark/SteamPower/renders/RenderBoiler.java b/src/minecraft/SteamPower/renders/RenderBoiler.java similarity index 90% rename from src/common/dark/SteamPower/renders/RenderBoiler.java rename to src/minecraft/SteamPower/renders/RenderBoiler.java index 97f70387..22a531d7 100644 --- a/src/common/dark/SteamPower/renders/RenderBoiler.java +++ b/src/minecraft/SteamPower/renders/RenderBoiler.java @@ -1,7 +1,7 @@ package dark.SteamPower.renders; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; import org.lwjgl.opengl.GL11; diff --git a/src/common/dark/SteamPower/renders/RenderFurnace.java b/src/minecraft/SteamPower/renders/RenderFurnace.java similarity index 85% rename from src/common/dark/SteamPower/renders/RenderFurnace.java rename to src/minecraft/SteamPower/renders/RenderFurnace.java index fb64f737..146f9b87 100644 --- a/src/common/dark/SteamPower/renders/RenderFurnace.java +++ b/src/minecraft/SteamPower/renders/RenderFurnace.java @@ -1,7 +1,7 @@ package dark.SteamPower.renders; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; import org.lwjgl.opengl.GL11; diff --git a/src/common/dark/SteamPower/renders/RenderGearPiston.java b/src/minecraft/SteamPower/renders/RenderGearPiston.java similarity index 89% rename from src/common/dark/SteamPower/renders/RenderGearPiston.java rename to src/minecraft/SteamPower/renders/RenderGearPiston.java index 1a253d19..9a217943 100644 --- a/src/common/dark/SteamPower/renders/RenderGearPiston.java +++ b/src/minecraft/SteamPower/renders/RenderGearPiston.java @@ -1,7 +1,7 @@ package dark.SteamPower.renders; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; import org.lwjgl.opengl.GL11; diff --git a/src/common/dark/SteamPower/renders/RenderGenerator.java b/src/minecraft/SteamPower/renders/RenderGenerator.java similarity index 86% rename from src/common/dark/SteamPower/renders/RenderGenerator.java rename to src/minecraft/SteamPower/renders/RenderGenerator.java index b9356846..abe76e73 100644 --- a/src/common/dark/SteamPower/renders/RenderGenerator.java +++ b/src/minecraft/SteamPower/renders/RenderGenerator.java @@ -1,7 +1,7 @@ package dark.SteamPower.renders; -import net.minecraft.src.TileEntity; -import net.minecraft.src.TileEntitySpecialRenderer; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; import org.lwjgl.opengl.GL11; diff --git a/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java b/src/minecraft/SteamPower/steamengine/BlockSteamPiston.java similarity index 82% rename from src/common/dark/SteamPower/steamengine/BlockSteamPiston.java rename to src/minecraft/SteamPower/steamengine/BlockSteamPiston.java index 0669ac2f..acffd50a 100644 --- a/src/common/dark/SteamPower/steamengine/BlockSteamPiston.java +++ b/src/minecraft/SteamPower/steamengine/BlockSteamPiston.java @@ -2,11 +2,11 @@ package dark.SteamPower.steamengine; import java.util.Random; -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; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; import dark.SteamPower.SteamPowerMain; public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine @@ -19,19 +19,9 @@ public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine } @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) { - return false; - - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, - EntityPlayer par5EntityPlayer) - { - int angle = MathHelper - .floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; int metadata = par1World.getBlockMetadata(x, y, z); if (metadata < 3) { @@ -97,7 +87,9 @@ public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine public TileEntity createNewTileEntity(World world, int metadata) { if (metadata >= 0 && metadata < 4) { return new TileEntitySteamPiston(); } - if (metadata == 14) {} + if (metadata == 14) + { + } return null; } diff --git a/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java b/src/minecraft/SteamPower/steamengine/ItemSteamPiston.java similarity index 85% rename from src/common/dark/SteamPower/steamengine/ItemSteamPiston.java rename to src/minecraft/SteamPower/steamengine/ItemSteamPiston.java index 7564094f..dd9523a2 100644 --- a/src/common/dark/SteamPower/steamengine/ItemSteamPiston.java +++ b/src/minecraft/SteamPower/steamengine/ItemSteamPiston.java @@ -2,14 +2,13 @@ package dark.SteamPower.steamengine; import java.util.List; -import net.minecraft.src.Block; -import net.minecraft.src.CreativeTabs; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.Item; -import net.minecraft.src.ItemStack; -import net.minecraft.src.Material; -import net.minecraft.src.MathHelper; -import net.minecraft.src.World; +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; import dark.SteamPower.SteamPowerMain; public class ItemSteamPiston extends Item { diff --git a/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java b/src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java similarity index 75% rename from src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java rename to src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java index 29ba1cf3..765794ad 100644 --- a/src/common/dark/SteamPower/steamengine/TileEntitySteamPiston.java +++ b/src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java @@ -1,24 +1,21 @@ package dark.SteamPower.steamengine; -import net.minecraft.src.EntityPlayer; -import net.minecraft.src.INetworkManager; -import net.minecraft.src.NBTTagCompound; -import net.minecraft.src.Packet250CustomPayload; -import net.minecraft.src.TileEntity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; +import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; import universalelectricity.prefab.network.IPacketReceiver; import com.google.common.io.ByteArrayDataInput; -import dark.BasicUtilities.api.IConsumer; import dark.BasicUtilities.api.IForce; -import dark.BasicUtilities.api.IProducer; import dark.BasicUtilities.api.IReadOut; -import dark.BasicUtilities.api.Liquid; import dark.Library.prefab.TileEntityMachine; import dark.SteamPower.SteamPowerMain; -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver, IConsumer, IProducer, IForce, IReadOut +public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,IForce, IReadOut { public int force = 0; public int aForce = 0; @@ -182,83 +179,6 @@ public class TileEntitySteamPiston extends TileEntityMachine implements IPacketR this.bForce = force; return aForce; } - - @Override - public int onProduceLiquid(Liquid type, int vol, ForgeDirection side) - { - if (type == Liquid.WATER) - { - if (this.water > 0) - { - this.water -= 1; - return 1; - } - } - return 0; - } - - @Override - public boolean canProduceLiquid(Liquid type, ForgeDirection side) - { - if (type == Liquid.WATER) { return true; } - return false; - } - - @Override - public boolean canProducePresure(Liquid type, ForgeDirection side) - { - if (type == Liquid.WATER) { return true; } - return false; - } - - @Override - public int presureOutput(Liquid type, ForgeDirection side) - { - if (type == Liquid.WATER) { return 32; } - return 0; - } - - @Override - public int onReceiveLiquid(Liquid type, int vol, ForgeDirection side) - { - if (type == Liquid.STEAM) - { - int rejectedSteam = Math.max((this.steam + vol) - this.maxSteam, 0); - this.steam += vol - rejectedSteam; - return rejectedSteam; - } - return 0; - } - - @Override - public boolean canRecieveLiquid(Liquid type, ForgeDirection forgeDirection) - { - if (type == Liquid.STEAM) { return true; } - return false; - } - - @Override - public int getStoredLiquid(Liquid type) - { - if (type == Liquid.WATER) - { - return this.water; - } - else if (type == Liquid.STEAM) { return this.steam; } - return 0; - } - - @Override - public int getLiquidCapacity(Liquid type) - { - if (type == Liquid.WATER) - { - return this.maxWater; - } - else if (type == Liquid.STEAM) { return this.maxSteam; } - return 0; - } - // ------------------- // Data // ---------------- diff --git a/src/minecraft/dark/SteamPower/textures/CornerTank.png b/src/minecraft/SteamPower/textures/CornerTank.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/CornerTank.png rename to src/minecraft/SteamPower/textures/CornerTank.png diff --git a/src/minecraft/dark/SteamPower/textures/Furnace.png b/src/minecraft/SteamPower/textures/Furnace.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/Furnace.png rename to src/minecraft/SteamPower/textures/Furnace.png diff --git a/src/minecraft/dark/SteamPower/textures/GearShaftPiston.png b/src/minecraft/SteamPower/textures/GearShaftPiston.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/GearShaftPiston.png rename to src/minecraft/SteamPower/textures/GearShaftPiston.png diff --git a/src/minecraft/dark/SteamPower/textures/Items.png b/src/minecraft/SteamPower/textures/Items.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/Items.png rename to src/minecraft/SteamPower/textures/Items.png diff --git a/src/minecraft/dark/SteamPower/textures/SteamGUI.png b/src/minecraft/SteamPower/textures/SteamGUI.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/SteamGUI.png rename to src/minecraft/SteamPower/textures/SteamGUI.png diff --git a/src/minecraft/dark/SteamPower/textures/tankBlock.png b/src/minecraft/SteamPower/textures/tankBlock.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/tankBlock.png rename to src/minecraft/SteamPower/textures/tankBlock.png diff --git a/src/minecraft/dark/SteamPower/textures/tankTexture.png b/src/minecraft/SteamPower/textures/tankTexture.png similarity index 100% rename from src/minecraft/dark/SteamPower/textures/tankTexture.png rename to src/minecraft/SteamPower/textures/tankTexture.png diff --git a/src/minecraft/generaltextures/GearShaftPiston.png b/src/minecraft/generaltextures/GearShaftPiston.png new file mode 100644 index 0000000000000000000000000000000000000000..fa16d1d6bc1d035e3855f439bb3c6335495bb65c GIT binary patch literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!T#PKTitjb45_&F z_Kt1Pp#TxK3*vQB<_Fk}3~~;hisPQ1wQ%p$=z@|P4AL7C4a`#5loUB_j1(=G2X%;i zczW-5oQfjQR0#MxG3FPOJb(GkfA7D)xA#2rc;~u_+Y@f6{oZe5YbQTv?)rTFbAF-? z2SXZ)tNz95pRYetc3f0`ef6GIm(v)!QunV>&0vpWU}E^<6|{|IO_JILrWc;9C(1+@ zyz$`|J-?bo%VDR9?`9KU{g*yB~knRujJdN6h8pnc+cq`egf;CH~&cdGz?YLS2Rb?jirf%92GFoNSkV9ieE* ztiZs*z|_DXkS&@ZnV31` zJqkOneZbPX^XL65JM|l*FJ&?Ut#sJ!oFL6pAfeR0z5cp?!Hc(14BO)vSDpLwsPMQJ zqZY$NmDsfm%hMRGt}u1Uui*FL1_jSAOXd*X!ZapPpqmU%A6T}91;_$P0D}(_-7r$> Z2lMyImjd>!kbead@^tlcS?83{1OS^U6FL9@ literal 0 HcmV?d00001 diff --git a/src/minecraft/generaltextures/Items.png b/src/minecraft/generaltextures/Items.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5c5cafe657afcad99e6de3daa51e66d7c4b2a8 GIT binary patch literal 29075 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
lrdx^KPA8^8k`Zj?Lv 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 QOa#eGD}So~X!7lU0b{|gWB>pF literal 0 HcmV?d00001 diff --git a/src/minecraft/generaltextures/Thumbs.db b/src/minecraft/generaltextures/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..6f09712583aaaee9d427965de7142e6df0557700 GIT binary patch literal 34816 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 z
    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 a`g-o5p#KUK|F1=z|7-jIKmVUN0{;g_z_e5V literal 0 HcmV?d00001 From abe4dd4cdfb367ddc2c87a04a1ab5718b401a282 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Thu, 8 Aug 2013 11:00:41 -0400 Subject: [PATCH 110/115] removed old version files --- .gitignore | 44 ------------------------------------------- BasicPipesVersion.txt | 1 - SteamPowerVersion.txt | 1 - 3 files changed, 46 deletions(-) delete mode 100644 .gitignore delete mode 100644 BasicPipesVersion.txt delete mode 100644 SteamPowerVersion.txt diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f2803446..00000000 --- a/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -*.class - -# Package Files # -*.jar -*.war -*.ear -*.bat -*.sh -*.cfg -CHANGELOG -LICENSE -/src/minecraft_server/* -/src/minecraft/cpw/* -/src/minecraft/ibxm/* -/src/minecraft/net/* -/src/minecraft/paulscode/* -/src/minecraft/forge_logo.png -/src/minecraft/start.java -/src/minecraft/universalelectricity/* -/src/minecraft/basiccomponents/* -/src/minecraft/buildcraft/* -/src/minecraft/EUIClient/* -/src/common/cpw/* -/src/common/net/* -/src/common/org/* -/src/common/fml_at.cfg -/src/common/fml_marker.cfg -/src/common/fmlversion.properties -/src/common/forge_at.cfg -/src/common/universalelectricity/* -/src/common/basiccomponents/* -/src/common/buildcraft/* -/src/common/aa/* -/bin/ -/conf/ -/docs/ -/eclipse/ -/forge/ -/jars/ -/lib/ -/logs/ -/modsrc/ -/runtime/ -/temp/ diff --git a/BasicPipesVersion.txt b/BasicPipesVersion.txt deleted file mode 100644 index 872765e5..00000000 --- a/BasicPipesVersion.txt +++ /dev/null @@ -1 +0,0 @@ -1.9 \ No newline at end of file diff --git a/SteamPowerVersion.txt b/SteamPowerVersion.txt deleted file mode 100644 index 872765e5..00000000 --- a/SteamPowerVersion.txt +++ /dev/null @@ -1 +0,0 @@ -1.9 \ No newline at end of file From 9a35e08b60d9023a2c1f4f55c1d6b25b3d8247e5 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Thu, 8 Aug 2013 11:00:54 -0400 Subject: [PATCH 111/115] added license from AL --- LICENSE.txt | 81 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 64 insertions(+), 17 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index e0cd5523..bc0c36de 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,21 +1,68 @@ -MCP - Minecraft Coder Pack -MCP is (c) Copyright by the MCP Team +Copyright (c) 2013, DarkGuardsman +All rights reserved. -License and terms of use. +0. Definitions -No warranties. If MCP does not work for you, or causes any damage, it's your problem. Use it at own risk. +-------------- -You are allowed to: -- Use MCP to decompile the Minecraft client and server jar files. -- Use the decompiled source code to create mods for Minecraft. -- Recompile modified versions of Minecraft. -- Reobfuscate the classes of your mod for Minecraft. +Minecraft: Denotes a copy of the Minecraft game licensed by Mojang AB -You are NOT allowed to: -- Use MCP to do anything that violated Mojangs terms of use for Minecraft. -- Release Minecraft versions or modifications that allow you to play without having bought Minecraft from Mojang. -- Release modified or unmodified versions of MCP anywhere. -- Use any of MCPs scripts, tools or data files without explicit written permission. -- Make money with anything based on MCP (excluding Minecraft mods created by using MCP). -- Use MCP to create clients that are used for griefing or exploiting server bugs. -- Release the decompiled source code of Minecraft in any way. +User: Anybody that interacts with the software in one of the following ways: +- play +- decompile +- recompile or compile +- modify +- distribute + +Mod: The mod code designated by the present license, in source form, binary form, as obtained standalone, as part of a wider distribution or resulting from the compilation of the original or modified Minecraft sources. + +Mod Pack - Package distrubution of mods and there assets to be used by the user for easy install and collective download. + +Texture Pack - Package distrubution of texture or art work to change the visual look of the mod. + +Dependency: Code required for the Mod to work properly. This includes dependencies required to compile the code as well as any file or modification +that is explicitely or implicitely required for the Mod to be working. + +Owner: The project leader of the Mod reguardless of repo holder or manager + +1. Scope +-------- + +The present license is granted to any user of the Mod. As a prerequisite, a user must own a legally acquired copy of Minecraft. Terms of license may change anytime with or without notice. The user of this Mod will be subject to the newest version of this license. + +2. Liability +------------ + +This Mod is provided 'as is' with no warranties, implied or otherwise. The owner of this Mod takes no responsibility for any damages incurred from the use of this Mod. This Mod alters fundamental parts of the Minecraft game, parts of Minecraft may not work with this Mod installed. All damages caused from the use or misuse of this Mod fall on the user. + +3. Play rights +-------------- + +The user is allowed to install this Mod on a client or a server and to play without restriction. + +4. Modification rights +---------------------- + +The user may modify the original code for private use, learning experience, or to make a contribution to the original project source code. This does not give the right to redistrubute any part of the original or modified code. + +5. Distribution of original or modified copy rights +--------------------------------------------------- + +Is subject to distribution rights this entire Mod in its various forms. This +includes: +- original binary or source forms of this Mod files +- modified versions of these binaries or source files, as well as binaries resulting from source modifications +- patches to its source or binary files +- any copy of a portion of its binary source files + +A) The user is NOT allowed to redistribute this Mod partially, in totality, or included in a distribution without explict permissions from the owner. + +B) Distrubution of this mod in a mod pack is allowed as long as the user obeys the following rules: + 1) The mod pack should not contain a major version release of the mod within one week of the mod version release to allow for bug fixes + 2) The mod pack should not contain a modified version of the mod unless to change the texture look of parts of the mod + 3) The mod pack owner or contributors must redirect errors and bug reports to the issue area of the mod's original github repo + 4) The mod pack needs full public permission from all parts of the mod pack including mods, assets, and textures. + 5) The mod pack or its download site should allow access by users to the list of permissions and credits to authors + 6) The mod pack or its download site should contain links to mod documentation and original mod sites + +C) Textures of this mod are allowed to be used in the creation or modification of texture packs without permision. That is as long as links and credit to the original mod are given for easy user understanding. From 591a5a2499434321f23748a27051c94e213c75be Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Thu, 8 Aug 2013 11:44:27 -0400 Subject: [PATCH 112/115] Rework in progress I want to facepalm over and over again until i can remember why i coded some of this the way i did. Mostly i'm deleting everything and starting over --- .../steam}/textures/CornerTank.png | Bin .../steam}/textures/Furnace.png | Bin .../steam}/textures/GearShaftPiston.png | Bin .../steam}/textures/Items.png | Bin .../steam}/textures/SteamGUI.png | Bin .../steam}/textures/tankBlock.png | Bin .../steam}/textures/tankTexture.png | Bin src/dark/mech/steam/ItemRenderHelperS.java | 63 +++ src/dark/mech/steam/SteamClientProxy.java | 35 ++ .../mech/steam}/SteamPowerMain.java | 198 ++++--- src/dark/mech/steam/SteamProxy.java | 71 +++ src/dark/mech/steam/boiler/BlockBoiler.java | 61 +++ .../mech/steam/boiler/TileEntityBoiler.java | 16 + .../mech/steam}/firebox/BlockHeaters.java | 250 +++++---- .../mech/steam}/firebox/ContainerFireBox.java | 91 ++-- .../mech/steam}/firebox/GUIFireBox.java | 182 ++++--- .../steam}/firebox/TileEntityFireBox.java | 501 +++++++++--------- .../steam}/firebox/TileEntityLavaBuffer.java | 16 +- .../firebox/TileEntityLiquidBurner.java | 16 +- .../mech/steam/renders/ModelCenterTank.java | 42 ++ .../mech/steam/renders/ModelCornerTank.java | 83 +++ src/dark/mech/steam/renders/ModelEngine.java | 99 ++++ src/dark/mech/steam/renders/ModelFurnace.java | 66 +++ .../mech/steam/renders/ModelGearPiston.java | 383 +++++++++++++ .../mech/steam/renders/ModelGenerator.java | 122 +++++ src/dark/mech/steam/renders/ModelTank.java | 137 +++++ src/dark/mech/steam/renders/RenderBoiler.java | 68 +++ .../mech/steam/renders/RenderFurnace.java | 45 ++ .../mech/steam/renders/RenderGearPiston.java | 59 +++ .../mech/steam/renders/RenderGenerator.java | 45 ++ .../steam/steamengine/BlockSteamPiston.java | 76 +++ .../steamengine/TileEntitySteamPiston.java | 7 + .../SteamPower/ItemRenderHelperS.java | 56 -- .../SteamPower/SteamClientProxy.java | 37 -- src/minecraft/SteamPower/SteamProxy.java | 67 --- .../SteamPower/boiler/BlockBoiler.java | 105 ---- .../SteamPower/boiler/TileEntityBoiler.java | 189 ------- .../boiler/TileEntityBoilerPipe.java | 8 - src/minecraft/SteamPower/mcmod.info | 21 - .../SteamPower/renders/ModelCenterTank.java | 53 -- .../SteamPower/renders/ModelCornerTank.java | 95 ---- .../SteamPower/renders/ModelEngine.java | 109 ---- .../SteamPower/renders/ModelFurnace.java | 77 --- .../SteamPower/renders/ModelGearPiston.java | 380 ------------- .../SteamPower/renders/ModelGenerator.java | 131 ----- .../SteamPower/renders/ModelTank.java | 148 ------ .../SteamPower/renders/RenderBoiler.java | 63 --- .../SteamPower/renders/RenderFurnace.java | 39 -- .../SteamPower/renders/RenderGearPiston.java | 51 -- .../SteamPower/renders/RenderGenerator.java | 39 -- .../steamengine/BlockSteamPiston.java | 130 ----- .../steamengine/ItemSteamPiston.java | 76 --- .../steamengine/TileEntitySteamPiston.java | 278 ---------- .../generaltextures/GearShaftPiston.png | Bin 706 -> 0 bytes src/minecraft/generaltextures/Items.png | Bin 29075 -> 0 bytes src/minecraft/generaltextures/Thumbs.db | Bin 34816 -> 0 bytes 56 files changed, 2091 insertions(+), 2793 deletions(-) rename {src/minecraft/SteamPower => resources/steam}/textures/CornerTank.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/Furnace.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/GearShaftPiston.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/Items.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/SteamGUI.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/tankBlock.png (100%) rename {src/minecraft/SteamPower => resources/steam}/textures/tankTexture.png (100%) create mode 100644 src/dark/mech/steam/ItemRenderHelperS.java create mode 100644 src/dark/mech/steam/SteamClientProxy.java rename src/{minecraft/SteamPower => dark/mech/steam}/SteamPowerMain.java (67%) create mode 100644 src/dark/mech/steam/SteamProxy.java create mode 100644 src/dark/mech/steam/boiler/BlockBoiler.java create mode 100644 src/dark/mech/steam/boiler/TileEntityBoiler.java rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/BlockHeaters.java (77%) rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/ContainerFireBox.java (79%) rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/GUIFireBox.java (51%) rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/TileEntityFireBox.java (84%) rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/TileEntityLavaBuffer.java (71%) rename src/{minecraft/SteamPower => dark/mech/steam}/firebox/TileEntityLiquidBurner.java (72%) create mode 100644 src/dark/mech/steam/renders/ModelCenterTank.java create mode 100644 src/dark/mech/steam/renders/ModelCornerTank.java create mode 100644 src/dark/mech/steam/renders/ModelEngine.java create mode 100644 src/dark/mech/steam/renders/ModelFurnace.java create mode 100644 src/dark/mech/steam/renders/ModelGearPiston.java create mode 100644 src/dark/mech/steam/renders/ModelGenerator.java create mode 100644 src/dark/mech/steam/renders/ModelTank.java create mode 100644 src/dark/mech/steam/renders/RenderBoiler.java create mode 100644 src/dark/mech/steam/renders/RenderFurnace.java create mode 100644 src/dark/mech/steam/renders/RenderGearPiston.java create mode 100644 src/dark/mech/steam/renders/RenderGenerator.java create mode 100644 src/dark/mech/steam/steamengine/BlockSteamPiston.java create mode 100644 src/dark/mech/steam/steamengine/TileEntitySteamPiston.java delete mode 100644 src/minecraft/SteamPower/ItemRenderHelperS.java delete mode 100644 src/minecraft/SteamPower/SteamClientProxy.java delete mode 100644 src/minecraft/SteamPower/SteamProxy.java delete mode 100644 src/minecraft/SteamPower/boiler/BlockBoiler.java delete mode 100644 src/minecraft/SteamPower/boiler/TileEntityBoiler.java delete mode 100644 src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java delete mode 100644 src/minecraft/SteamPower/mcmod.info delete mode 100644 src/minecraft/SteamPower/renders/ModelCenterTank.java delete mode 100644 src/minecraft/SteamPower/renders/ModelCornerTank.java delete mode 100644 src/minecraft/SteamPower/renders/ModelEngine.java delete mode 100644 src/minecraft/SteamPower/renders/ModelFurnace.java delete mode 100644 src/minecraft/SteamPower/renders/ModelGearPiston.java delete mode 100644 src/minecraft/SteamPower/renders/ModelGenerator.java delete mode 100644 src/minecraft/SteamPower/renders/ModelTank.java delete mode 100644 src/minecraft/SteamPower/renders/RenderBoiler.java delete mode 100644 src/minecraft/SteamPower/renders/RenderFurnace.java delete mode 100644 src/minecraft/SteamPower/renders/RenderGearPiston.java delete mode 100644 src/minecraft/SteamPower/renders/RenderGenerator.java delete mode 100644 src/minecraft/SteamPower/steamengine/BlockSteamPiston.java delete mode 100644 src/minecraft/SteamPower/steamengine/ItemSteamPiston.java delete mode 100644 src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java delete mode 100644 src/minecraft/generaltextures/GearShaftPiston.png delete mode 100644 src/minecraft/generaltextures/Items.png delete mode 100644 src/minecraft/generaltextures/Thumbs.db diff --git a/src/minecraft/SteamPower/textures/CornerTank.png b/resources/steam/textures/CornerTank.png similarity index 100% rename from src/minecraft/SteamPower/textures/CornerTank.png rename to resources/steam/textures/CornerTank.png diff --git a/src/minecraft/SteamPower/textures/Furnace.png b/resources/steam/textures/Furnace.png similarity index 100% rename from src/minecraft/SteamPower/textures/Furnace.png rename to resources/steam/textures/Furnace.png diff --git a/src/minecraft/SteamPower/textures/GearShaftPiston.png b/resources/steam/textures/GearShaftPiston.png similarity index 100% rename from src/minecraft/SteamPower/textures/GearShaftPiston.png rename to resources/steam/textures/GearShaftPiston.png diff --git a/src/minecraft/SteamPower/textures/Items.png b/resources/steam/textures/Items.png similarity index 100% rename from src/minecraft/SteamPower/textures/Items.png rename to resources/steam/textures/Items.png diff --git a/src/minecraft/SteamPower/textures/SteamGUI.png b/resources/steam/textures/SteamGUI.png similarity index 100% rename from src/minecraft/SteamPower/textures/SteamGUI.png rename to resources/steam/textures/SteamGUI.png diff --git a/src/minecraft/SteamPower/textures/tankBlock.png b/resources/steam/textures/tankBlock.png similarity index 100% rename from src/minecraft/SteamPower/textures/tankBlock.png rename to resources/steam/textures/tankBlock.png diff --git a/src/minecraft/SteamPower/textures/tankTexture.png b/resources/steam/textures/tankTexture.png similarity index 100% rename from src/minecraft/SteamPower/textures/tankTexture.png rename to resources/steam/textures/tankTexture.png diff --git a/src/dark/mech/steam/ItemRenderHelperS.java b/src/dark/mech/steam/ItemRenderHelperS.java new file mode 100644 index 00000000..03d547aa --- /dev/null +++ b/src/dark/mech/steam/ItemRenderHelperS.java @@ -0,0 +1,63 @@ +package dark.mech.steam; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import dark.mech.steam.renders.ModelFurnace; +import dark.mech.steam.renders.ModelGenerator; +import dark.mech.steam.renders.ModelTank; + +//ItemRenderHelperS.renderID +public class ItemRenderHelperS implements ISimpleBlockRenderingHandler +{ + public static ItemRenderHelperS instance = new ItemRenderHelperS(); + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + private ModelGenerator modelGen = new ModelGenerator(); + private ModelTank modelTank = new ModelTank(0f); + private ModelFurnace modelFurnace = new ModelFurnace(); + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) + { + if (block.blockID == SteamPowerMain.boilers.blockID && metadata >= 0 && metadata <= 3) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float) 1F, (float) 0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile + "tankTexture.png")); + modelTank.generalRender(0.0625F); + GL11.glPopMatrix(); + } + if (block.blockID == SteamPowerMain.heaters.blockID && metadata >= 0 && metadata <= 3) + { + GL11.glPushMatrix(); + GL11.glTranslatef((float) 0.0F, (float) 1F, (float) 0.0F); + GL11.glRotatef(180f, 0f, 0f, 1f); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile + "Furnace.png")); + modelFurnace.genRender(0.0625F); + GL11.glPopMatrix(); + } + } + + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) + { + return false; + } + + public boolean shouldRender3DInInventory() + { + + return true; + } + + public int getRenderId() + { + return renderID; + } +} diff --git a/src/dark/mech/steam/SteamClientProxy.java b/src/dark/mech/steam/SteamClientProxy.java new file mode 100644 index 00000000..3bef6e1d --- /dev/null +++ b/src/dark/mech/steam/SteamClientProxy.java @@ -0,0 +1,35 @@ +package dark.mech.steam; + +import net.minecraftforge.client.MinecraftForgeClient; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import dark.mech.steam.boiler.TileEntityBoiler; +import dark.mech.steam.firebox.TileEntityFireBox; +import dark.mech.steam.renders.RenderBoiler; +import dark.mech.steam.renders.RenderFurnace; +import dark.mech.steam.renders.RenderGearPiston; +import dark.mech.steam.renders.RenderGenerator; +import dark.mech.steam.steamengine.TileEntitySteamPiston; + +public class SteamClientProxy extends SteamProxy +{ + + public void preInit() + { + RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); + } + + @Override + public void init() + { + ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); + ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); + } + + public void postInit() + { + + } + +} diff --git a/src/minecraft/SteamPower/SteamPowerMain.java b/src/dark/mech/steam/SteamPowerMain.java similarity index 67% rename from src/minecraft/SteamPower/SteamPowerMain.java rename to src/dark/mech/steam/SteamPowerMain.java index 623d759e..06c91938 100644 --- a/src/minecraft/SteamPower/SteamPowerMain.java +++ b/src/dark/mech/steam/SteamPowerMain.java @@ -1,104 +1,94 @@ -package dark.SteamPower; - -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraftforge.common.Configuration; -import net.minecraftforge.oredict.ShapedOreRecipe; -import universalelectricity.prefab.network.PacketManager; -import cpw.mods.fml.common.Mod; -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.SidedProxy; -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.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; -import dark.BasicUtilities.BasicUtilitiesMain; -import dark.SteamPower.boiler.BlockBoiler; -import dark.SteamPower.firebox.BlockHeaters; -import dark.SteamPower.steamengine.BlockSteamPiston; -import dark.SteamPower.steamengine.ItemSteamPiston; - -@Mod(modid = "SteamPower", name = "Steam Power", version = "0.2.3", dependencies = "after:basicPipes") -@NetworkMod(channels = - { SteamPowerMain.channel }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPowerMain -{ - static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); - public static final String channel = "SPpack"; - public static String textureFile = "/dark/SteamPower/textures/"; - public final static int BLOCK_ID_PREFIX = 3100; - // Blocks and items - public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", BLOCK_ID_PREFIX).value)).setBlockName("machine"); - public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", BLOCK_ID_PREFIX+1).value)).setBlockName("SteamEngien"); - public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", BLOCK_ID_PREFIX+2).value)).setBlockName("machine"); - public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "SteamPistonItem", 30308).value)).setItemName("SteamEngine"); - - public static SteamPowerMain instance; - - @SidedProxy(clientSide = "dark.SteamPower.SteamClientProxy", serverSide = "dark.SteamPower.SteamProxy") - public static SteamProxy proxy; - // extra configs - public static int steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); - public static int boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); - public static int fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); - - @PreInit - public void preInit(FMLPreInitializationEvent event) - { - instance = this; - NetworkRegistry.instance().registerGuiHandler(this, this.proxy); - - proxy.preInit(); - - GameRegistry.registerBlock(heaters,"heater units"); - GameRegistry.registerBlock(piston,"steam piston"); - GameRegistry.registerBlock(boilers,"boiler tanks"); - } - - @Init - public void load(FMLInitializationEvent evt) - { - proxy.init(); - - // Burner Names - - LanguageRegistry.addName((new ItemStack(heaters, 1, 0)), BlockHeaters.Burners.values()[0].name); - // Boiler Names - LanguageRegistry.addName((new ItemStack(boilers, 1, 0)), BlockBoiler.Boilers.values()[0].name); - // Steam Piston Name - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "Steam Piston"); - - } - - @PostInit - public void postInit(FMLPostInitializationEvent event) - { - proxy.postInit(); - - // Boiler basic - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(boilers, 1, 0), new Object[] - { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); - // Burner Coal - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(heaters, 1, 0), new Object[] - { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); - // SteamPiston - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] - { "GGG", "VPV", "@T@", - 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), - 'G', BasicUtilitiesMain.rod, '@', "plateSteel", - 'P', Block.pistonBase, - 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), - 'M', "motor" })); - - } - -} +package dark.mech.steam; + +import java.io.File; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraftforge.common.Configuration; +import net.minecraftforge.oredict.ShapedOreRecipe; +import universalelectricity.prefab.network.PacketManager; +import cpw.mods.fml.common.Mod; +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.SidedProxy; +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.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.common.registry.LanguageRegistry; +import dark.mech.steam.boiler.BlockBoiler; +import dark.mech.steam.firebox.BlockHeaters; +import dark.mech.steam.steamengine.BlockSteamPiston; +import dark.mech.steam.steamengine.ItemSteamPiston; + +@Mod(modid = "SteamPower", name = "Steam Power", version = "0.2.3", dependencies = "after:basicPipes") +@NetworkMod(channels = { SteamPowerMain.channel }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +public class SteamPowerMain +{ + public static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); + public static final String channel = "SPpack"; + public static String textureFile = "/dark/SteamPower/textures/"; + public final static int BLOCK_ID_PREFIX = 3100; + // Blocks and items + public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", BLOCK_ID_PREFIX).value)).setBlockName("machine"); + public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", BLOCK_ID_PREFIX + 1).value)).setBlockName("SteamEngien"); + public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", BLOCK_ID_PREFIX + 2).value)).setBlockName("machine"); + public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "SteamPistonItem", 30308).value)).setItemName("SteamEngine"); + + public static SteamPowerMain instance; + + @SidedProxy(clientSide = "dark.SteamPower.SteamClientProxy", serverSide = "dark.SteamPower.SteamProxy") + public static SteamProxy proxy; + // extra configs + public static int steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); + public static int boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); + public static int fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); + + @PreInit + public void preInit(FMLPreInitializationEvent event) + { + instance = this; + NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + + proxy.preInit(); + + GameRegistry.registerBlock(heaters, "heater units"); + GameRegistry.registerBlock(piston, "steam piston"); + GameRegistry.registerBlock(boilers, "boiler tanks"); + } + + @Init + public void load(FMLInitializationEvent evt) + { + proxy.init(); + + // Burner Names + + LanguageRegistry.addName((new ItemStack(heaters, 1, 0)), BlockHeaters.Burners.values()[0].name); + // Boiler Names + LanguageRegistry.addName((new ItemStack(boilers, 1, 0)), BlockBoiler.Boilers.values()[0].name); + // Steam Piston Name + LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "Steam Piston"); + + } + + @PostInit + public void postInit(FMLPostInitializationEvent event) + { + proxy.postInit(); + + // Boiler basic + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(boilers, 1, 0), new Object[] { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); + // Burner Coal + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(heaters, 1, 0), new Object[] { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); + // SteamPiston + CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] { "GGG", "VPV", "@T@", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), 'G', BasicUtilitiesMain.rod, '@', "plateSteel", 'P', Block.pistonBase, 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), 'M', "motor" })); + + } + +} diff --git a/src/dark/mech/steam/SteamProxy.java b/src/dark/mech/steam/SteamProxy.java new file mode 100644 index 00000000..45145fb8 --- /dev/null +++ b/src/dark/mech/steam/SteamProxy.java @@ -0,0 +1,71 @@ +package dark.mech.steam; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import dark.mech.steam.boiler.TileEntityBoiler; +import dark.mech.steam.firebox.ContainerFireBox; +import dark.mech.steam.firebox.GUIFireBox; +import dark.mech.steam.firebox.TileEntityFireBox; +import dark.mech.steam.steamengine.TileEntitySteamPiston; + +public class SteamProxy implements IGuiHandler +{ + + public void preInit() + { + + } + + public void init() + { + GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); + GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); + + } + + 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) + { + case 0: + return new GUIFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); + //case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); + //case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); + } + } + + 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) + { + case 0: + return new ContainerFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); + //default: return new ContainerFake(player.inventory, (IInventory) tileEntity); + } + } + + return null; + } +} diff --git a/src/dark/mech/steam/boiler/BlockBoiler.java b/src/dark/mech/steam/boiler/BlockBoiler.java new file mode 100644 index 00000000..10dbc45e --- /dev/null +++ b/src/dark/mech/steam/boiler/BlockBoiler.java @@ -0,0 +1,61 @@ +package dark.mech.steam.boiler; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import dark.core.blocks.BlockMachine; +import dark.mech.steam.ItemRenderHelperS; +import dark.mech.steam.SteamPowerMain; + +public class BlockBoiler extends BlockMachine +{ + + public BlockBoiler(int par1) + { + super("Boilers", SteamPowerMain.config, par1, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setHardness(1f); + this.setResistance(3f); + } + + @Override + public int damageDropped(int metadata) + { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World var1) + { + return new TileEntityBoiler(); + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return ItemRenderHelperS.renderID; + } + + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(par1, 1, 0)); + } +} diff --git a/src/dark/mech/steam/boiler/TileEntityBoiler.java b/src/dark/mech/steam/boiler/TileEntityBoiler.java new file mode 100644 index 00000000..96a71f92 --- /dev/null +++ b/src/dark/mech/steam/boiler/TileEntityBoiler.java @@ -0,0 +1,16 @@ +package dark.mech.steam.boiler; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.liquids.ILiquidTank; +import net.minecraftforge.liquids.ITankContainer; +import net.minecraftforge.liquids.LiquidContainerRegistry; +import net.minecraftforge.liquids.LiquidStack; +import net.minecraftforge.liquids.LiquidTank; + +public class TileEntityBoiler extends TileEntity +{ + +} diff --git a/src/minecraft/SteamPower/firebox/BlockHeaters.java b/src/dark/mech/steam/firebox/BlockHeaters.java similarity index 77% rename from src/minecraft/SteamPower/firebox/BlockHeaters.java rename to src/dark/mech/steam/firebox/BlockHeaters.java index 1117cd22..97a7fe4f 100644 --- a/src/minecraft/SteamPower/firebox/BlockHeaters.java +++ b/src/dark/mech/steam/firebox/BlockHeaters.java @@ -1,128 +1,122 @@ -package dark.SteamPower.firebox; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import dark.Library.Util.MetaGroupingHelper; -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.ItemRenderHelperS; -import dark.SteamPower.SteamPowerMain; - -public class BlockHeaters extends universalelectricity.prefab.BlockMachine -{ - /** - * Quick enum to help sort out meta data info - */ - public enum Burners - { - Coal("FireBox", TileEntityFireBox.class, 0), - Liquid("LiquidBurner", TileEntityLiquidBurner.class, -1), - Lava("LavaBuffer", TileEntityLavaBuffer.class, -1), - Bio("BioFurnace", null, -1); - - public String name; - public Class ent; - public int gui; - - private Burners(String name, Class tileEntity, int gui) - { - this.name = name; - this.gui = gui; - this.ent = tileEntity; - } - } - - public BlockHeaters(int par1) - { - super("machine", par1, Material.iron); - this.setRequiresSelfNotify(); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(1f); - this.setResistance(3f); - } - - @Override - public int damageDropped(int metadata) - { - return MetaGroupingHelper.getGroupStartMeta(MetaGroupingHelper.getGrouping(metadata)); - } - - /** - * Called upon block activation (left or right click on the block.). The - * three integers represent x,y,z of the block. - */ - @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) - { - TileEntity blockEntity = (TileEntity) world.getBlockTileEntity(x, y, z); - if (!world.isRemote && !player.isSneaking() && blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox) world.getBlockTileEntity(x, y, z); - player.openGui(SteamPowerMain.instance, 0, world, x, y, z); - return true; - } - - return false; - } - - @Override - public TileEntity createNewTileEntity(World var1, int meta) - { - try - { - return Burners.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - - /** - * Called when the block is placed in the world. - */ - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) - { - int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = world.getBlockMetadata(x, y, z); - TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); - - if (ent instanceof TileEntityFireBox) - { - world.setBlockMetadata(x, y, z, angle); - } - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(par1, 1, 0)); - } -} +package dark.mech.steam.firebox; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import dark.core.blocks.BlockMachine; +import dark.core.blocks.TileEntityMachine; +import dark.core.helpers.MetaGroup; +import dark.mech.steam.ItemRenderHelperS; +import dark.mech.steam.SteamPowerMain; + +public class BlockHeaters extends BlockMachine +{ + /** Quick enum to help sort out meta data info */ + public enum Burners + { + Coal("FireBox", TileEntityFireBox.class, 0), + Liquid("LiquidBurner", TileEntityLiquidBurner.class, -1), + Lava("LavaBuffer", TileEntityLavaBuffer.class, -1), + Bio("BioFurnace", null, -1); + + public String name; + public Class ent; + public int gui; + + private Burners(String name, Class tileEntity, int gui) + { + this.name = name; + this.gui = gui; + this.ent = tileEntity; + } + } + + public BlockHeaters(int par1) + { + super("machine", SteamPowerMain.config, par1, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + this.setHardness(1f); + this.setResistance(3f); + } + + @Override + public int damageDropped(int metadata) + { + return MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(metadata)); + } + + /** Called upon block activation (left or right click on the block.). The three integers + * represent x,y,z of the block. */ + @Override + public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) + { + TileEntity blockEntity = (TileEntity) world.getBlockTileEntity(x, y, z); + if (!world.isRemote && !player.isSneaking() && blockEntity instanceof TileEntityFireBox) + { + TileEntity var6 = (TileEntityFireBox) world.getBlockTileEntity(x, y, z); + player.openGui(SteamPowerMain.instance, 0, world, x, y, z); + return true; + } + + return false; + } + + @Override + public TileEntity createNewTileEntity(World var1, int meta) + { + try + { + return Burners.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); + } + catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + /** Called when the block is placed in the world. */ + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) + { + int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = world.getBlockMetadata(x, y, z); + TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); + + if (ent instanceof TileEntityFireBox) + { + world.setBlockMetadata(x, y, z, angle); + } + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return ItemRenderHelperS.renderID; + } + + @Override + public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) + { + par3List.add(new ItemStack(par1, 1, 0)); + } +} diff --git a/src/minecraft/SteamPower/firebox/ContainerFireBox.java b/src/dark/mech/steam/firebox/ContainerFireBox.java similarity index 79% rename from src/minecraft/SteamPower/firebox/ContainerFireBox.java rename to src/dark/mech/steam/firebox/ContainerFireBox.java index 39d6bea6..d1aaeb53 100644 --- a/src/minecraft/SteamPower/firebox/ContainerFireBox.java +++ b/src/dark/mech/steam/firebox/ContainerFireBox.java @@ -1,46 +1,45 @@ -package dark.SteamPower.firebox; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** - * Called to transfer a stack from one inventory to the other eg. when shift clicking. - */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} +package dark.mech.steam.firebox; + +import java.awt.Container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerFireBox extends Container +{ + private TileEntityFireBox tileEntity; + + public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + this.tileEntity = tileEntity; + this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); + int var3; + + for (var3 = 0; var3 < 3; ++var3) + { + for (int var4 = 0; var4 < 9; ++var4) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for (var3 = 0; var3 < 9; ++var3) + { + this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); + } + } + + public boolean canInteractWith(EntityPlayer par1EntityPlayer) + { + return this.tileEntity.isUseableByPlayer(par1EntityPlayer); + } + + /** Called to transfer a stack from one inventory to the other eg. when shift clicking. */ + public ItemStack transferStackInSlot(int par1) + { + + return null; + } +} diff --git a/src/minecraft/SteamPower/firebox/GUIFireBox.java b/src/dark/mech/steam/firebox/GUIFireBox.java similarity index 51% rename from src/minecraft/SteamPower/firebox/GUIFireBox.java rename to src/dark/mech/steam/firebox/GUIFireBox.java index fb1e6de7..a1800bb3 100644 --- a/src/minecraft/SteamPower/firebox/GUIFireBox.java +++ b/src/dark/mech/steam/firebox/GUIFireBox.java @@ -1,93 +1,89 @@ -package dark.SteamPower.firebox; - -import java.text.DecimalFormat; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.item.Item; -import net.minecraft.util.StatCollector; - -import org.lwjgl.opengl.GL11; - -import dark.SteamPower.SteamPowerMain; - -public class GUIFireBox extends GuiContainer -{ - private TileEntityFireBox tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** - * Draw the foreground layer for the GuiContainer (everything in front of the items) - */ - @Override - protected void drawGuiContainerForegroundLayer(int par1, int par2) - { - this.fontRenderer.drawString("FireBox", 55, 6, 4210752); - this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); - String displayText = ""; - if(!tileEntity.isConnected) - { - displayText = "No Boiler"; - } - else if(tileEntity.storedItems[0] != null) - { - if(tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) - { - displayText = "No Fuel"; - } - else{ - if(tileEntity.generateRate*20 < 20) - { - displayText = "Hull Heat: "+(tileEntity.generateRate*100)+"%"; - } - else - { - displayText = getWattDisplay((tileEntity.generateRate*20)); - } - } - } - this.fontRenderer.drawString(displayText, (int)(105-displayText.length()*1.25), 45, 4210752); - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** - * Draw the background layer for the GuiContainer (everything behind the items) - */ - @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(SteamPowerMain.textureFile+"SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - public static String getWattDisplay(int watts) - { - String displayWatt; - if(watts > 1000) - { - displayWatt = roundTwoDecimals((double)watts/1000)+" MJ"; - } - else - { - displayWatt = watts+" KJ"; - } - - return displayWatt; - } - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} +package dark.mech.steam.firebox; + +import java.text.DecimalFormat; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +public class GUIFireBox extends GuiContainer +{ + private TileEntityFireBox tileEntity; + + private int containerWidth; + private int containerHeight; + + public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) + { + super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); + this.tileEntity = tileEntity; + } + + /** Draw the foreground layer for the GuiContainer (everything in front of the items) */ + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) + { + this.fontRenderer.drawString("FireBox", 55, 6, 4210752); + this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); + String displayText = ""; + if (!tileEntity.isConnected) + { + displayText = "No Boiler"; + } + else if (tileEntity.storedItems[0] != null) + { + if (tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) + { + displayText = "No Fuel"; + } + else + { + if (tileEntity.generateRate * 20 < 20) + { + displayText = "Hull Heat: " + (tileEntity.generateRate * 100) + "%"; + } + else + { + displayText = getWattDisplay((tileEntity.generateRate * 20)); + } + } + } + this.fontRenderer.drawString(displayText, (int) (105 - displayText.length() * 1.25), 45, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + /** Draw the background layer for the GuiContainer (everything behind the items) */ + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + { + int var4 = this.mc.renderEngine.getTexture(dark.mech.steam + "SteamGUI.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var4); + containerWidth = (this.width - this.xSize) / 2; + containerHeight = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); + } + + public static String getWattDisplay(int watts) + { + String displayWatt; + if (watts > 1000) + { + displayWatt = roundTwoDecimals((double) watts / 1000) + " MJ"; + } + else + { + displayWatt = watts + " KJ"; + } + + return displayWatt; + } + + public static double roundTwoDecimals(double d) + { + DecimalFormat twoDForm = new DecimalFormat("#.##"); + return Double.valueOf(twoDForm.format(d)); + } +} diff --git a/src/minecraft/SteamPower/firebox/TileEntityFireBox.java b/src/dark/mech/steam/firebox/TileEntityFireBox.java similarity index 84% rename from src/minecraft/SteamPower/firebox/TileEntityFireBox.java rename to src/dark/mech/steam/firebox/TileEntityFireBox.java index 6f437c9b..49a69b48 100644 --- a/src/minecraft/SteamPower/firebox/TileEntityFireBox.java +++ b/src/dark/mech/steam/firebox/TileEntityFireBox.java @@ -1,254 +1,247 @@ -package dark.SteamPower.firebox; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.INetworkManager; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.common.ISidedInventory; -import universalelectricity.prefab.network.IPacketReceiver; - -import com.google.common.io.ByteArrayDataInput; - -import dark.BasicUtilities.api.IHeatCreator; -import dark.BasicUtilities.api.MHelper; -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.SteamPowerMain; -import dark.SteamPower.boiler.TileEntityBoiler; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IHeatCreator -{ - // max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = - { null, null, null, null, null, null }; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - - public void updateEntity() - { - super.updateEntity(); - if (count++ >= 10) - { - count = 0; - addConnection(); - if (!worldObj.isRemote) - { - sharCoal(); - } - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if (blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - if (!this.worldObj.isRemote) - { - - maxGenerateRate = SteamPowerMain.fireOutput + (connectedUnits * 10); - - // The top slot is for recharging items. Check if the item is a - // electric item. If so, recharge it. - if (this.storedItems[0] != null && isConnected) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if (this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int) (this.generateRate * 20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - // Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime--; - if (isConnected) - { - this.generateRate = Math.min(this.generateRate + Math.min((this.generateRate) + 1, 1), this.maxGenerateRate / 10); - } - } - // Loose heat when the generator is not connected or if there is no - // coal in the inventory. - if (this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate - 5, 0); - } - } - } - - // gets all connected fireBoxes and shares its supply of coal - public void sharCoal() - { - for (int i = 0; i < 6; i++) - { - - if (connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if (this.storedItems[0] != null) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) - { - if (connectedConsumer.storedItems[0] != null) - { - if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize) / 2; - if (this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); - connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; - this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(), 1, this.storedItems[0].getItemDamage()); - this.storedItems[0].stackSize -= 1; - } - } - } - } - } - - } - - public void addConnection() - { - connectedUnits = 0; - TileEntity[] aEntity = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); - for (int i = 0; i < 6; i++) - { - - if (aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity[i]; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - - /** - * Reads a tile entity from NBT. - */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int) this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int) this.generateRate); - } - - @Override - public String getInvName() - { - return "FireBox"; - } - - public float onProduceHeat(float jouls, ForgeDirection side) - { - if (side == ForgeDirection.UP) { return Math.min(generateRate, jouls); } - return 0; - } - - @Override - public Object[] getSendData() - { - return new Object[] - { (int) generateRate, (int) itemCookTime }; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) - { - try - { - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch (Exception e) - { - e.printStackTrace(); - } - - } - - @Override - public int getStartInventorySide(ForgeDirection side) - { - return 0; - } - - @Override - public int getSizeInventorySide(ForgeDirection side) - { - return 1; - } - - @Override - public String getChannel() - { - return SteamPowerMain.channel; - } - - @Override - public int getSizeInventory() - { - return 1; - } - - @Override - public boolean needUpdate() - { - return true; - } - - @Override - public boolean canCreatHeat(ForgeDirection dir) - { - if(dir == ForgeDirection.UP) return true; - return false; - } - - @Override - public int createHeat(ForgeDirection dir) - { - if(dir == ForgeDirection.UP) return this.generateRate; - return 0; - } -} +package dark.mech.steam.firebox; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; +import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import universalelectricity.prefab.network.IPacketReceiver; + +import com.google.common.io.ByteArrayDataInput; + +import dark.core.blocks.TileEntityMachine; +import dark.mech.steam.boiler.TileEntityBoiler; + +public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IHeatCreator +{ + // max heat generated per second + + public boolean isConnected = false; + public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; + private int connectedUnits = 0; + public static int maxGenerateRate = 250; + public int generateRate = 0; + int count = 0; + public int itemCookTime = 0; + + public void updateEntity() + { + super.updateEntity(); + if (count++ >= 10) + { + count = 0; + addConnection(); + if (!worldObj.isRemote) + { + sharCoal(); + } + TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); + if (blockEntity instanceof TileEntityBoiler) + { + isConnected = true; + } + else + { + isConnected = false; + } + if (!this.worldObj.isRemote) + { + + maxGenerateRate = dark.mech.steam + (connectedUnits * 10); + + // The top slot is for recharging items. Check if the item is a + // electric item. If so, recharge it. + if (this.storedItems[0] != null && isConnected) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if (this.itemCookTime <= 0) + { + itemCookTime = Math.max(1600 - (int) (this.generateRate * 20), 400); + this.decrStackSize(0, 1); + } + } + } + + } + // Starts generating electricity if the device is heated up + if (this.itemCookTime > 0) + { + this.itemCookTime--; + if (isConnected) + { + this.generateRate = Math.min(this.generateRate + Math.min((this.generateRate) + 1, 1), this.maxGenerateRate / 10); + } + } + // Loose heat when the generator is not connected or if there is no + // coal in the inventory. + if (this.itemCookTime <= 0 || !isConnected) + { + this.generateRate = Math.max(this.generateRate - 5, 0); + } + } + } + + // gets all connected fireBoxes and shares its supply of coal + public void sharCoal() + { + for (int i = 0; i < 6; i++) + { + + if (connectedBlocks[i] instanceof TileEntityFireBox) + { + TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; + if (this.storedItems[0] != null) + { + if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) + { + if (connectedConsumer.storedItems[0] != null) + { + if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) + { + int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize) / 2; + if (this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) + { + int transferC = 0; + transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); + connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; + this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; + } + } + } + } + else + { + connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(), 1, this.storedItems[0].getItemDamage()); + this.storedItems[0].stackSize -= 1; + } + } + } + } + } + + } + + public void addConnection() + { + connectedUnits = 0; + TileEntity[] aEntity = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); + for (int i = 0; i < 6; i++) + { + + if (aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) + { + this.connectedBlocks[i] = aEntity[i]; + connectedUnits += 1; + } + else + { + this.connectedBlocks[i] = null; + } + } + } + + /** Reads a tile entity from NBT. */ + public void readFromNBT(NBTTagCompound par1NBTTagCompound) + { + super.readFromNBT(par1NBTTagCompound); + this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); + this.generateRate = par1NBTTagCompound.getInteger("generateRate"); + } + + /** Writes a tile entity to NBT. */ + public void writeToNBT(NBTTagCompound par1NBTTagCompound) + { + super.writeToNBT(par1NBTTagCompound); + par1NBTTagCompound.setInteger("itemCookTime", (int) this.itemCookTime); + par1NBTTagCompound.setInteger("generateRate", (int) this.generateRate); + } + + @Override + public String getInvName() + { + return "FireBox"; + } + + public float onProduceHeat(float jouls, ForgeDirection side) + { + if (side == ForgeDirection.UP) + { + return Math.min(generateRate, jouls); + } + return 0; + } + + @Override + public Object[] getSendData() + { + return new Object[] { (int) generateRate, (int) itemCookTime }; + } + + @Override + public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) + { + try + { + generateRate = dataStream.readInt(); + itemCookTime = dataStream.readInt(); + } + catch (Exception e) + { + e.printStackTrace(); + } + + } + + @Override + public int getStartInventorySide(ForgeDirection side) + { + return 0; + } + + @Override + public int getSizeInventorySide(ForgeDirection side) + { + return 1; + } + + @Override + public String getChannel() + { + return dark.mech.steam; + } + + @Override + public int getSizeInventory() + { + return 1; + } + + @Override + public boolean needUpdate() + { + return true; + } + + @Override + public boolean canCreatHeat(ForgeDirection dir) + { + if (dir == ForgeDirection.UP) + return true; + return false; + } + + @Override + public int createHeat(ForgeDirection dir) + { + if (dir == ForgeDirection.UP) + return this.generateRate; + return 0; + } +} diff --git a/src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java b/src/dark/mech/steam/firebox/TileEntityLavaBuffer.java similarity index 71% rename from src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java rename to src/dark/mech/steam/firebox/TileEntityLavaBuffer.java index 7710f620..6c2b441b 100644 --- a/src/minecraft/SteamPower/firebox/TileEntityLavaBuffer.java +++ b/src/dark/mech/steam/firebox/TileEntityLavaBuffer.java @@ -1,8 +1,8 @@ -package dark.SteamPower.firebox; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityLavaBuffer extends TileEntity -{ - -} +package dark.mech.steam.firebox; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityLavaBuffer extends TileEntity +{ + +} diff --git a/src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java b/src/dark/mech/steam/firebox/TileEntityLiquidBurner.java similarity index 72% rename from src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java rename to src/dark/mech/steam/firebox/TileEntityLiquidBurner.java index d8a1651d..91b71e5b 100644 --- a/src/minecraft/SteamPower/firebox/TileEntityLiquidBurner.java +++ b/src/dark/mech/steam/firebox/TileEntityLiquidBurner.java @@ -1,8 +1,8 @@ -package dark.SteamPower.firebox; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityLiquidBurner extends TileEntity -{ - -} +package dark.mech.steam.firebox; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityLiquidBurner extends TileEntity +{ + +} diff --git a/src/dark/mech/steam/renders/ModelCenterTank.java b/src/dark/mech/steam/renders/ModelCenterTank.java new file mode 100644 index 00000000..968f8b30 --- /dev/null +++ b/src/dark/mech/steam/renders/ModelCenterTank.java @@ -0,0 +1,42 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelCenterTank extends ModelBase +{ + + ModelRenderer Block; + + public ModelCenterTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + //block + Block = new ModelRenderer(this, 0, 0); + Block.addBox(0F, 0F, 0F, 16, 16, 16); + Block.setRotationPoint(-8F, 8F, -8F); + Block.setTextureSize(128, 32); + Block.mirror = true; + setRotation(Block, 0F, 0F, 0F); + } + + public void renderBlock(float f5) + { + Block.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/dark/mech/steam/renders/ModelCornerTank.java b/src/dark/mech/steam/renders/ModelCornerTank.java new file mode 100644 index 00000000..ffd4e2a5 --- /dev/null +++ b/src/dark/mech/steam/renders/ModelCornerTank.java @@ -0,0 +1,83 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelCornerTank extends ModelBase +{ + //Corner + ModelRenderer Shape1; + ModelRenderer Shape2; + ModelRenderer Shape3; + ModelRenderer Shape6; + ModelRenderer Shape7; + ModelRenderer Shape4; + + public ModelCornerTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + //corner + Shape1 = new ModelRenderer(this, 0, 1); + Shape1.addBox(0F, 0F, 0F, 1, 16, 20); + Shape1.setRotationPoint(7F, 8F, -7F); + Shape1.setTextureSize(128, 128); + Shape1.mirror = true; + setRotation(Shape1, 0F, -0.7853982F, 0F); + Shape2 = new ModelRenderer(this, 44, 0); + Shape2.addBox(0F, 0F, 0F, 2, 16, 2); + Shape2.setRotationPoint(-8F, 8F, 6F); + Shape2.setTextureSize(128, 128); + Shape2.mirror = true; + setRotation(Shape2, 0F, 0F, 0F); + Shape3 = new ModelRenderer(this, 44, 0); + Shape3.addBox(0F, 0F, 0F, 2, 16, 2); + Shape3.setRotationPoint(6F, 8F, -8F); + Shape3.setTextureSize(128, 128); + Shape3.mirror = true; + setRotation(Shape3, 0F, 0F, 0F); + Shape6 = new ModelRenderer(this, 0, 44); + Shape6.addBox(0F, 0F, 0F, 1, 15, 13); + Shape6.setRotationPoint(-8F, 9F, -7F); + Shape6.setTextureSize(128, 128); + Shape6.mirror = true; + setRotation(Shape6, 0F, 0F, 0F); + Shape7 = new ModelRenderer(this, 0, 73); + Shape7.addBox(0F, 0F, 0F, 14, 15, 1); + Shape7.setRotationPoint(-8F, 9F, -8F); + Shape7.setTextureSize(128, 128); + Shape7.mirror = true; + setRotation(Shape7, 0F, 0F, 0F); + Shape4 = new ModelRenderer(this, 0, 92); + Shape4.addBox(0F, 0F, 0F, 16, 1, 16); + Shape4.setRotationPoint(-8F, 8F, -8F); + Shape4.setTextureSize(128, 128); + Shape4.mirror = true; + setRotation(Shape4, 0F, 0F, 0F); + } + + public void renderCorner(float f5) + { + Shape1.render(f5); + Shape2.render(f5); + Shape3.render(f5); + Shape6.render(f5); + Shape7.render(f5); + Shape4.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/dark/mech/steam/renders/ModelEngine.java b/src/dark/mech/steam/renders/ModelEngine.java new file mode 100644 index 00000000..18571ec0 --- /dev/null +++ b/src/dark/mech/steam/renders/ModelEngine.java @@ -0,0 +1,99 @@ +// Date: 8/24/2012 1:44:37 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelEngine extends ModelBase +{ + //fields + ModelRenderer Base; + ModelRenderer top; + ModelRenderer TopPiston; + ModelRenderer BottomPiston; + ModelRenderer center; + ModelRenderer C1; + ModelRenderer C2; + + public ModelEngine() + { + textureWidth = 64; + textureHeight = 64; + + Base = new ModelRenderer(this, 0, 20); + Base.addBox(-6F, 0F, -6F, 12, 8, 12); + Base.setRotationPoint(0F, 16F, 0F); + Base.setTextureSize(64, 64); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + top = new ModelRenderer(this, 0, 0); + top.addBox(-6F, 0F, -6F, 12, 8, 12); + top.setRotationPoint(0F, -8F, 0F); + top.setTextureSize(64, 64); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + TopPiston = new ModelRenderer(this, 0, 52); + TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + TopPiston.setRotationPoint(0F, 0F, 0F); + TopPiston.setTextureSize(64, 64); + TopPiston.mirror = true; + setRotation(TopPiston, 0F, 0F, 0F); + BottomPiston = new ModelRenderer(this, 16, 52); + BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); + BottomPiston.setRotationPoint(0F, 8F, 0F); + BottomPiston.setTextureSize(64, 64); + BottomPiston.mirror = true; + setRotation(BottomPiston, 0F, 0F, 0F); + center = new ModelRenderer(this, 32, 52); + center.addBox(-3F, 0F, -3F, 6, 6, 6); + //center.setRotationPoint(0F, 5F, 0F); + center.setTextureSize(64, 64); + center.mirror = true; + setRotation(center, 0F, 0F, 0F); + C1 = new ModelRenderer(this, 0, 41); + C1.addBox(-2F, -3F, 0F, 4, 6, 3); + C1.setRotationPoint(0F, 8F, 3F); + C1.setTextureSize(64, 64); + C1.mirror = true; + setRotation(C1, 0F, 0F, 0F); + C2 = new ModelRenderer(this, 15, 41); + C2.addBox(-2F, -3F, -3F, 4, 6, 3); + C2.setRotationPoint(0F, 8F, -3F); + C2.setTextureSize(64, 64); + C2.mirror = true; + setRotation(C2, 0F, 0F, 0F); + } + + public void renderBot(float f5) + { + Base.render(f5); + BottomPiston.render(f5); + } + + public void renderTop(float f5) + { + top.render(f5); + TopPiston.render(f5); + C1.render(f5); + C2.render(f5); + } + + public void renderMid(float f5, float p) + { + + center.setRotationPoint(0F, p, 0F); + center.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/dark/mech/steam/renders/ModelFurnace.java b/src/dark/mech/steam/renders/ModelFurnace.java new file mode 100644 index 00000000..190ffca5 --- /dev/null +++ b/src/dark/mech/steam/renders/ModelFurnace.java @@ -0,0 +1,66 @@ +// Date: 8/14/2012 3:02:31 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelFurnace extends ModelBase +{ + //fields + ModelRenderer Body; + ModelRenderer top; + ModelRenderer bottom; + ModelRenderer Shape1; + + public ModelFurnace() + { + textureWidth = 256; + textureHeight = 256; + + Body = new ModelRenderer(this, 0, 0); + Body.addBox(-8F, -8F, -8F, 14, 14, 12); + Body.setRotationPoint(1F, 18F, 1F); + Body.setTextureSize(64, 32); + Body.mirror = true; + setRotation(Body, 0F, 0F, 0F); + top = new ModelRenderer(this, 80, 20); + top.addBox(-8F, 0F, -8F, 16, 2, 16); + top.setRotationPoint(0F, 8F, 0F); + top.setTextureSize(64, 32); + top.mirror = true; + setRotation(top, 0F, 0F, 0F); + bottom = new ModelRenderer(this, 80, 0); + bottom.addBox(-8F, 22F, -8F, 16, 2, 16); + bottom.setRotationPoint(0F, 0F, 0F); + bottom.setTextureSize(64, 32); + bottom.mirror = true; + setRotation(bottom, 0F, 0F, 0F); + Shape1 = new ModelRenderer(this, 0, 27); + Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); + Shape1.setRotationPoint(-1F, 16F, 5F); + Shape1.setTextureSize(64, 32); + Shape1.mirror = true; + setRotation(Shape1, 0F, 0F, 0F); + } + + public void genRender(float f5) + { + Body.render(f5); + top.render(f5); + bottom.render(f5); + Shape1.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/dark/mech/steam/renders/ModelGearPiston.java b/src/dark/mech/steam/renders/ModelGearPiston.java new file mode 100644 index 00000000..3e18162d --- /dev/null +++ b/src/dark/mech/steam/renders/ModelGearPiston.java @@ -0,0 +1,383 @@ +// Date: 10/1/2012 12:32:21 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelGearPiston extends ModelBase +{ + //fields + ModelRenderer PistonCover; + ModelRenderer RSpiston; + ModelRenderer LSpiston; + ModelRenderer RodPiston; + ModelRenderer Base; + ModelRenderer Front; + ModelRenderer BackCC; + ModelRenderer RightPipe; + ModelRenderer FrontCC; + ModelRenderer LeftCC; + ModelRenderer FrontPipe; + ModelRenderer Right; + ModelRenderer RightCC; + ModelRenderer Back; + ModelRenderer BackPipe; + ModelRenderer Left; + ModelRenderer LeftPipe; + ModelRenderer RigthF4; + ModelRenderer LeftF4; + ModelRenderer LeftF3; + ModelRenderer LeftF2; + ModelRenderer LeftF1; + ModelRenderer RigthF3; + ModelRenderer RigthF2; + ModelRenderer RigthF1; + ModelRenderer RigthGCC; + ModelRenderer RightSlide; + ModelRenderer midRod; + ModelRenderer RightRod2; + ModelRenderer LeftGCC; + ModelRenderer LeftRod2; + ModelRenderer LeftSlide2; + + public ModelGearPiston() + { + textureWidth = 128; + textureHeight = 128; + + PistonCover = new ModelRenderer(this, 13, 31); + PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); + PistonCover.setRotationPoint(-3F, 20F, 0F); + PistonCover.setTextureSize(128, 128); + PistonCover.mirror = true; + setRotation(PistonCover, 0F, 0F, 0F); + RSpiston = new ModelRenderer(this, 0, 32); + RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); + RSpiston.setRotationPoint(1F, 3F, 0F); + RSpiston.setTextureSize(128, 128); + RSpiston.mirror = true; + setRotation(RSpiston, 0F, 0F, 0F); + LSpiston = new ModelRenderer(this, 0, 32); + LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); + LSpiston.setRotationPoint(2F, 3F, 0F); + LSpiston.setTextureSize(128, 128); + LSpiston.mirror = true; + setRotation(LSpiston, 0F, 0F, 0F); + RodPiston = new ModelRenderer(this, 0, 59); + RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); + RodPiston.setRotationPoint(0F, 8F, 0F); + RodPiston.setTextureSize(128, 128); + RodPiston.mirror = true; + setRotation(RodPiston, 0F, 0F, 0F); + Base = new ModelRenderer(this, 12, 49); + Base.addBox(0F, 0F, 0F, 10, 5, 10); + Base.setRotationPoint(-5F, 19F, -5F); + Base.setTextureSize(128, 128); + Base.mirror = true; + setRotation(Base, 0F, 0F, 0F); + Front = new ModelRenderer(this, 28, 68); + Front.addBox(-3F, 0F, 0F, 6, 12, 1); + Front.setRotationPoint(0F, 12F, -7F); + Front.setTextureSize(128, 128); + Front.mirror = true; + setRotation(Front, 0F, 0F, 0F); + BackCC = new ModelRenderer(this, 43, 68); + BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); + BackCC.setRotationPoint(0F, 16F, 6F); + BackCC.setTextureSize(128, 128); + BackCC.mirror = true; + setRotation(BackCC, 0F, 0F, 0F); + RightPipe = new ModelRenderer(this, 12, 87); + RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); + RightPipe.setRotationPoint(-6F, 14F, 0F); + RightPipe.setTextureSize(128, 128); + RightPipe.mirror = true; + setRotation(RightPipe, 0F, 0F, 0F); + FrontCC = new ModelRenderer(this, 43, 68); + FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); + FrontCC.setRotationPoint(0F, 16F, -7F); + FrontCC.setTextureSize(128, 128); + FrontCC.mirror = true; + setRotation(FrontCC, 0F, 0F, 0F); + LeftCC = new ModelRenderer(this, 43, 74); + LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); + LeftCC.setRotationPoint(7F, 16F, 0F); + LeftCC.setTextureSize(128, 128); + LeftCC.mirror = true; + setRotation(LeftCC, 0F, 0F, 0F); + FrontPipe = new ModelRenderer(this, 28, 82); + FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); + FrontPipe.setRotationPoint(0F, 14F, -6F); + FrontPipe.setTextureSize(128, 128); + FrontPipe.mirror = true; + setRotation(FrontPipe, 0F, 0F, 0F); + Right = new ModelRenderer(this, 12, 68); + Right.addBox(0F, 0F, -3F, 1, 12, 6); + Right.setRotationPoint(-7F, 12F, 0F); + Right.setTextureSize(128, 128); + Right.mirror = true; + setRotation(Right, 0F, 0F, 0F); + RightCC = new ModelRenderer(this, 43, 74); + RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); + RightCC.setRotationPoint(-7F, 16F, 0F); + RightCC.setTextureSize(128, 128); + RightCC.mirror = true; + setRotation(RightCC, 0F, 0F, 0F); + Back = new ModelRenderer(this, 28, 68); + Back.addBox(-3F, 0F, 0F, 6, 12, 1); + Back.setRotationPoint(0F, 12F, 6F); + Back.setTextureSize(128, 128); + Back.mirror = true; + setRotation(Back, 0F, 0F, 0F); + BackPipe = new ModelRenderer(this, 28, 82); + BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); + BackPipe.setRotationPoint(0F, 14F, 6F); + BackPipe.setTextureSize(128, 128); + BackPipe.mirror = true; + setRotation(BackPipe, 0F, 0F, 0F); + Left = new ModelRenderer(this, 12, 68); + Left.addBox(0F, 0F, -3F, 1, 12, 6); + Left.setRotationPoint(6F, 12F, 0F); + Left.setTextureSize(128, 128); + Left.mirror = true; + setRotation(Left, 0F, 0F, 0F); + LeftPipe = new ModelRenderer(this, 12, 87); + LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); + LeftPipe.setRotationPoint(6F, 14F, 0F); + LeftPipe.setTextureSize(128, 128); + LeftPipe.mirror = true; + setRotation(LeftPipe, 0F, 0F, 0F); + RigthF4 = new ModelRenderer(this, 0, 56); + RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); + RigthF4.setRotationPoint(-8F, 0F, 0F); + RigthF4.setTextureSize(128, 128); + RigthF4.mirror = true; + setRotation(RigthF4, 0F, 0F, 0F); + LeftF4 = new ModelRenderer(this, 0, 56); + LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); + LeftF4.setRotationPoint(8F, 0F, 0F); + LeftF4.setTextureSize(128, 128); + LeftF4.mirror = true; + setRotation(LeftF4, 0.7853982F, 0F, 0F); + LeftF3 = new ModelRenderer(this, 0, 56); + LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); + LeftF3.setRotationPoint(8F, 0F, 0F); + LeftF3.setTextureSize(128, 128); + LeftF3.mirror = true; + setRotation(LeftF3, 0.7853982F, 0F, 0F); + LeftF2 = new ModelRenderer(this, 0, 56); + LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); + LeftF2.setRotationPoint(8F, 0F, 0F); + LeftF2.setTextureSize(128, 128); + LeftF2.mirror = true; + setRotation(LeftF2, 0.7853982F, 0F, 0F); + LeftF1 = new ModelRenderer(this, 0, 56); + LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); + LeftF1.setRotationPoint(8F, 0F, 0F); + LeftF1.setTextureSize(128, 128); + LeftF1.mirror = true; + setRotation(LeftF1, 0.7853982F, 0F, 0F); + RigthF3 = new ModelRenderer(this, 0, 56); + RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); + RigthF3.setRotationPoint(-8F, 0F, 0F); + RigthF3.setTextureSize(128, 128); + RigthF3.mirror = true; + setRotation(RigthF3, 0F, 0F, 0F); + RigthF2 = new ModelRenderer(this, 0, 56); + RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); + RigthF2.setRotationPoint(-8F, 0F, 0F); + RigthF2.setTextureSize(128, 128); + RigthF2.mirror = true; + setRotation(RigthF2, 0F, 0F, 0F); + RigthF1 = new ModelRenderer(this, 0, 56); + RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); + RigthF1.setRotationPoint(-8F, 0F, 0F); + RigthF1.setTextureSize(128, 128); + RigthF1.mirror = true; + setRotation(RigthF1, 0F, 0F, 0F); + RigthGCC = new ModelRenderer(this, 12, 18); + RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); + RigthGCC.setRotationPoint(-6F, 0F, 0F); + RigthGCC.setTextureSize(128, 128); + RigthGCC.mirror = true; + setRotation(RigthGCC, 0F, 0F, 0F); + RightSlide = new ModelRenderer(this, 0, 44); + RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); + RightSlide.setRotationPoint(-4F, 0F, 0F); + RightSlide.setTextureSize(128, 128); + RightSlide.mirror = true; + setRotation(RightSlide, 0F, 0F, 0F); + LeftSlide2 = new ModelRenderer(this, 0, 27); + LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); + LeftSlide2.setRotationPoint(-3F, 0F, 0F); + LeftSlide2.setTextureSize(128, 128); + LeftSlide2.mirror = true; + setRotation(LeftSlide2, 0F, 0F, 0F); + RightRod2 = new ModelRenderer(this, 0, 20); + RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); + RightRod2.setRotationPoint(-6F, 0F, 0F); + RightRod2.setTextureSize(128, 128); + RightRod2.mirror = true; + setRotation(RightRod2, 0F, 0F, 0F); + LeftGCC = new ModelRenderer(this, 24, 18); + LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); + LeftGCC.setRotationPoint(7F, 0F, 0F); + LeftGCC.setTextureSize(128, 128); + LeftGCC.mirror = true; + setRotation(LeftGCC, 0.7853982F, 0F, 0F); + LeftRod2 = new ModelRenderer(this, 0, 20); + LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); + LeftRod2.setRotationPoint(7F, 0F, 0F); + LeftRod2.setTextureSize(128, 128); + LeftRod2.mirror = true; + setRotation(LeftRod2, 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) + { + Base.render(f5); + PistonCover.render(f5); + + } + + public void renderGear(float f5) + { + //Rod connectors + LeftF4.render(f5); + LeftF3.render(f5); + LeftF2.render(f5); + LeftF1.render(f5); + RigthF4.render(f5); + RigthF3.render(f5); + RigthF2.render(f5); + RigthF1.render(f5); + RigthGCC.render(f5); + LeftGCC.render(f5); + } + + public void renderR(float f5, int pos) + { + 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); + //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); + midRod.render(f5); + RightRod2.render(f5); + LeftRod2.render(f5); + LeftSlide2.render(f5); + } + + public void renderLeft(float f5) + { + Left.render(f5); + LeftPipe.render(f5); + LeftCC.render(f5); + } + + public void renderRight(float f5) + { + Right.render(f5); + RightCC.render(f5); + RightPipe.render(f5); + } + + public void renderFront(float f5) + { + Front.render(f5); + FrontCC.render(f5); + FrontPipe.render(f5); + } + + public void renderBack(float f5) + { + Back.render(f5); + BackPipe.render(f5); + BackCC.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/dark/mech/steam/renders/ModelGenerator.java b/src/dark/mech/steam/renders/ModelGenerator.java new file mode 100644 index 00000000..cbef3154 --- /dev/null +++ b/src/dark/mech/steam/renders/ModelGenerator.java @@ -0,0 +1,122 @@ +// Date: 8/27/2012 3:20:21 PM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelGenerator extends ModelBase +{ + //fields + ModelRenderer BasePlate; + ModelRenderer LeftConnection; + ModelRenderer RightConnection; + ModelRenderer Mid; + ModelRenderer Mid2; + ModelRenderer front; + ModelRenderer front2; + ModelRenderer front3; + ModelRenderer Mid3; + ModelRenderer FrontConnector; + + public ModelGenerator() + { + textureWidth = 128; + textureHeight = 128; + + BasePlate = new ModelRenderer(this, 0, 0); + BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); + BasePlate.setRotationPoint(0F, 23F, 0F); + BasePlate.setTextureSize(128, 128); + BasePlate.mirror = true; + setRotation(BasePlate, 0F, 0F, 0F); + LeftConnection = new ModelRenderer(this, 0, 112); + LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); + LeftConnection.setRotationPoint(-6F, 16F, 0F); + LeftConnection.setTextureSize(128, 128); + LeftConnection.mirror = true; + setRotation(LeftConnection, 0F, 0F, 0F); + RightConnection = new ModelRenderer(this, 12, 112); + RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); + RightConnection.setRotationPoint(6F, 16F, 0F); + RightConnection.setTextureSize(128, 128); + RightConnection.mirror = true; + setRotation(RightConnection, 0F, 0F, 0F); + Mid = new ModelRenderer(this, 0, 29); + Mid.addBox(-4F, 0F, -6F, 8, 12, 12); + Mid.setRotationPoint(0F, 10F, 0F); + Mid.setTextureSize(128, 128); + Mid.mirror = true; + setRotation(Mid, 0F, 0F, 0F); + Mid2 = new ModelRenderer(this, 0, 53); + Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); + Mid2.setRotationPoint(0F, 12F, 0F); + Mid2.setTextureSize(128, 128); + Mid2.mirror = true; + setRotation(Mid2, 0F, 0F, 0F); + front = new ModelRenderer(this, 20, 15); + front.addBox(-2F, -4F, 0F, 4, 8, 1); + front.setRotationPoint(0F, 16F, -7F); + front.setTextureSize(128, 128); + front.mirror = true; + setRotation(front, 0F, 0F, 0F); + front2 = new ModelRenderer(this, 0, 24); + front2.addBox(-4F, -2F, 0F, 8, 4, 1); + front2.setRotationPoint(0F, 16F, -7F); + front2.setTextureSize(128, 128); + front2.mirror = true; + setRotation(front2, 0F, 0F, 0F); + front3 = new ModelRenderer(this, 0, 16); + front3.addBox(-3F, -3F, 0F, 6, 6, 1); + front3.setRotationPoint(0F, 16F, -7F); + front3.setTextureSize(128, 128); + front3.mirror = true; + setRotation(front3, 0F, 0F, 0F); + Mid3 = new ModelRenderer(this, 40, 29); + Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); + Mid3.setRotationPoint(0F, 12F, 0F); + Mid3.setTextureSize(128, 128); + Mid3.mirror = true; + setRotation(Mid3, 0F, 0F, 0F); + FrontConnector = new ModelRenderer(this, 0, 120); + FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); + FrontConnector.setRotationPoint(0F, 14F, -6F); + FrontConnector.setTextureSize(128, 128); + FrontConnector.mirror = true; + setRotation(FrontConnector, 0F, 0F, 0F); + } + + public void RenderMain(float f5) + { + BasePlate.render(f5); + Mid.render(f5); + Mid2.render(f5); + front.render(f5); + front2.render(f5); + front3.render(f5); + Mid3.render(f5); + FrontConnector.render(f5); + } + + public void RenderLeft(float f5) + { + LeftConnection.render(f5); + } + + public void RenderRight(float f5) + { + RightConnection.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } + +} diff --git a/src/dark/mech/steam/renders/ModelTank.java b/src/dark/mech/steam/renders/ModelTank.java new file mode 100644 index 00000000..420b950a --- /dev/null +++ b/src/dark/mech/steam/renders/ModelTank.java @@ -0,0 +1,137 @@ +// Date: 8/14/2012 1:48:41 AM +// Template version 1.1 +// Java generated by Techne +// Keep in mind that you still need to fill in some blanks +// - ZeuX + +package dark.mech.steam.renders; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelRenderer; + +public class ModelTank extends ModelBase +{ + //One Block Tank + ModelRenderer TANK_WALL_1; + ModelRenderer TANK_WALL_2; + ModelRenderer TANK_WALL_3; + ModelRenderer TANK_WALL_4; + ModelRenderer TANK_SUPPORT_1; + ModelRenderer TANK_TOP_1; + ModelRenderer TANK_WALL_5; + ModelRenderer TANK_SUPPORT_2; + ModelRenderer TANK_SUPPORT_3; + ModelRenderer TANK_WALL_6; + ModelRenderer TANK_TOP_2; + ModelRenderer TANK_TOP_3; + ModelRenderer TANK_VALVE; + + public ModelTank(float par1) + { + textureWidth = 128; + textureHeight = 128; + + TANK_WALL_1 = new ModelRenderer(this, 0, 49); + TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8, par1); + TANK_WALL_1.setRotationPoint(6F, 12F, -4F); + TANK_WALL_1.setTextureSize(128, 128); + TANK_WALL_1.mirror = true; + setRotation(TANK_WALL_1, 0F, 0F, 0F); + TANK_WALL_2 = new ModelRenderer(this, 0, 70); + TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7, par1); + TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); + TANK_WALL_2.setTextureSize(128, 128); + TANK_WALL_2.mirror = true; + setRotation(TANK_WALL_2, 0F, 0F, 0F); + TANK_WALL_3 = new ModelRenderer(this, 0, 34); + TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1, par1); + TANK_WALL_3.setRotationPoint(0F, 12F, 8F); + TANK_WALL_3.setTextureSize(128, 128); + TANK_WALL_3.mirror = true; + setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); + TANK_WALL_4 = new ModelRenderer(this, 0, 34); + TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1, par1); + TANK_WALL_4.setRotationPoint(0F, 12F, -8F); + TANK_WALL_4.setTextureSize(128, 128); + TANK_WALL_4.mirror = true; + setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); + TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); + TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16, par1); + TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_1.setTextureSize(128, 128); + TANK_SUPPORT_1.mirror = true; + setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); + TANK_TOP_1 = new ModelRenderer(this, 43, 11); + TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8, par1); + TANK_TOP_1.setRotationPoint(0F, 10F, 0F); + TANK_TOP_1.setTextureSize(128, 128); + TANK_TOP_1.mirror = true; + setRotation(TANK_TOP_1, 0F, 0F, 0F); + TANK_WALL_5 = new ModelRenderer(this, 0, 34); + TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1, par1); + TANK_WALL_5.setRotationPoint(0F, 12F, -7F); + TANK_WALL_5.setTextureSize(128, 128); + TANK_WALL_5.mirror = true; + setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); + TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18, par1); + TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_2.setTextureSize(128, 128); + TANK_SUPPORT_2.mirror = true; + setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); + TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); + TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18, par1); + TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); + TANK_SUPPORT_3.setTextureSize(128, 128); + TANK_SUPPORT_3.mirror = true; + setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); + TANK_WALL_6 = new ModelRenderer(this, 0, 34); + TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1, par1); + TANK_WALL_6.setRotationPoint(0F, 12F, 7F); + TANK_WALL_6.setTextureSize(128, 128); + TANK_WALL_6.mirror = true; + setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); + TANK_TOP_2 = new ModelRenderer(this, 43, 0); + TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8, par1); + TANK_TOP_2.setRotationPoint(0F, 10F, 0F); + TANK_TOP_2.setTextureSize(128, 128); + TANK_TOP_2.mirror = true; + setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); + TANK_TOP_3 = new ModelRenderer(this, 43, 0); + TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8, par1); + TANK_TOP_3.setRotationPoint(0F, 10F, 0F); + TANK_TOP_3.setTextureSize(128, 128); + TANK_TOP_3.mirror = true; + setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); + TANK_VALVE = new ModelRenderer(this, 84, 0); + TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2, par1); + TANK_VALVE.setRotationPoint(-1F, 9F, -1F); + TANK_VALVE.setTextureSize(128, 128); + TANK_VALVE.mirror = true; + setRotation(TANK_VALVE, 0F, 0F, 0F); + } + + public void generalRender(float f5) + { + TANK_WALL_1.render(f5); + TANK_WALL_2.render(f5); + TANK_WALL_3.render(f5); + TANK_WALL_4.render(f5); + TANK_SUPPORT_1.render(f5); + TANK_TOP_1.render(f5); + TANK_WALL_5.render(f5); + TANK_SUPPORT_2.render(f5); + TANK_SUPPORT_3.render(f5); + TANK_WALL_6.render(f5); + TANK_TOP_2.render(f5); + TANK_TOP_3.render(f5); + TANK_VALVE.render(f5); + } + + private void setRotation(ModelRenderer model, float x, float y, float z) + { + model.rotateAngleX = x; + model.rotateAngleY = y; + model.rotateAngleZ = z; + } +} diff --git a/src/dark/mech/steam/renders/RenderBoiler.java b/src/dark/mech/steam/renders/RenderBoiler.java new file mode 100644 index 00000000..fc28668d --- /dev/null +++ b/src/dark/mech/steam/renders/RenderBoiler.java @@ -0,0 +1,68 @@ +package dark.mech.steam.renders; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +import dark.mech.steam.boiler.TileEntityBoiler; + +public class RenderBoiler extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelTank model; + private ModelCenterTank model2; + private ModelCornerTank model3; + + public RenderBoiler(float par1) + { + model = new ModelTank(par1); + model2 = new ModelCenterTank(par1); + model3 = new ModelCornerTank(par1); + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) + { + + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + TileEntity[] connected = ((TileEntityBoiler) tileEntity).connectedBlocks; + int meta = 0; + if (connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler) tileEntity).tankCount < 2) + { + bindTextureByName(dark.mech.steam + "tankTexture.png"); + model.generalRender(0.0625F); + } + else if (MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler) tileEntity).tankCount > 2) + { + bindTextureByName(dark.mech.steam + "tankBlock.png"); + model2.renderBlock(0.0625F); + } + else + { + int corner = MHelper.corner(tileEntity); + bindTextureByName(dark.mech.steam + "CornerTank.png"); + switch (corner) + { + case 1: + GL11.glRotatef(270f, 0f, 1f, 0f); + break; + case 2: + GL11.glRotatef(0f, 0f, 1f, 0f); + break; + case 3: + GL11.glRotatef(90f, 0f, 1f, 0f); + break; + case 4: + GL11.glRotatef(180f, 0f, 1f, 0f); + break; + } + model3.renderCorner(0.0625f); + + } + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderFurnace.java b/src/dark/mech/steam/renders/RenderFurnace.java new file mode 100644 index 00000000..b720e65d --- /dev/null +++ b/src/dark/mech/steam/renders/RenderFurnace.java @@ -0,0 +1,45 @@ +package dark.mech.steam.renders; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +public class RenderFurnace extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelFurnace model; + + public RenderFurnace() + { + model = new ModelFurnace(); + } + + @Override + public void renderTileEntityAt(TileEntity te, double d, double d1, double d2, float d3) + { + bindTextureByName(dark.mech.steam + "Furnace.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = te.worldObj.getBlockMetadata(te.xCoord, te.yCoord, te.zCoord); + switch (meta) + { + case 0: + GL11.glRotatef(0f, 0f, 1f, 0f); + break; + case 1: + GL11.glRotatef(90f, 0f, 1f, 0f); + break; + case 2: + GL11.glRotatef(180f, 0f, 1f, 0f); + break; + case 3: + GL11.glRotatef(270f, 0f, 1f, 0f); + break; + } + model.genRender(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderGearPiston.java b/src/dark/mech/steam/renders/RenderGearPiston.java new file mode 100644 index 00000000..1eed0f24 --- /dev/null +++ b/src/dark/mech/steam/renders/RenderGearPiston.java @@ -0,0 +1,59 @@ +package dark.mech.steam.renders; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +import dark.mech.steam.steamengine.TileEntitySteamPiston; + +public class RenderGearPiston extends TileEntitySpecialRenderer +{ + private ModelGearPiston model; + + public RenderGearPiston() + { + model = new ModelGearPiston(); + } + + public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) + { + bindTextureByName(dark.mech.steam + "GearShaftPiston.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + + 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 0: + GL11.glRotatef(270f, 0f, 1f, 0f); + break; + } + model.renderGear(0.0625F); + model.renderR(0.0625F, tileEntity.pos); + model.renderBody(0.0625F); + model.renderBack(0.0625F); + model.renderFront(0.0625F); + model.renderLeft(0.0625F); + model.renderRight(0.0625F); + GL11.glPopMatrix(); + } + + @Override + public void renderTileEntityAt(TileEntity var1, double d, double d1, double d2, float d3) + { + this.renderTileEntityAt(((TileEntitySteamPiston) var1), d, d1, d2, d3); + + } + +} \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderGenerator.java b/src/dark/mech/steam/renders/RenderGenerator.java new file mode 100644 index 00000000..e2b80b22 --- /dev/null +++ b/src/dark/mech/steam/renders/RenderGenerator.java @@ -0,0 +1,45 @@ +package dark.mech.steam.renders; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +public class RenderGenerator extends TileEntitySpecialRenderer +{ + int type = 0; + private ModelGenerator model; + + public RenderGenerator() + { + model = new ModelGenerator(); + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) + { + bindTextureByName(dark.mech.steam + "Generator.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); + GL11.glScalef(1.0F, -1F, -1F); + int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + switch (meta) + { + case 0: + GL11.glRotatef(0f, 0f, 1f, 0f); + break; + case 1: + GL11.glRotatef(90f, 0f, 1f, 0f); + break; + case 2: + GL11.glRotatef(180f, 0f, 1f, 0f); + break; + case 3: + GL11.glRotatef(270f, 0f, 1f, 0f); + break; + } + model.RenderMain(0.0625F); + GL11.glPopMatrix(); + } + +} \ No newline at end of file diff --git a/src/dark/mech/steam/steamengine/BlockSteamPiston.java b/src/dark/mech/steam/steamengine/BlockSteamPiston.java new file mode 100644 index 00000000..2512bc4f --- /dev/null +++ b/src/dark/mech/steam/steamengine/BlockSteamPiston.java @@ -0,0 +1,76 @@ +package dark.mech.steam.steamengine; + +import java.util.Random; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import dark.core.blocks.BlockMachine; +import dark.mech.steam.SteamPowerMain; + +public class BlockSteamPiston extends BlockMachine +{ + + public BlockSteamPiston(int par1) + { + super("SteamEngine", SteamPowerMain.config, par1, Material.iron); + + } + + @Override + public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) + { + int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int metadata = par1World.getBlockMetadata(x, y, z); + if (metadata < 3) + { + par1World.setBlock(x, y, z, blockID, metadata + angle, 3); + } + else + { + par1World.setBlock(x, y, z, blockID, 0, 3); + } + return true; + } + + @Override + public boolean isOpaqueCube() + { + return false; + } + + @Override + public boolean renderAsNormalBlock() + { + return false; + } + + @Override + public int getRenderType() + { + return -1; + } + + @Override + public TileEntity createNewTileEntity(World world) + { + return new TileEntitySteamPiston(); + + } + + @Override + public int idDropped(int par1, Random par2Random, int par3) + { + return SteamPowerMain.itemEngine.itemID; + } + + @Override + public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) + { + int var5 = par1World.getBlockId(par2, par3, par4); + int var6 = par1World.getBlockId(par2, par3 + 1, par4); + return (var5 == 0 || blocksList[var5].blockMaterial.isReplaceable()) && (var6 == 0 || blocksList[var6].blockMaterial.isReplaceable()); + } +} diff --git a/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java b/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java new file mode 100644 index 00000000..21da3958 --- /dev/null +++ b/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java @@ -0,0 +1,7 @@ +package dark.mech.steam.steamengine; + +import dark.core.blocks.TileEntityMachine; + +public class TileEntitySteamPiston extends TileEntityMachine +{ +} diff --git a/src/minecraft/SteamPower/ItemRenderHelperS.java b/src/minecraft/SteamPower/ItemRenderHelperS.java deleted file mode 100644 index 28b1ce49..00000000 --- a/src/minecraft/SteamPower/ItemRenderHelperS.java +++ /dev/null @@ -1,56 +0,0 @@ -package dark.SteamPower; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.world.IBlockAccess; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import dark.SteamPower.renders.ModelFurnace; -import dark.SteamPower.renders.ModelGenerator; -import dark.SteamPower.renders.ModelTank; -//ItemRenderHelperS.renderID -public class ItemRenderHelperS implements ISimpleBlockRenderingHandler { - public static ItemRenderHelperS instance = new ItemRenderHelperS(); - public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - private ModelGenerator modelGen = new ModelGenerator(); - private ModelTank modelTank = new ModelTank(0f); - private ModelFurnace modelFurnace = new ModelFurnace(); - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if(block.blockID == SteamPowerMain.boilers.blockID && metadata >= 0 && metadata <= 3) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"tankTexture.png")); - modelTank.generalRender(0.0625F); - GL11.glPopMatrix(); - } - if(block.blockID == SteamPowerMain.heaters.blockID && metadata >= 0 && metadata <= 3) - { - GL11.glPushMatrix(); - GL11.glTranslatef((float) 0.0F, (float)1F, (float)0.0F); - GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile+"Furnace.png")); - modelFurnace.genRender(0.0625F); - GL11.glPopMatrix(); - } - } - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - return false; - } - - public boolean shouldRender3DInInventory() { - - return true; - } - - public int getRenderId() - { - return renderID; - } -} diff --git a/src/minecraft/SteamPower/SteamClientProxy.java b/src/minecraft/SteamPower/SteamClientProxy.java deleted file mode 100644 index 83ee7db5..00000000 --- a/src/minecraft/SteamPower/SteamClientProxy.java +++ /dev/null @@ -1,37 +0,0 @@ -package dark.SteamPower; - - -import net.minecraftforge.client.MinecraftForgeClient; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; -import dark.BasicUtilities.mechanical.TileEntityGen; -import dark.SteamPower.boiler.TileEntityBoiler; -import dark.SteamPower.firebox.TileEntityFireBox; -import dark.SteamPower.renders.RenderBoiler; -import dark.SteamPower.renders.RenderFurnace; -import dark.SteamPower.renders.RenderGearPiston; -import dark.SteamPower.renders.RenderGenerator; -import dark.SteamPower.steamengine.TileEntitySteamPiston; - -public class SteamClientProxy extends SteamProxy{ - - public void preInit() - { - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"blocks.png"); - MinecraftForgeClient.preloadTexture(SteamPowerMain.textureFile+"Items.png"); - RenderingRegistry.registerBlockHandler(new ItemRenderHelperS()); - } - @Override - public void init() - { - ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); - ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); - ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); - ClientRegistry.registerTileEntity(TileEntityGen.class, "elecGen", new RenderGenerator()); - } - public void postInit() - { - - } - -} diff --git a/src/minecraft/SteamPower/SteamProxy.java b/src/minecraft/SteamPower/SteamProxy.java deleted file mode 100644 index b3f63c10..00000000 --- a/src/minecraft/SteamPower/SteamProxy.java +++ /dev/null @@ -1,67 +0,0 @@ -package dark.SteamPower; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.registry.GameRegistry; -import dark.BasicUtilities.mechanical.TileEntityGen; -import dark.SteamPower.boiler.TileEntityBoiler; -import dark.SteamPower.firebox.ContainerFireBox; -import dark.SteamPower.firebox.GUIFireBox; -import dark.SteamPower.firebox.TileEntityFireBox; -import dark.SteamPower.steamengine.TileEntitySteamPiston; - -public class SteamProxy implements IGuiHandler{ - - public void preInit() - { - - } - public void init() - { - GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); - GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); - GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); - GameRegistry.registerTileEntity(TileEntityGen.class, "elecGen"); - - } - 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) - { - case 0: return new GUIFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - //case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); - //case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); - } - } - - 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) - { - case 0: return new ContainerFireBox(player.inventory, ((TileEntityFireBox)tileEntity)); - //default: return new ContainerFake(player.inventory, (IInventory) tileEntity); - } - } - - return null; - } -} diff --git a/src/minecraft/SteamPower/boiler/BlockBoiler.java b/src/minecraft/SteamPower/boiler/BlockBoiler.java deleted file mode 100644 index 10de561e..00000000 --- a/src/minecraft/SteamPower/boiler/BlockBoiler.java +++ /dev/null @@ -1,105 +0,0 @@ -package dark.SteamPower.boiler; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import universalelectricity.prefab.BlockMachine; -import dark.Library.Util.MetaGroupingHelper; -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.ItemRenderHelperS; - -public class BlockBoiler extends BlockMachine -{ - - /** - * Quick enum to help sort out meta data info - */ - public enum Boilers - { - Basic("Boiler", TileEntityBoiler.class, -1), - e("", null, -1), - ee("", null, -1), - eee("", null, -1); - - public String name; - public Class ent; - public int gui; - - private Boilers(String name, Class tileEntity, int gui) - { - this.name = name; - this.gui = gui; - this.ent = tileEntity; - } - } - - public BlockBoiler(int par1) - { - super("Boilers", par1, Material.iron); - this.setRequiresSelfNotify(); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(1f); - this.setResistance(3f); - } - - @Override - public int damageDropped(int metadata) - { - return MetaGroupingHelper.getGroupStartMeta(MetaGroupingHelper.getGrouping(metadata)); - } - @Override - public TileEntity createNewTileEntity(World var1, int meta) - { - try - { - return Boilers.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - - /** - * Called when the block is placed in the world. - */ - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) - { - int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = world.getBlockMetadata(x, y, z); - // world.setBlockMetadata(x, y, z, angle); - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(par1, 1, 0)); - } -} diff --git a/src/minecraft/SteamPower/boiler/TileEntityBoiler.java b/src/minecraft/SteamPower/boiler/TileEntityBoiler.java deleted file mode 100644 index ec364da1..00000000 --- a/src/minecraft/SteamPower/boiler/TileEntityBoiler.java +++ /dev/null @@ -1,189 +0,0 @@ -package dark.SteamPower.boiler; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.ILiquidTank; -import net.minecraftforge.liquids.ITankContainer; -import net.minecraftforge.liquids.LiquidContainerRegistry; -import net.minecraftforge.liquids.LiquidStack; -import net.minecraftforge.liquids.LiquidTank; -import dark.BasicUtilities.BasicUtilitiesMain; -import dark.BasicUtilities.api.IHeatCreator; -import dark.BasicUtilities.api.IReadOut; -import dark.BasicUtilities.api.Liquid; -import dark.BasicUtilities.api.MHelper; -import dark.BasicUtilities.pipes.TileEntityPipe; - -public class TileEntityBoiler extends TileEntity implements IReadOut, ITankContainer -{ - public int heat = 0; - public int hullHeat = 0; - public final int heatMax = 4500; - public final int heatGain = 220; - public final int heatNeed = 2000; - public TileEntity[] connectedBlocks = - { null, null, null, null, null, null }; - public int tankCount = 0; - public int tickCount = 0; - - public LiquidTank SteamTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * 10); - public LiquidTank WaterTank = new LiquidTank(LiquidContainerRegistry.BUCKET_VOLUME * 4); - - // ----------------------------- - // Update stuff - // ----------------------------- - @Override - public void updateEntity() - { - // update connection list used for rendering - if (tickCount-- == 10) - { - this.connectedBlocks = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); - this.tankCount = 0; - for (int i = 0; i < connectedBlocks.length; i++) - { - if (!(connectedBlocks[i] instanceof ILiquidTank || connectedBlocks[i] instanceof TileEntityPipe)) - { - connectedBlocks[i] = null; - } - if (connectedBlocks[i] != null) - { - tankCount++; - } - } - tickCount = 10; - } - if (!worldObj.isRemote) - { - TileEntity ent = worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord); - if (ent instanceof IHeatCreator && ((IHeatCreator) ent).canCreatHeat(ForgeDirection.UP)) - { - this.heat = Math.min(heat + Math.max(((IHeatCreator) ent).createHeat(ForgeDirection.UP),0),this.heatMax); - } - if(this.hullHeat < 10000) - { - this.hullHeat += this.heat; - this.heat = 0; - }else - if(this.heat >= this.heatNeed) - { - this.WaterTank.drain(1, true); - LiquidStack Stack = Liquid.STEAM.liquid.copy(); - Stack.amount = LiquidContainerRegistry.BUCKET_VOLUME; - this.SteamTank.fill(Stack, true); - this.heat -= this.heatNeed; - } - } - - super.updateEntity(); - } - - // ----------------------------- - // Liquid stuff - // ----------------------------- - - // ----------------------------- - // Data - // ----------------------------- - - @Override - public void writeToNBT(NBTTagCompound nbt) - { - super.writeToNBT(nbt); - // liquid saving - LiquidStack liquid = this.WaterTank.getLiquid(); - LiquidStack liquid2 = this.SteamTank.getLiquid(); - int water = 0; - int steam = 0; - if (liquid != null) water = liquid.amount; - if (liquid2 != null) steam = liquid2.amount; - nbt.setInteger("water", water); - nbt.setInteger("steam", steam); - // tempature saving - nbt.setInteger("heat", this.heat); - nbt.setInteger("hullHeat", this.hullHeat); - } - - @Override - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - // load up liquids - int water = par1NBTTagCompound.getInteger("water"); - int steam = par1NBTTagCompound.getInteger("steam"); - this.WaterTank.setLiquid(new LiquidStack(Block.waterStill.blockID, water)); - this.SteamTank.setLiquid(new LiquidStack(BasicUtilitiesMain.SteamBlock.blockID, steam)); - // load up heat/temp levels - this.heat = par1NBTTagCompound.getInteger("heat"); - this.hullHeat = par1NBTTagCompound.getInteger("hullHeat"); - } - - @Override - public String getMeterReading(EntityPlayer user, ForgeDirection side) - { - String output = " "; - LiquidStack liquid = this.WaterTank.getLiquid(); - LiquidStack liquid2 = this.SteamTank.getLiquid(); - if (liquid != null) output += (liquid.amount / LiquidContainerRegistry.BUCKET_VOLUME) + "B WATER "; - if (liquid2 != null) output += (liquid2.amount / LiquidContainerRegistry.BUCKET_VOLUME) + "B Steam "; - if (liquid != null || liquid2 != null) return output; - return "messurement error"; - - } - - @Override - public int fill(ForgeDirection from, LiquidStack resource, boolean doFill) - { - int used = 0; - - if (resource.itemID == Block.waterStill.blockID) - { - used += WaterTank.fill(resource, doFill); - } - else if (resource.itemID == BasicUtilitiesMain.Steam.itemID) - { - used += SteamTank.fill(resource, doFill); - } - - return used; - } - - @Override - public int fill(int tankIndex, LiquidStack resource, boolean doFill) - { - if (resource.itemID == Block.waterStill.blockID) - return WaterTank.fill(resource, doFill); - return 0; - } - - @Override - public LiquidStack drain(ForgeDirection from, int maxEmpty, boolean doDrain) - { - return drain(2, maxEmpty, doDrain); - } - - @Override - public LiquidStack drain(int tankIndex, int maxEmpty, boolean doDrain) - { - if (tankIndex == 1) return SteamTank.drain(maxEmpty, doDrain); - return null; - } - - @Override - public ILiquidTank[] getTanks(ForgeDirection direction) - { - return new ILiquidTank[] - { SteamTank, WaterTank }; - } - - @Override - public ILiquidTank getTank(ForgeDirection direction, LiquidStack type) - { - // TODO Auto-generated method stub - return null; - } - -} diff --git a/src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java b/src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java deleted file mode 100644 index f7202caf..00000000 --- a/src/minecraft/SteamPower/boiler/TileEntityBoilerPipe.java +++ /dev/null @@ -1,8 +0,0 @@ -package dark.SteamPower.boiler; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityBoilerPipe extends TileEntity -{ - -} diff --git a/src/minecraft/SteamPower/mcmod.info b/src/minecraft/SteamPower/mcmod.info deleted file mode 100644 index 922b39f5..00000000 --- a/src/minecraft/SteamPower/mcmod.info +++ /dev/null @@ -1,21 +0,0 @@ -[ -{ - "modid": "SteamPower", - "name": "Steam Power", - "description": "Basic power plant package for Universal Electricity. Power system is based on steam and works with any heat source. Current heat sources lava, and fireBox Furnace", - "version": "1.8", - "mcversion": "1.3.2", - "url": "http://www.minecraftforge.net/forum/index.php/topic,222.0.html", - "updateUrl": "", - "authors": [ - "DarkGuardsman" - ], - "credits": "Created by Darkguardsman; Vector/network code from Calclavia; Some Models thanks to Azkhare;", - "logoFile": "", - "screenshots": [ - ], - "parent":"", - "dependencies": ["UE","BasicPipes" - ] -} -] \ No newline at end of file diff --git a/src/minecraft/SteamPower/renders/ModelCenterTank.java b/src/minecraft/SteamPower/renders/ModelCenterTank.java deleted file mode 100644 index 03dce021..00000000 --- a/src/minecraft/SteamPower/renders/ModelCenterTank.java +++ /dev/null @@ -1,53 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelCenterTank extends ModelBase -{ - - ModelRenderer Block; - - public ModelCenterTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //block - Block = new ModelRenderer(this, 0, 0); - Block.addBox(0F, 0F, 0F, 16, 16, 16); - Block.setRotationPoint(-8F, 8F, -8F); - Block.setTextureSize(128, 32); - Block.mirror = true; - setRotation(Block, 0F, 0F, 0F); - } - public void renderBlock(float f5) - { - Block.render(f5); - } - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/src/minecraft/SteamPower/renders/ModelCornerTank.java b/src/minecraft/SteamPower/renders/ModelCornerTank.java deleted file mode 100644 index 960828ce..00000000 --- a/src/minecraft/SteamPower/renders/ModelCornerTank.java +++ /dev/null @@ -1,95 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelCornerTank extends ModelBase -{ - //Corner - ModelRenderer Shape1; - ModelRenderer Shape2; - ModelRenderer Shape3; - ModelRenderer Shape6; - ModelRenderer Shape7; - ModelRenderer Shape4; - - public ModelCornerTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - - //corner - Shape1 = new ModelRenderer(this, 0, 1); - Shape1.addBox(0F, 0F, 0F, 1, 16, 20); - Shape1.setRotationPoint(7F, 8F, -7F); - Shape1.setTextureSize(128, 128); - Shape1.mirror = true; - setRotation(Shape1, 0F, -0.7853982F, 0F); - Shape2 = new ModelRenderer(this, 44, 0); - Shape2.addBox(0F, 0F, 0F, 2, 16, 2); - Shape2.setRotationPoint(-8F, 8F, 6F); - Shape2.setTextureSize(128, 128); - Shape2.mirror = true; - setRotation(Shape2, 0F, 0F, 0F); - Shape3 = new ModelRenderer(this, 44, 0); - Shape3.addBox(0F, 0F, 0F, 2, 16, 2); - Shape3.setRotationPoint(6F, 8F, -8F); - Shape3.setTextureSize(128, 128); - Shape3.mirror = true; - setRotation(Shape3, 0F, 0F, 0F); - Shape6 = new ModelRenderer(this, 0, 44); - Shape6.addBox(0F, 0F, 0F, 1, 15, 13); - Shape6.setRotationPoint(-8F, 9F, -7F); - Shape6.setTextureSize(128, 128); - Shape6.mirror = true; - setRotation(Shape6, 0F, 0F, 0F); - Shape7 = new ModelRenderer(this, 0, 73); - Shape7.addBox(0F, 0F, 0F, 14, 15, 1); - Shape7.setRotationPoint(-8F, 9F, -8F); - Shape7.setTextureSize(128, 128); - Shape7.mirror = true; - setRotation(Shape7, 0F, 0F, 0F); - Shape4 = new ModelRenderer(this, 0, 92); - Shape4.addBox(0F, 0F, 0F, 16, 1, 16); - Shape4.setRotationPoint(-8F, 8F, -8F); - Shape4.setTextureSize(128, 128); - Shape4.mirror = true; - setRotation(Shape4, 0F, 0F, 0F); - } - public void renderCorner(float f5) - { - Shape1.render(f5); - Shape2.render(f5); - Shape3.render(f5); - Shape6.render(f5); - Shape7.render(f5); - Shape4.render(f5); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/src/minecraft/SteamPower/renders/ModelEngine.java b/src/minecraft/SteamPower/renders/ModelEngine.java deleted file mode 100644 index 498525c3..00000000 --- a/src/minecraft/SteamPower/renders/ModelEngine.java +++ /dev/null @@ -1,109 +0,0 @@ -// Date: 8/24/2012 1:44:37 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelEngine extends ModelBase -{ - //fields - ModelRenderer Base; - ModelRenderer top; - ModelRenderer TopPiston; - ModelRenderer BottomPiston; - ModelRenderer center; - ModelRenderer C1; - ModelRenderer C2; - - public ModelEngine() - { - textureWidth = 64; - textureHeight = 64; - - Base = new ModelRenderer(this, 0, 20); - Base.addBox(-6F, 0F, -6F, 12, 8, 12); - Base.setRotationPoint(0F, 16F, 0F); - Base.setTextureSize(64, 64); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - top = new ModelRenderer(this, 0, 0); - top.addBox(-6F, 0F, -6F, 12, 8, 12); - top.setRotationPoint(0F, -8F, 0F); - top.setTextureSize(64, 64); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - TopPiston = new ModelRenderer(this, 0, 52); - TopPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - TopPiston.setRotationPoint(0F, 0F, 0F); - TopPiston.setTextureSize(64, 64); - TopPiston.mirror = true; - setRotation(TopPiston, 0F, 0F, 0F); - BottomPiston = new ModelRenderer(this, 16, 52); - BottomPiston.addBox(-2F, 0F, -2F, 4, 8, 4); - BottomPiston.setRotationPoint(0F, 8F, 0F); - BottomPiston.setTextureSize(64, 64); - BottomPiston.mirror = true; - setRotation(BottomPiston, 0F, 0F, 0F); - center = new ModelRenderer(this, 32, 52); - center.addBox(-3F, 0F, -3F, 6, 6, 6); - //center.setRotationPoint(0F, 5F, 0F); - center.setTextureSize(64, 64); - center.mirror = true; - setRotation(center, 0F, 0F, 0F); - C1 = new ModelRenderer(this, 0, 41); - C1.addBox(-2F, -3F, 0F, 4, 6, 3); - C1.setRotationPoint(0F, 8F, 3F); - C1.setTextureSize(64, 64); - C1.mirror = true; - setRotation(C1, 0F, 0F, 0F); - C2 = new ModelRenderer(this, 15, 41); - C2.addBox(-2F, -3F, -3F, 4, 6, 3); - C2.setRotationPoint(0F, 8F, -3F); - C2.setTextureSize(64, 64); - C2.mirror = true; - setRotation(C2, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - //renderBot(f5); - //renderTop(f5); - } - public void renderBot(float f5) - { - Base.render(f5); - BottomPiston.render(f5); - } - public void renderTop(float f5) - { - top.render(f5); - TopPiston.render(f5); - C1.render(f5); - C2.render(f5); - } - public void renderMid(float f5,float p) - { - - center.setRotationPoint(0F, p, 0F); - center.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/src/minecraft/SteamPower/renders/ModelFurnace.java b/src/minecraft/SteamPower/renders/ModelFurnace.java deleted file mode 100644 index 9ba99010..00000000 --- a/src/minecraft/SteamPower/renders/ModelFurnace.java +++ /dev/null @@ -1,77 +0,0 @@ -// Date: 8/14/2012 3:02:31 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelFurnace extends ModelBase -{ - //fields - ModelRenderer Body; - ModelRenderer top; - ModelRenderer bottom; - ModelRenderer Shape1; - - public ModelFurnace() - { - textureWidth = 256; - textureHeight = 256; - - Body = new ModelRenderer(this, 0, 0); - Body.addBox(-8F, -8F, -8F, 14, 14, 12); - Body.setRotationPoint(1F, 18F, 1F); - Body.setTextureSize(64, 32); - Body.mirror = true; - setRotation(Body, 0F, 0F, 0F); - top = new ModelRenderer(this, 80, 20); - top.addBox(-8F, 0F, -8F, 16, 2, 16); - top.setRotationPoint(0F, 8F, 0F); - top.setTextureSize(64, 32); - top.mirror = true; - setRotation(top, 0F, 0F, 0F); - bottom = new ModelRenderer(this, 80, 0); - bottom.addBox(-8F, 22F, -8F, 16, 2, 16); - bottom.setRotationPoint(0F, 0F, 0F); - bottom.setTextureSize(64, 32); - bottom.mirror = true; - setRotation(bottom, 0F, 0F, 0F); - Shape1 = new ModelRenderer(this, 0, 27); - Shape1.addBox(-4F, -4F, 0F, 10, 8, 1); - Shape1.setRotationPoint(-1F, 16F, 5F); - Shape1.setTextureSize(64, 32); - Shape1.mirror = true; - setRotation(Shape1, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - genRender(f5); - } - public void genRender(float f5) - { - Body.render(f5); - top.render(f5); - bottom.render(f5); - Shape1.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/src/minecraft/SteamPower/renders/ModelGearPiston.java b/src/minecraft/SteamPower/renders/ModelGearPiston.java deleted file mode 100644 index ed4241f4..00000000 --- a/src/minecraft/SteamPower/renders/ModelGearPiston.java +++ /dev/null @@ -1,380 +0,0 @@ -// Date: 10/1/2012 12:32:21 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; - -public class ModelGearPiston extends ModelBase -{ - //fields - ModelRenderer PistonCover; - ModelRenderer RSpiston; - ModelRenderer LSpiston; - ModelRenderer RodPiston; - ModelRenderer Base; - ModelRenderer Front; - ModelRenderer BackCC; - ModelRenderer RightPipe; - ModelRenderer FrontCC; - ModelRenderer LeftCC; - ModelRenderer FrontPipe; - ModelRenderer Right; - ModelRenderer RightCC; - ModelRenderer Back; - ModelRenderer BackPipe; - ModelRenderer Left; - ModelRenderer LeftPipe; - ModelRenderer RigthF4; - ModelRenderer LeftF4; - ModelRenderer LeftF3; - ModelRenderer LeftF2; - ModelRenderer LeftF1; - ModelRenderer RigthF3; - ModelRenderer RigthF2; - ModelRenderer RigthF1; - ModelRenderer RigthGCC; - ModelRenderer RightSlide; - ModelRenderer midRod; - ModelRenderer RightRod2; - ModelRenderer LeftGCC; - ModelRenderer LeftRod2; - ModelRenderer LeftSlide2; - - public ModelGearPiston() - { - textureWidth = 128; - textureHeight = 128; - - PistonCover = new ModelRenderer(this, 13, 31); - PistonCover.addBox(0F, -9F, -3F, 6, 10, 6); - PistonCover.setRotationPoint(-3F, 20F, 0F); - PistonCover.setTextureSize(128, 128); - PistonCover.mirror = true; - setRotation(PistonCover, 0F, 0F, 0F); - RSpiston = new ModelRenderer(this, 0, 32); - RSpiston.addBox(-3F, -2F, -2F, 1, 7, 4); - RSpiston.setRotationPoint(1F, 3F, 0F); - RSpiston.setTextureSize(128, 128); - RSpiston.mirror = true; - setRotation(RSpiston, 0F, 0F, 0F); - LSpiston = new ModelRenderer(this, 0, 32); - LSpiston.addBox(-1F, -2F, -2F, 1, 7, 4); - LSpiston.setRotationPoint(2F, 3F, 0F); - LSpiston.setTextureSize(128, 128); - LSpiston.mirror = true; - setRotation(LSpiston, 0F, 0F, 0F); - RodPiston = new ModelRenderer(this, 0, 59); - RodPiston.addBox(-1F, -2F, -1.5F, 2, 13, 3); - RodPiston.setRotationPoint(0F, 8F, 0F); - RodPiston.setTextureSize(128, 128); - RodPiston.mirror = true; - setRotation(RodPiston, 0F, 0F, 0F); - Base = new ModelRenderer(this, 12, 49); - Base.addBox(0F, 0F, 0F, 10, 5, 10); - Base.setRotationPoint(-5F, 19F, -5F); - Base.setTextureSize(128, 128); - Base.mirror = true; - setRotation(Base, 0F, 0F, 0F); - Front = new ModelRenderer(this, 28, 68); - Front.addBox(-3F, 0F, 0F, 6, 12, 1); - Front.setRotationPoint(0F, 12F, -7F); - Front.setTextureSize(128, 128); - Front.mirror = true; - setRotation(Front, 0F, 0F, 0F); - BackCC = new ModelRenderer(this, 43, 68); - BackCC.addBox(-2F, -2F, 1F, 4, 4, 1); - BackCC.setRotationPoint(0F, 16F, 6F); - BackCC.setTextureSize(128, 128); - BackCC.mirror = true; - setRotation(BackCC, 0F, 0F, 0F); - RightPipe = new ModelRenderer(this, 12, 87); - RightPipe.addBox(0F, 0F, -2F, 2, 10, 4); - RightPipe.setRotationPoint(-6F, 14F, 0F); - RightPipe.setTextureSize(128, 128); - RightPipe.mirror = true; - setRotation(RightPipe, 0F, 0F, 0F); - FrontCC = new ModelRenderer(this, 43, 68); - FrontCC.addBox(-2F, -2F, -1F, 4, 4, 1); - FrontCC.setRotationPoint(0F, 16F, -7F); - FrontCC.setTextureSize(128, 128); - FrontCC.mirror = true; - setRotation(FrontCC, 0F, 0F, 0F); - LeftCC = new ModelRenderer(this, 43, 74); - LeftCC.addBox(0F, -2F, -2F, 1, 4, 4); - LeftCC.setRotationPoint(7F, 16F, 0F); - LeftCC.setTextureSize(128, 128); - LeftCC.mirror = true; - setRotation(LeftCC, 0F, 0F, 0F); - FrontPipe = new ModelRenderer(this, 28, 82); - FrontPipe.addBox(-2F, 0F, 0F, 4, 10, 2); - FrontPipe.setRotationPoint(0F, 14F, -6F); - FrontPipe.setTextureSize(128, 128); - FrontPipe.mirror = true; - setRotation(FrontPipe, 0F, 0F, 0F); - Right = new ModelRenderer(this, 12, 68); - Right.addBox(0F, 0F, -3F, 1, 12, 6); - Right.setRotationPoint(-7F, 12F, 0F); - Right.setTextureSize(128, 128); - Right.mirror = true; - setRotation(Right, 0F, 0F, 0F); - RightCC = new ModelRenderer(this, 43, 74); - RightCC.addBox(-1F, -2F, -2F, 1, 4, 4); - RightCC.setRotationPoint(-7F, 16F, 0F); - RightCC.setTextureSize(128, 128); - RightCC.mirror = true; - setRotation(RightCC, 0F, 0F, 0F); - Back = new ModelRenderer(this, 28, 68); - Back.addBox(-3F, 0F, 0F, 6, 12, 1); - Back.setRotationPoint(0F, 12F, 6F); - Back.setTextureSize(128, 128); - Back.mirror = true; - setRotation(Back, 0F, 0F, 0F); - BackPipe = new ModelRenderer(this, 28, 82); - BackPipe.addBox(-2F, 0F, -2F, 4, 10, 2); - BackPipe.setRotationPoint(0F, 14F, 6F); - BackPipe.setTextureSize(128, 128); - BackPipe.mirror = true; - setRotation(BackPipe, 0F, 0F, 0F); - Left = new ModelRenderer(this, 12, 68); - Left.addBox(0F, 0F, -3F, 1, 12, 6); - Left.setRotationPoint(6F, 12F, 0F); - Left.setTextureSize(128, 128); - Left.mirror = true; - setRotation(Left, 0F, 0F, 0F); - LeftPipe = new ModelRenderer(this, 12, 87); - LeftPipe.addBox(-2F, 0F, -2F, 2, 10, 4); - LeftPipe.setRotationPoint(6F, 14F, 0F); - LeftPipe.setTextureSize(128, 128); - LeftPipe.mirror = true; - setRotation(LeftPipe, 0F, 0F, 0F); - RigthF4 = new ModelRenderer(this, 0, 56); - RigthF4.addBox(-2F, 1F, 1F, 2, 1, 1); - RigthF4.setRotationPoint(-8F, 0F, 0F); - RigthF4.setTextureSize(128, 128); - RigthF4.mirror = true; - setRotation(RigthF4, 0F, 0F, 0F); - LeftF4 = new ModelRenderer(this, 0, 56); - LeftF4.addBox(0F, 1F, 1F, 2, 1, 1); - LeftF4.setRotationPoint(8F, 0F, 0F); - LeftF4.setTextureSize(128, 128); - LeftF4.mirror = true; - setRotation(LeftF4, 0.7853982F, 0F, 0F); - LeftF3 = new ModelRenderer(this, 0, 56); - LeftF3.addBox(0F, 1F, -2F, 2, 1, 1); - LeftF3.setRotationPoint(8F, 0F, 0F); - LeftF3.setTextureSize(128, 128); - LeftF3.mirror = true; - setRotation(LeftF3, 0.7853982F, 0F, 0F); - LeftF2 = new ModelRenderer(this, 0, 56); - LeftF2.addBox(0F, -2F, -2F, 2, 1, 1); - LeftF2.setRotationPoint(8F, 0F, 0F); - LeftF2.setTextureSize(128, 128); - LeftF2.mirror = true; - setRotation(LeftF2, 0.7853982F, 0F, 0F); - LeftF1 = new ModelRenderer(this, 0, 56); - LeftF1.addBox(0F, -2F, 1F, 2, 1, 1); - LeftF1.setRotationPoint(8F, 0F, 0F); - LeftF1.setTextureSize(128, 128); - LeftF1.mirror = true; - setRotation(LeftF1, 0.7853982F, 0F, 0F); - RigthF3 = new ModelRenderer(this, 0, 56); - RigthF3.addBox(-2F, 1F, -2F, 2, 1, 1); - RigthF3.setRotationPoint(-8F, 0F, 0F); - RigthF3.setTextureSize(128, 128); - RigthF3.mirror = true; - setRotation(RigthF3, 0F, 0F, 0F); - RigthF2 = new ModelRenderer(this, 0, 56); - RigthF2.addBox(-2F, -2F, 1F, 2, 1, 1); - RigthF2.setRotationPoint(-8F, 0F, 0F); - RigthF2.setTextureSize(128, 128); - RigthF2.mirror = true; - setRotation(RigthF2, 0F, 0F, 0F); - RigthF1 = new ModelRenderer(this, 0, 56); - RigthF1.addBox(-2F, -2F, -2F, 2, 1, 1); - RigthF1.setRotationPoint(-8F, 0F, 0F); - RigthF1.setTextureSize(128, 128); - RigthF1.mirror = true; - setRotation(RigthF1, 0F, 0F, 0F); - RigthGCC = new ModelRenderer(this, 12, 18); - RigthGCC.addBox(-2F, -2F, -2F, 2, 4, 4); - RigthGCC.setRotationPoint(-6F, 0F, 0F); - RigthGCC.setTextureSize(128, 128); - RigthGCC.mirror = true; - setRotation(RigthGCC, 0F, 0F, 0F); - RightSlide = new ModelRenderer(this, 0, 44); - RightSlide.addBox(0F, -2F, -2F, 1, 7, 4); - RightSlide.setRotationPoint(-4F, 0F, 0F); - RightSlide.setTextureSize(128, 128); - RightSlide.mirror = true; - setRotation(RightSlide, 0F, 0F, 0F); - LeftSlide2 = new ModelRenderer(this, 0, 27); - LeftSlide2.addBox(0F, 2F, -1F, 6, 2, 2); - LeftSlide2.setRotationPoint(-3F, 0F, 0F); - LeftSlide2.setTextureSize(128, 128); - LeftSlide2.mirror = true; - setRotation(LeftSlide2, 0F, 0F, 0F); - RightRod2 = new ModelRenderer(this, 0, 20); - RightRod2.addBox(0F, -1.5F, -1.5F, 2, 3, 3); - RightRod2.setRotationPoint(-6F, 0F, 0F); - RightRod2.setTextureSize(128, 128); - RightRod2.mirror = true; - setRotation(RightRod2, 0F, 0F, 0F); - LeftGCC = new ModelRenderer(this, 24, 18); - LeftGCC.addBox(-1F, -2F, -2F, 2, 4, 4); - LeftGCC.setRotationPoint(7F, 0F, 0F); - LeftGCC.setTextureSize(128, 128); - LeftGCC.mirror = true; - setRotation(LeftGCC, 0.7853982F, 0F, 0F); - LeftRod2 = new ModelRenderer(this, 0, 20); - LeftRod2.addBox(-3F, -1.5F, -1.5F, 2, 3, 3); - LeftRod2.setRotationPoint(7F, 0F, 0F); - LeftRod2.setTextureSize(128, 128); - LeftRod2.mirror = true; - setRotation(LeftRod2, 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) - { - Base.render(f5); - PistonCover.render(f5); - - } - public void renderGear(float f5) - { - //Rod connectors - LeftF4.render(f5); - LeftF3.render(f5); - LeftF2.render(f5); - LeftF1.render(f5); - RigthF4.render(f5); - RigthF3.render(f5); - RigthF2.render(f5); - RigthF1.render(f5); - RigthGCC.render(f5); - LeftGCC.render(f5); - } - public void renderR(float f5,int pos) - { - 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); - //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); - midRod.render(f5); - RightRod2.render(f5); - LeftRod2.render(f5); - LeftSlide2.render(f5); - } - public void renderLeft(float f5) - { - Left.render(f5); - LeftPipe.render(f5); - LeftCC.render(f5); - } - public void renderRight(float f5) - { - Right.render(f5); - RightCC.render(f5); - RightPipe.render(f5); - } - public void renderFront(float f5) - { - Front.render(f5); - FrontCC.render(f5); - FrontPipe.render(f5); - } - public void renderBack(float f5) - { - Back.render(f5); - BackPipe.render(f5); - BackCC.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/src/minecraft/SteamPower/renders/ModelGenerator.java b/src/minecraft/SteamPower/renders/ModelGenerator.java deleted file mode 100644 index 9316f5b7..00000000 --- a/src/minecraft/SteamPower/renders/ModelGenerator.java +++ /dev/null @@ -1,131 +0,0 @@ -// Date: 8/27/2012 3:20:21 PM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelGenerator extends ModelBase -{ - //fields - ModelRenderer BasePlate; - ModelRenderer LeftConnection; - ModelRenderer RightConnection; - ModelRenderer Mid; - ModelRenderer Mid2; - ModelRenderer front; - ModelRenderer front2; - ModelRenderer front3; - ModelRenderer Mid3; - ModelRenderer FrontConnector; - - public ModelGenerator() - { - textureWidth = 128; - textureHeight = 128; - - BasePlate = new ModelRenderer(this, 0, 0); - BasePlate.addBox(-7F, 0F, -7F, 14, 1, 14); - BasePlate.setRotationPoint(0F, 23F, 0F); - BasePlate.setTextureSize(128, 128); - BasePlate.mirror = true; - setRotation(BasePlate, 0F, 0F, 0F); - LeftConnection = new ModelRenderer(this, 0, 112); - LeftConnection.addBox(-2F, -2F, -2F, 2, 4, 4); - LeftConnection.setRotationPoint(-6F, 16F, 0F); - LeftConnection.setTextureSize(128, 128); - LeftConnection.mirror = true; - setRotation(LeftConnection, 0F, 0F, 0F); - RightConnection = new ModelRenderer(this, 12, 112); - RightConnection.addBox(0F, -2F, -2F, 2, 4, 4); - RightConnection.setRotationPoint(6F, 16F, 0F); - RightConnection.setTextureSize(128, 128); - RightConnection.mirror = true; - setRotation(RightConnection, 0F, 0F, 0F); - Mid = new ModelRenderer(this, 0, 29); - Mid.addBox(-4F, 0F, -6F, 8, 12, 12); - Mid.setRotationPoint(0F, 10F, 0F); - Mid.setTextureSize(128, 128); - Mid.mirror = true; - setRotation(Mid, 0F, 0F, 0F); - Mid2 = new ModelRenderer(this, 0, 53); - Mid2.addBox(-6F, 0F, -6F, 12, 8, 12); - Mid2.setRotationPoint(0F, 12F, 0F); - Mid2.setTextureSize(128, 128); - Mid2.mirror = true; - setRotation(Mid2, 0F, 0F, 0F); - front = new ModelRenderer(this, 20, 15); - front.addBox(-2F, -4F, 0F, 4, 8, 1); - front.setRotationPoint(0F, 16F, -7F); - front.setTextureSize(128, 128); - front.mirror = true; - setRotation(front, 0F, 0F, 0F); - front2 = new ModelRenderer(this, 0, 24); - front2.addBox(-4F, -2F, 0F, 8, 4, 1); - front2.setRotationPoint(0F, 16F, -7F); - front2.setTextureSize(128, 128); - front2.mirror = true; - setRotation(front2, 0F, 0F, 0F); - front3 = new ModelRenderer(this, 0, 16); - front3.addBox(-3F, -3F, 0F, 6, 6, 1); - front3.setRotationPoint(0F, 16F, -7F); - front3.setTextureSize(128, 128); - front3.mirror = true; - setRotation(front3, 0F, 0F, 0F); - Mid3 = new ModelRenderer(this, 40, 29); - Mid3.addBox(-5F, -1F, -6F, 10, 10, 12); - Mid3.setRotationPoint(0F, 12F, 0F); - Mid3.setTextureSize(128, 128); - Mid3.mirror = true; - setRotation(Mid3, 0F, 0F, 0F); - FrontConnector = new ModelRenderer(this, 0, 120); - FrontConnector.addBox(-2F, 0F, -2F, 4, 4, 4); - FrontConnector.setRotationPoint(0F, 14F, -6F); - FrontConnector.setTextureSize(128, 128); - FrontConnector.mirror = true; - setRotation(FrontConnector, 0F, 0F, 0F); - } - - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - - } - public void RenderMain(float f5) - { - BasePlate.render(f5); - Mid.render(f5); - Mid2.render(f5); - front.render(f5); - front2.render(f5); - front3.render(f5); - Mid3.render(f5); - FrontConnector.render(f5); - } - public void RenderLeft(float f5) - { - LeftConnection.render(f5); - } - public void RenderRight(float f5) - { - RightConnection.render(f5); - } - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } - -} diff --git a/src/minecraft/SteamPower/renders/ModelTank.java b/src/minecraft/SteamPower/renders/ModelTank.java deleted file mode 100644 index dd10d46f..00000000 --- a/src/minecraft/SteamPower/renders/ModelTank.java +++ /dev/null @@ -1,148 +0,0 @@ -// Date: 8/14/2012 1:48:41 AM -// Template version 1.1 -// Java generated by Techne -// Keep in mind that you still need to fill in some blanks -// - ZeuX - - - - - - -package dark.SteamPower.renders; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.entity.Entity; - -public class ModelTank extends ModelBase -{ - //One Block Tank - ModelRenderer TANK_WALL_1; - ModelRenderer TANK_WALL_2; - ModelRenderer TANK_WALL_3; - ModelRenderer TANK_WALL_4; - ModelRenderer TANK_SUPPORT_1; - ModelRenderer TANK_TOP_1; - ModelRenderer TANK_WALL_5; - ModelRenderer TANK_SUPPORT_2; - ModelRenderer TANK_SUPPORT_3; - ModelRenderer TANK_WALL_6; - ModelRenderer TANK_TOP_2; - ModelRenderer TANK_TOP_3; - ModelRenderer TANK_VALVE; - - public ModelTank(float par1) - { - textureWidth = 128; - textureHeight = 128; - - TANK_WALL_1 = new ModelRenderer(this, 0, 49); - TANK_WALL_1.addBox(0F, 0F, 0F, 1, 12, 8,par1); - TANK_WALL_1.setRotationPoint(6F, 12F, -4F); - TANK_WALL_1.setTextureSize(128, 128); - TANK_WALL_1.mirror = true; - setRotation(TANK_WALL_1, 0F, 0F, 0F); - TANK_WALL_2 = new ModelRenderer(this, 0, 70); - TANK_WALL_2.addBox(0F, 0F, 0F, 1, 12, 7,par1); - TANK_WALL_2.setRotationPoint(-8F, 12F, -4F); - TANK_WALL_2.setTextureSize(128, 128); - TANK_WALL_2.mirror = true; - setRotation(TANK_WALL_2, 0F, 0F, 0F); - TANK_WALL_3 = new ModelRenderer(this, 0, 34); - TANK_WALL_3.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_3.setRotationPoint(0F, 12F, 8F); - TANK_WALL_3.setTextureSize(128, 128); - TANK_WALL_3.mirror = true; - setRotation(TANK_WALL_3, 0F, 2.617994F, 0F); - TANK_WALL_4 = new ModelRenderer(this, 0, 34); - TANK_WALL_4.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_4.setRotationPoint(0F, 12F, -8F); - TANK_WALL_4.setTextureSize(128, 128); - TANK_WALL_4.mirror = true; - setRotation(TANK_WALL_4, 0F, -0.5235988F, 0F); - TANK_SUPPORT_1 = new ModelRenderer(this, 43, 22); - TANK_SUPPORT_1.addBox(-1F, 0F, -8F, 2, 14, 16,par1); - TANK_SUPPORT_1.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_1.setTextureSize(128, 128); - TANK_SUPPORT_1.mirror = true; - setRotation(TANK_SUPPORT_1, 0F, 0F, 0F); - TANK_TOP_1 = new ModelRenderer(this, 43, 11); - TANK_TOP_1.addBox(-8F, 0F, -4F, 16, 2, 8,par1); - TANK_TOP_1.setRotationPoint(0F, 10F, 0F); - TANK_TOP_1.setTextureSize(128, 128); - TANK_TOP_1.mirror = true; - setRotation(TANK_TOP_1, 0F, 0F, 0F); - TANK_WALL_5 = new ModelRenderer(this, 0, 34); - TANK_WALL_5.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_5.setRotationPoint(0F, 12F, -7F); - TANK_WALL_5.setTextureSize(128, 128); - TANK_WALL_5.mirror = true; - setRotation(TANK_WALL_5, 0F, -2.617994F, 0F); - TANK_SUPPORT_2 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_2.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_2.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_2.setTextureSize(128, 128); - TANK_SUPPORT_2.mirror = true; - setRotation(TANK_SUPPORT_2, 0F, 1.047198F, 0F); - TANK_SUPPORT_3 = new ModelRenderer(this, 0, 0); - TANK_SUPPORT_3.addBox(-1F, 0F, -9F, 2, 14, 18,par1); - TANK_SUPPORT_3.setRotationPoint(0F, 10F, 0F); - TANK_SUPPORT_3.setTextureSize(128, 128); - TANK_SUPPORT_3.mirror = true; - setRotation(TANK_SUPPORT_3, 0F, -1.047198F, 0F); - TANK_WALL_6 = new ModelRenderer(this, 0, 34); - TANK_WALL_6.addBox(0F, 0F, 0F, 8, 12, 1,par1); - TANK_WALL_6.setRotationPoint(0F, 12F, 7F); - TANK_WALL_6.setTextureSize(128, 128); - TANK_WALL_6.mirror = true; - setRotation(TANK_WALL_6, 0F, 0.5235988F, 0F); - TANK_TOP_2 = new ModelRenderer(this, 43, 0); - TANK_TOP_2.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_2.setRotationPoint(0F, 10F, 0F); - TANK_TOP_2.setTextureSize(128, 128); - TANK_TOP_2.mirror = true; - setRotation(TANK_TOP_2, 0F, 1.047198F, 0F); - TANK_TOP_3 = new ModelRenderer(this, 43, 0); - TANK_TOP_3.addBox(-6F, 0F, -4F, 12, 2, 8,par1); - TANK_TOP_3.setRotationPoint(0F, 10F, 0F); - TANK_TOP_3.setTextureSize(128, 128); - TANK_TOP_3.mirror = true; - setRotation(TANK_TOP_3, 0F, -1.047198F, 0F); - TANK_VALVE = new ModelRenderer(this, 84, 0); - TANK_VALVE.addBox(0F, 0F, 0F, 2, 1, 2,par1); - TANK_VALVE.setRotationPoint(-1F, 9F, -1F); - TANK_VALVE.setTextureSize(128, 128); - TANK_VALVE.mirror = true; - setRotation(TANK_VALVE, 0F, 0F, 0F); - } - @Override - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) - { - super.render(entity, f, f1, f2, f3, f4, f5); - setRotationAngles(f, f1, f2, f3, f4, f5, entity); - } - public void generalRender(float f5) - { - TANK_WALL_1.render(f5); - TANK_WALL_2.render(f5); - TANK_WALL_3.render(f5); - TANK_WALL_4.render(f5); - TANK_SUPPORT_1.render(f5); - TANK_TOP_1.render(f5); - TANK_WALL_5.render(f5); - TANK_SUPPORT_2.render(f5); - TANK_SUPPORT_3.render(f5); - TANK_WALL_6.render(f5); - TANK_TOP_2.render(f5); - TANK_TOP_3.render(f5); - TANK_VALVE.render(f5); - } - - private void setRotation(ModelRenderer model, float x, float y, float z) - { - model.rotateAngleX = x; - model.rotateAngleY = y; - model.rotateAngleZ = z; - } -} diff --git a/src/minecraft/SteamPower/renders/RenderBoiler.java b/src/minecraft/SteamPower/renders/RenderBoiler.java deleted file mode 100644 index 22a531d7..00000000 --- a/src/minecraft/SteamPower/renders/RenderBoiler.java +++ /dev/null @@ -1,63 +0,0 @@ -package dark.SteamPower.renders; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import dark.BasicUtilities.api.MHelper; -import dark.SteamPower.SteamPowerMain; -import dark.SteamPower.boiler.TileEntityBoiler; - -public class RenderBoiler extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelTank model; - private ModelCenterTank model2; - private ModelCornerTank model3; - - public RenderBoiler(float par1) - { - model = new ModelTank(par1); - model2 = new ModelCenterTank(par1); - model3 = new ModelCornerTank(par1); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - TileEntity[] connected = ((TileEntityBoiler)tileEntity).connectedBlocks; - int meta = 0; - if(connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler)tileEntity).tankCount < 2 ) - { - bindTextureByName(SteamPowerMain.textureFile+"tankTexture.png"); - model.generalRender(0.0625F); - } - else - if(MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler)tileEntity).tankCount > 2) - { - bindTextureByName(SteamPowerMain.textureFile+"tankBlock.png"); - model2.renderBlock(0.0625F); - } - else - { - int corner = MHelper.corner(tileEntity); - bindTextureByName(SteamPowerMain.textureFile+"CornerTank.png"); - switch(corner) - { - case 1: GL11.glRotatef(270f, 0f, 1f, 0f);break; - case 2: GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 3: GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 4: GL11.glRotatef(180f, 0f, 1f, 0f);break; - } - model3.renderCorner(0.0625f); - - } - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/renders/RenderFurnace.java b/src/minecraft/SteamPower/renders/RenderFurnace.java deleted file mode 100644 index 146f9b87..00000000 --- a/src/minecraft/SteamPower/renders/RenderFurnace.java +++ /dev/null @@ -1,39 +0,0 @@ -package dark.SteamPower.renders; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import dark.SteamPower.SteamPowerMain; - -public class RenderFurnace extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelFurnace model; - - public RenderFurnace() - { - model = new ModelFurnace(); - } - - - @Override - public void renderTileEntityAt(TileEntity te, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Furnace.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = te.worldObj.getBlockMetadata(te.xCoord, te.yCoord, te.zCoord); - switch(meta) - { - case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; - case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.genRender(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/renders/RenderGearPiston.java b/src/minecraft/SteamPower/renders/RenderGearPiston.java deleted file mode 100644 index 9a217943..00000000 --- a/src/minecraft/SteamPower/renders/RenderGearPiston.java +++ /dev/null @@ -1,51 +0,0 @@ -package dark.SteamPower.renders; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import dark.SteamPower.SteamPowerMain; -import dark.SteamPower.steamengine.TileEntitySteamPiston; - -public class RenderGearPiston extends TileEntitySpecialRenderer -{ - private ModelGearPiston model; - - public RenderGearPiston() - { - model = new ModelGearPiston(); - } - public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"GearShaftPiston.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - - 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 0:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.renderGear(0.0625F); - model.renderR(0.0625F,tileEntity.pos); - model.renderBody(0.0625F); - model.renderBack(0.0625F); - model.renderFront(0.0625F); - model.renderLeft(0.0625F); - model.renderRight(0.0625F); - GL11.glPopMatrix(); - } - - - @Override - public void renderTileEntityAt(TileEntity var1, double d, double d1, - double d2, float d3) { - this.renderTileEntityAt(((TileEntitySteamPiston)var1), d, d1, d2, d3); - - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/renders/RenderGenerator.java b/src/minecraft/SteamPower/renders/RenderGenerator.java deleted file mode 100644 index abe76e73..00000000 --- a/src/minecraft/SteamPower/renders/RenderGenerator.java +++ /dev/null @@ -1,39 +0,0 @@ -package dark.SteamPower.renders; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import dark.SteamPower.SteamPowerMain; - -public class RenderGenerator extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelGenerator model; - - public RenderGenerator() - { - model = new ModelGenerator(); - } - - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(SteamPowerMain.textureFile+"Generator.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch(meta) - { - case 0:GL11.glRotatef(0f, 0f, 1f, 0f);break; - case 1:GL11.glRotatef(90f, 0f, 1f, 0f);break; - case 2:GL11.glRotatef(180f, 0f, 1f, 0f);break; - case 3:GL11.glRotatef(270f, 0f, 1f, 0f);break; - } - model.RenderMain(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/minecraft/SteamPower/steamengine/BlockSteamPiston.java b/src/minecraft/SteamPower/steamengine/BlockSteamPiston.java deleted file mode 100644 index acffd50a..00000000 --- a/src/minecraft/SteamPower/steamengine/BlockSteamPiston.java +++ /dev/null @@ -1,130 +0,0 @@ -package dark.SteamPower.steamengine; - -import java.util.Random; - -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import dark.SteamPower.SteamPowerMain; - -public class BlockSteamPiston extends universalelectricity.prefab.BlockMachine -{ - - public BlockSteamPiston(int par1) - { - super("SteamEngine", par1, Material.iron); - - } - - @Override - public boolean onUseWrench(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int angle = MathHelper.floor_double((par5EntityPlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = par1World.getBlockMetadata(x, y, z); - if (metadata < 3) - { - par1World.setBlockAndMetadata(x, y, z, blockID, metadata + angle); - } - else - { - par1World.setBlockAndMetadata(x, y, z, blockID, 0); - } - return true; - } - - public TileEntity createNewTileEntity(World var1) - { - return null; - } - - public void breakBlock(World world, int x, int y, int z, int par5, int par6) - { - super.breakBlock(world, x, y, z, par5, par6); - int meta = world.getBlockMetadata(x, y, z); - if (meta < 4) - { - if (world.getBlockId(x, y + 1, z) == this.blockID) - { - if (world.getBlockMetadata(x, y, z) > 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - else if (meta > 4) - { - if (world.getBlockId(x, y - 1, z) == this.blockID) - { - if (world.getBlockMetadata(x, y, z) < 4) - { - world.setBlockAndMetadataWithUpdate(x, y, z, 0, 0, true); - } - } - } - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public int getRenderType() - { - return -1; - } - - @Override - public TileEntity createNewTileEntity(World world, int metadata) - { - if (metadata >= 0 && metadata < 4) { return new TileEntitySteamPiston(); } - if (metadata == 14) - { - } - return null; - } - - public void onNeighborBlockChange(World par1World, int par2, int par3, - int par4, int par5) - { - int meta = par1World.getBlockMetadata(par2, par3, par4); - if (meta < 4) - { - if (par1World.getBlockId(par2, par3 + 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - else - { - if (par1World.getBlockId(par2, par3 - 1, par4) != this.blockID) - { - par1World.setBlockWithNotify(par2, par3, par4, 0); - } - } - } - - @Override - public int idDropped(int par1, Random par2Random, int par3) - { - return SteamPowerMain.itemEngine.shiftedIndex; - } - - @Override - public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4) - { - int var5 = par1World.getBlockId(par2, par3, par4); - int var6 = par1World.getBlockId(par2, par3 + 1, par4); - return (var5 == 0 || blocksList[var5].blockMaterial.isReplaceable()) - && (var6 == 0 || blocksList[var6].blockMaterial.isReplaceable()); - } -} diff --git a/src/minecraft/SteamPower/steamengine/ItemSteamPiston.java b/src/minecraft/SteamPower/steamengine/ItemSteamPiston.java deleted file mode 100644 index dd9523a2..00000000 --- a/src/minecraft/SteamPower/steamengine/ItemSteamPiston.java +++ /dev/null @@ -1,76 +0,0 @@ -package dark.SteamPower.steamengine; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import dark.SteamPower.SteamPowerMain; - -public class ItemSteamPiston extends Item { - public ItemSteamPiston(int par1) { - super(par1); - this.maxStackSize = 5; - this.setCreativeTab(CreativeTabs.tabBlock); - this.setIconIndex(21); - } - - @Override - public void getSubItems(int par1, CreativeTabs par2CreativeTabs, - List par3List) { - par3List.add(new ItemStack(this, 1, 0)); - } - - @Override - public String getTextureFile() { - // TODO Auto-generated method stub - return SteamPowerMain.textureFile + "Items.png"; - } - - public boolean onItemUse(ItemStack stak, EntityPlayer player, World par3World, int x, int y, int z, int par7, float par8, float par9, float par10) - { - if (par7 != 1) - { - return false; - } - else - { - ++y; - Block piston = SteamPowerMain.piston; - - if (player.canPlayerEdit(x, y, z, par7, stak) && player.canPlayerEdit(x, y + 1, z, par7, stak)) - { - if (!piston.canPlaceBlockAt(par3World, x, y, z)) - { - return false; - } - else - { - int angle = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; - placeTwoHigh(par3World, x, y, z, angle, piston); - --stak.stackSize; - return true; - } - } - else - { - return false; - } - } - } - - public static void placeTwoHigh(World par0World, int par1, int par2, int par3, int angle, Block par5Block) - { - par0World.editingBlocks = true; - par0World.setBlockAndMetadataWithNotify(par1, par2+1, par3, par5Block.blockID, 14); - par0World.setBlockAndMetadataWithNotify(par1, par2, par3, par5Block.blockID, angle); - par0World.editingBlocks = false; - par0World.notifyBlocksOfNeighborChange(par1, par2, par3, par5Block.blockID); - par0World.notifyBlocksOfNeighborChange(par1, par2 + 1, par3, par5Block.blockID); - } - -} diff --git a/src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java b/src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java deleted file mode 100644 index 765794ad..00000000 --- a/src/minecraft/SteamPower/steamengine/TileEntitySteamPiston.java +++ /dev/null @@ -1,278 +0,0 @@ -package dark.SteamPower.steamengine; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.INetworkManager; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.prefab.network.IPacketReceiver; - -import com.google.common.io.ByteArrayDataInput; - -import dark.BasicUtilities.api.IForce; -import dark.BasicUtilities.api.IReadOut; -import dark.Library.prefab.TileEntityMachine; -import dark.SteamPower.SteamPowerMain; - -public class TileEntitySteamPiston extends TileEntityMachine implements IPacketReceiver,IForce, IReadOut -{ - public int force = 0; - public int aForce = 0; - public int bForce = 0; - private int frictionLoad = 10; - public int steam = 0; - public int water = 0; - 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; - public int tCount = 0; - private ForgeDirection frontDir; - public TileEntity ff; - public TileEntity bb; - private int pWater = 0; - private int pSteam = 0; - private int pForce = 0; - public int pCount = 0; - public boolean running = false; - - @Override - public void updateEntity() - { - super.updateEntity(); - if (tickCount++ >= 10) - { - tickCount = 0; - // this.pos += 1; if(pos >= 8){pos = 0;} - // ++tCount;if(tCount > 120){tCount = 0;} - - int meta = worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - int nMeta = 0; - - switch (meta) - { - case 0: - nMeta = 2; - break; - case 1: - nMeta = 5; - break; - case 2: - nMeta = 3; - break; - case 3: - nMeta = 4; - break; - } - frontDir = ForgeDirection.getOrientation(nMeta); - ff = worldObj.getBlockTileEntity(xCoord + frontDir.offsetX, yCoord + 1, zCoord + frontDir.offsetZ); - bb = worldObj.getBlockTileEntity(xCoord + frontDir.getOpposite().offsetX, yCoord + 1, zCoord + frontDir.getOpposite().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 (!worldObj.isRemote) - { - if (this.runTime < 1 && this.steam > 0) - { - this.steam--; - this.runTime = 60; - } - if (bb instanceof IForce) - { - if (((IForce) bb).canOutputSide(frontDir)) - { - this.bForce = ((IForce) bb).getForce(); - } - else if (bb instanceof TileEntitySteamPiston) - { - if (((TileEntitySteamPiston) bb).getMeta() == this.getMeta()) - { - this.bForce = ((TileEntitySteamPiston) bb).getForce(); - } - } - else - { - this.bForce = 0; - } - } - if (this.runTime > 0) - { - genRate = Math.min(genRate + 1, 100); - this.runTime -= 1; - this.force = Math.min(genRate * 10, 1000); - this.aForce = Math.max(force - this.frictionLoad + bForce, 0); - } - if (runTime == 0 && this.steam == 0) - { - genRate = Math.max(genRate--, 0); - force = Math.max(force -= 10, 0); - ; - } - - if (ff instanceof IForce) - { - if (((IForce) ff).canInputSide(frontDir.getOpposite())) - { - ((IForce) ff).applyForce(this.aForce); - } - else - { - - } - } - pWater = this.water; - pSteam = this.steam; - pForce = this.force; - - } - } - } - - // ------------------- - // Liquid and mechanical stuff - // ---------------- - @Override - public int getForceSide(ForgeDirection side) - { - return aForce; - } - - @Override - public boolean canOutputSide(ForgeDirection side) - { - if (frontDir.getOpposite() == side) { return true; } - return false; - } - - @Override - public boolean canInputSide(ForgeDirection side) - { - if (frontDir == side) { return true; } - return false; - } - - @Override - public int applyForce(int force) - { - this.bForce = force; - return aForce; - } - // ------------------- - // Data - // ---------------- - public Object[] getSendData() - { - return new Object[] - { steam, water, force, aForce, genRate, runTime }; - } - - public boolean needUpdate() - { - if (this.pForce != this.force || this.pWater != this.water || this.pSteam != this.steam) { return true; } - return false; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, - Packet250CustomPayload packet, EntityPlayer player, - ByteArrayDataInput dataStream) - { - try - { - this.steam = dataStream.readInt(); - this.water = dataStream.readInt(); - this.force = dataStream.readInt(); - this.aForce = dataStream.readInt(); - this.genRate = dataStream.readInt(); - this.runTime = dataStream.readInt(); - ++pCount; - } - catch (Exception e) - { - System.out.print("SteamPistonDataFail"); - e.printStackTrace(); - } - - } - - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.runTime = par1NBTTagCompound.getInteger("time"); - this.genRate = par1NBTTagCompound.getInteger("gen"); - this.steam = par1NBTTagCompound.getInteger("steam"); - this.water = par1NBTTagCompound.getInteger("water"); - } - - /** - * Writes a tile entity to NBT. - */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("time", (int) this.runTime); - par1NBTTagCompound.setInteger("gen", (int) this.genRate); - par1NBTTagCompound.setInteger("steam", (int) this.steam); - par1NBTTagCompound.setInteger("water", (int) this.water); - - } - - @Override - public int getAnimationPos() - { - // TODO Auto-generated method stub - return this.pos; - } - - @Override - public int getForce() - { - // TODO Auto-generated method stub - return this.force; - } - - public int getMeta() - { - return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); - } - - @Override - public String getChannel() - { - return SteamPowerMain.channel; - } - - @Override - public int getSizeInventory() - { - return 0; - } - - @Override - public String getMeterReading(EntityPlayer user, ForgeDirection side) - { - return this.aForce+"N Out "+this.bForce+"N In"; - } -} diff --git a/src/minecraft/generaltextures/GearShaftPiston.png b/src/minecraft/generaltextures/GearShaftPiston.png deleted file mode 100644 index fa16d1d6bc1d035e3855f439bb3c6335495bb65c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!T#PKTitjb45_&F z_Kt1Pp#TxK3*vQB<_Fk}3~~;hisPQ1wQ%p$=z@|P4AL7C4a`#5loUB_j1(=G2X%;i zczW-5oQfjQR0#MxG3FPOJb(GkfA7D)xA#2rc;~u_+Y@f6{oZe5YbQTv?)rTFbAF-? z2SXZ)tNz95pRYetc3f0`ef6GIm(v)!QunV>&0vpWU}E^<6|{|IO_JILrWc;9C(1+@ zyz$`|J-?bo%VDR9?`9KU{g*yB~knRujJdN6h8pnc+cq`egf;CH~&cdGz?YLS2Rb?jirf%92GFoNSkV9ieE* ztiZs*z|_DXkS&@ZnV31` zJqkOneZbPX^XL65JM|l*FJ&?Ut#sJ!oFL6pAfeR0z5cp?!Hc(14BO)vSDpLwsPMQJ zqZY$NmDsfm%hMRGt}u1Uui*FL1_jSAOXd*X!ZapPpqmU%A6T}91;_$P0D}(_-7r$> Z2lMyImjd>!kbead@^tlcS?83{1OS^U6FL9@ diff --git a/src/minecraft/generaltextures/Items.png b/src/minecraft/generaltextures/Items.png deleted file mode 100644 index 3a5c5cafe657afcad99e6de3daa51e66d7c4b2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29075 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
    lrdx^KPA8^8k`Zj?Lv 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 QOa#eGD}So~X!7lU0b{|gWB>pF diff --git a/src/minecraft/generaltextures/Thumbs.db b/src/minecraft/generaltextures/Thumbs.db deleted file mode 100644 index 6f09712583aaaee9d427965de7142e6df0557700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34816 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 z
      PR@kU-t9P?5zW^4_@y%I$AyS=}W*e6NJ%QK#D&=c?RDxJGZJhB1j;*3dn(TUs zMV1skrZj)t6-t}11*+3bpj+8PJzMyQwlK%~y36v15?nFR9b;lBurvR1X3gtp4n?q8 zN~8uJu`{jn0DGLbyz@4LrW(Dl;u>sV7MI_@e@h2$KSU|)Fd|6|=XM*Hnz8Hc{j?VZ zkXCZ9UI}gm_P7j971Q4LNLD8O_$lVHJbmds!FSVk$|d=>#ttV>;FDq)!S^>LZJk-o zPKYv|62LU{f7)f*=23Gu>1GUypqZ4u4xz|5r>BpyDW;85nb?aAMGTDhGQ>@Wd?@-F zPW{0*5S$<mR%%VUwAnhShD>D5NoPysH%Zh1V+Z@jy$ol?$fbz=YM}u#4G%n)D@_ z-qAspF1FK3{zILP%VM=}KGl7r)g`kL(W0RTCMN1)mi2kp?v-GYJty0&XAxKGCTkz- zvU$u6zwIMhQCg2*OQx0%Hh=m+<2${o%<{6i=R*cI1V=_j z?uxaWx9_M*DDkfsM?lr*Bk0Aw5AZtA=KnNLqXB*w_epH({W{YKs4|+4n23;gTYr2E zpQjl(xCHmOtt55+JfHu4Gvg69wxU6z*&1-U74s&)TO)H8MvQj5NH4&@{gYkES2X6J zptf2+P`oO^|31fsGdz>y?^w)qrk4-?)`nj=NI2Us#(lHRV^wE0vM23Ui879}%CbR6 zjycCZhQ-A)eWTJ_Hb4H0?+X{cJGA%zh$`zbK|ouNnG!#rU`3!I^W~({+XTb%yp5~L z#5W4R<-PT!;s!{4$Ki0;$AKN?dUaKO7s{|A`vHevRR--hT2DjfRMK?HVw$mSQ_ABV z>Z+MedrLokh1&c##whJ~BL+e&Qku&cwFUCRJEn+ZIYC!J4DHcNSX-#hjgDLlon z?0)4>0~t|FSLSes^YjPZ%`2sK34Ug4XFi7#YRNtR{DP>s>Nevwj5<2|>WVwRQ&*y~ zJxuy|t>3a>H9tZ2&2}7<1iV2dMA_FQ%k#v&#Q9h>_mTn2(;nB1j^zD|>I37_R5@nr zE4I92=F_(NfvrWbg64%UDqmek7^cC18{wNW>)Nb6?^g>3z-E=J6z!ihlm0A3Z&VpFZ7s zB!FB{o$R=|{(9tmCrE(uVJE0=V0RXwklKQKeieP~)n|!_Zd>;9jRF&A{Vt(oKCWog zJUvG9sm1Bp$!f0a4;B}$>RQ+l4uH`EE|42HZuovM%BKJE>sOI`_2-y2*6V17f>ra* zH-;+O#>U1YRaSD>uU}8z2amsuD@gpd!~!0HGf+KL&)aTR_T5*EqW$7Erf^NPGFh_F z>%#q=y6%40QF)+9Y8V{CNP%0S$++*Ce8*aG0ns#SC0LSh>y-^S%&ZpPv~czyf4oi3 zIc6a))rQbJj_8xNu{Yr`XBX=Did5hi3TgWhqQOLy8fIy*Sem1j7U$#lrd1|_C<2O- z)DWUN1?IIZTHy`jEC6f7JC1fq&<$DHv5I#uUeINzgf`tj0eO48Q}8d}JlSQ40IzZ4 zvrpHt- zgK+QRc>#tD35g}JxofX`?!Mz3aRUZNPxcv<>uj8QL+e_CI=GAT` zaWB8vEKa4ha)_mL>q7>b?yCV`z9pcXe(lV^pS_&N*VAwYs^<=W&0G%vHoP1AxA{@$ z`MtK>+P}uJ(u&X~!ib-mF>`uJP=ib}Y z{&BtGfKu&$wfvUuML1 zCzdvkesriofuCzQ;^@V61%IW~@{`U{%GmN&?60>Y+qN*OnmG@7 zCC`K3)6j#%rivz5wor*bk0@4Qo)`Soj+Orz5R}P0tv+9x*0a10 z$kN9xcV68!AKEv80-n;8^UmuwKx;N~y@Wr$VX#@w-K?=;!sTKOhMhI!&QIl$K!m2uN9l36a4&att{T9*j0#FUp z&y+1r5!n#(c(%sE#gr-|z*!$24ZwrOD7_g$dk5pye0uaD(-g;N^^C>O1Cq|;=e+2O z_s>jwa4cYjx!#H=2Qf*qcGO`We8*dzsb312IJCYG9P~a~%ep%*`8x9Au{>`8fuK^A zY?-Cl7dcCJtOkI*)zJnQxQDY&54QRDjXDzN+9-jX{S_!XC7=RFY*ML8PF?sKVYjoh zz=s9q1ubSEMQmWrh>oX_yz)~PaK@|4OszAIEyLS&pJyj87O}8Q#Vq$&P{I7b>Ock{ zOFK#(%L4Gl?;TK_QHpbOXy0>g3Vvgz4)8qU+KPd;w!{a3%Uy$Rg$I+%Y;(PnK`A1M z+zKJ#YKuqrR{OG-OIWChia=tm zKy4YZ0djdsX7l#|m#&km$Uw#yx-@WJ1cQ!he={|K3VkLxK1u(4u9fPzR-Vs+!a;5@6(JW5<1lB@V$5ZA(9>c!_o_q$4)B-uzGRYfN(rGI6`d3C7+4?#a1pkTM4cz zWn|NZAi{gj&*sR;CJ&3L9bA}IeSCd#iYu2XMCsyshE|5<)?`1H9>0BPTtPK|lycM@ zLz~;mDM-o)x2@u#2e&!19hXQvi@#D+U-{ji{T0IuEp7~AuV>=3S|9qz={H)A?z^Q? z{0ZxASIN6BqgC!9vwu>~2-mHVxoe%C@;CN&uF!X@qTCZI4*%d|EH&~hEtL*`YC%Ah zQUhmQ+Ub*>JmWtu8FfMK(oyDvDBb&d{C6sNuVKrqRH6WI;(i0V7t=tks=^Qv5lYfD zgkoYBz1neMAmiZy!g|MnYJ|hkMkzG=R7e65{UYHC{N6NrK8l$R___V5!y-HJb!l_Q0;i99Sgmhe_*)e ztYag4Ub!aL=v*uITv>%=!R~n{qlM@@*{&xnz{HCe?TRb);})fiF9SS2P89_xZ@v ze^%3VMEljQTkA6%jGQyB+)#|yOLp&AV+S;$RNy?Tqkx1y?IhgbwDjc1e!tIJ4EJho zF0dJ#m--3mEtv63rQ}E8{aBBR)~^tBcr)vgFO%SnepM%a6B#R(GU=^ujRK^4E(Ut3 z0ar%<5Z4=kJQ#p2HnY0+SL=26i{yX6Sul&W>v013cXHZ>ffp~aaWn_?oN%{Io&-*Q zJOx5ex}o(!zrzqeXV$W1PVQT#ss(*E9jT7&33xHKqC|<;PGB9{Qp^90Cxz3Z~YZ<@tMQ-_@olF zSL;FQR2a118#)zLo2x7=+~v+|hC4RNu6vXyQMtxrnF)x)LONpK5(XLEc7O6D?)e}N zo*VZOjc0h^%aJxu#(WAIZIAnJb`^2FnZc=FwPUeOaDLQSz@glZvWPt4VJc3!-4s+! z6Snh?3W(%865k%qS=qG3Iu4_oDXTfZHu)7y-(J2S-cMHFFe`aO?*l=6ijfkjABv)N ztoD)r(pq-1mwt&d;v#sR?lLtgfmiXpRw5tyef*^;zGR|jbi9;qrIm#FK4?WkmzSMT zc}BIoiksdLWy0nZZh9Z}!_6gpuA+3}m-PK7KdqNPOCY8K#x;d(Baq>+KP|+Oa_dUH zToJvUG*V5{^_LM^$VzqcIag0iu3qVw z8IvoJ6F3{x#pr8606peW?^>3JWt}AK$LoH-m9+i#o`FElJA3%jubo5(BEtPte4%u0s8?19K=p?^wp@-pR>CpKl#A zSN)R_ieRRcbD(w_JK!`xS#$jmf0rg!XaEd^A&I-jgvXS}wLM-MnzS86Tj6Knwg9iP zN-aOY7!@AyEU%Y--fI?5*?RNxvF-YWjf2Wk7aUPj=1pdw!DSgHmxeThtz^U196!(j zW;Rw_@rs5f<;d1F>*CXm*i3{%?wfv1{imVB2QTkUj~j;iP^k&-$N~7?%*N8yTzEe{ z9dq>cvojDxo{5;D>@jh@2!qYb9u2aLDrZed)50qPl{h^cLF*ZvC>u0a# z81V1ehxkA6?|h&Fe&jx^9sP`|Y`-QO`s2B^{gX>CR^h)Q83Fh+WJur8gT609pZnf_ zT)4S?eElW-Va8R#oK6X3jy{qd^Db`O@4NlsuF5mJ4Azo*2#djoBSX%W@N#q_E469(H)O0KuM?C$Ceti4=)vAr>nT@YxD$3{j zXUMZSSi8q#<}kIMHm2K3vB-f`$_D7XQ=U7i&F80i!o6~dr}IQY|Lo$(K0QmkvdTzU z)GF1$?{sS7iyLQCo;xq+cx|2y3@&_ZZXGe$WY3gb09!Wrel~B}DbT(g1uR3a3;3H~ z+(*g@is|_<&W?KorYkK<*e*6^3E!HZH2MNkCj7`JxNN65=m}p;U)gKp<>j@!J=pOu z%`%LnVfYh`nQ2g0tsw4uS+H3i*t;~C5>7pHv`mPv(38%SN>)&t^<$sIz^7f=Z)OnW zIs69-^e#vL4#!heTb|d=UqJ~^l|(yo-`HI3U}l{E5NzNRIhXqxK*Ge^l$G}|`%Ueu zHy^YHQsh8gq9cyC3@ScGPR`mUjVb;6yP176n1Nx6X+ZwGYw&4* z7qh?WUH&J2MLJcgoROc_2LBP|4tBGbGsxIPzHZ;KGjE0!n;H4$4e2L7K=@Zw&CqYI=@qMpmFZk+r&bv+s}H{=G$)SN(fT~ z{n7h;I4S?LTm>GCQ28@rOyH4fEH>T%X}A*cCr`I)Jhugq*C|JoF5;hs^}RZhS2@K9 z9x#j@`h9qP~&+}-fSm~qE^+I~QHHf-X$@lpS#CF5eO@W92w zUo%b{52}4G?kqZA$rz4pli!2F$4Nh5 zkXknTUUnS=O^RWsWoKON=7Hno^;xv4{pXHqiXxxSLi3xxIL;Z{c8CG@N885uLLe1{ z%2Pis<*qzH={xZqefvQja~sC40g8CQuL{A)Q!^e$$Ivg*{=$oNI1XQnpbKlAotyjc z>Y-jgX{KS23NTLVbwi2K^1oXdddl6ppbWct(iKtc+hD_V@XoxTxdrr*20w+Zsj?55q8r*1RnOVRjh06kVg_ijrovA?$LQ}y{W7UnU9MMjVH<*&Lcg$A1^aJj0Id3Io86ND@* zjfInDN!c~0%^I0AS@d0Nx)~o>FW+Z^6gL!IU((awG=WvrfL*2O2Wh2tIoBdK3YHyeBEy<`o|; zCo;Q+{$5}FEVZcQTr z#NLjOyecl9ia2)>cL&>?Vqz_8pG}%K82`BDK_*@G0CrN;u&)U9;2}U?w^7BKCd6fF3X*0RgLZ3$J+$v;~BZn;~#Pg(YOmk2&W8~ zlXDhZS|~5aFU(WHonH#e?mRJvFC~@Y*H1XG68ZhIYy)*Khpt{JeSVX^yNLg4D3<*N zgx*IB3GLszW0(Np8Yl;4h75E{kU~;6w?^Ly^)0DNPePVB3g3RU;r~hveS%wPmm=b) zAb32F?B)?Y`t03SSJYgvBI#NzB~M7Wtu?JAJm2!o!_Hl4S&S+x1R>BT@(Q(!CNCO& zD-Pld(xAXh2qgz>>DASl>8)IyZ=qG>o?743hD8994XCAtxlgAAa`DJgmuLIvtTLiSTk6F2q(=BqARPAsy zOgHpM1;;<5xO}~~N9t`((4jS&5_u|K`Y|yXhT0Skbc9nOb0XRClV2wpVP@gbw_5zw zQB6I}N19CU-7lCiXz)|k^fA8z5K|BN{&@0hD#OxxHC5rQt>h&L=2mO?Gp7KRtRxnr zG@xN#t4)cL6Zj)!p)kWT{``!-o1s` zZCXyen~f->{v!x?^xag z#bi7pu5-#E$tVg)&&G=m`mV45a7~S8p7o>S?^joq$cqdVVFLkB_BHAjxJNf+oDV?H zS_${ZepM!N zIWa;rZ4XzK$FC-YxQTX zn$wDm6%SiUnFSA6{M1NHkm|@6cLMRHV?Ql2)ji%L&poE8=%=?%Kd*;!h zFAYDI@~f>VW5BD43SEgk-xo1LJy3byqIkI4uO;1mqiko-Q`21y+8aivQJ*9r#@w>E zTQ{Vy+gg*xML3YT2Ya`h_P?m~rK4unMk40o`M#Vav(gN}JQcnL?H`L9Kq$mWNi^hf zM;__Ws`RuwxerDAc2*ab>ipvAz>H3KqGK3jH|M_SK9vEkEOcXiKp0^dl$fw9XJM| zB|@IQ1#}<&5Gy0c z!vqs$9^Z(RNEkS6?^+e~sm{^LfafzG5^)EadKP7`0hCioN`K6)5<`DE4J@^arT zj*l@F>iT^aX|6b%m^J;rXL3cc{mM~1ku%;-y6jaiWxtr+97$tucg3ye-v9IAe5UlN z@QhdVzPuF&cP4}euBpiJ9p7^{HXnZ$z84>SkBEL+SZb zm`u`w8y^W{cDE7#J7t!8ZL;f0en^rVTY5b-T~mUGsnZx&@zeZlS-Nc!HT(Jb-8tn! z`!#}=LAg|nNzVf*cz?&YpC|MIx`S#1w<7U_@&scZ6sng_%4WspZ> zoffcOGY`JUHm?b8zaARe3*yx$uF=*kt`TM|We`#16B9|*XqEG+TARm_X*52hx)G1_ zqLwI0&r@cicME>62N#R6e1=sHX8cZQ(VxQ%NkP)Yt=9*{k8UV$8>Zj<=5kit!hD9< z^36?iFdF9=OSpPDbS%GzXL4D^hVLt3dwgX*wI9perk6QAJRohMUn(n|LRt^qY8)8S z09tO9rR?~=5#Eql{>|0Z9_}wc(qipwTO)NQsc&m`b@;}y{FPNjJG^p&tjDC0lT&uw z-dL45xvH9$!Gc3!zwlc3;#v^fYvL#q$T}T>B4oCb7TzbQXu$=p1Ut&#ZS*#M(QK22 zH8sy(e3N5N7e9%uC!HMfd=sI%PT1mL7N``@yGil&$Q(U4nV-FESY7e^%z3G~#WD0* z>BhS~Ua7X?RjEu98;sc+I(pfe5vA8;AHYSAC^R%R%Q}t z4>_e$RZvc|oZm>vh6lBz&9>2tDUac>x#_xI$~>#8x0ONggyT@c(8G(lGwBjka+mHS zWOj}yCTbt{fFiOqUb2fp<}6S|a|6t}5qUDb`eCgr1KqUSg(3K$r!EHS%i0L!X@pHWRFO9mRxvT|WD&L>D z-?%+!84fe+O-l@oy}mXMll?qrJ0+WhUHPD}P%$3h!|XbOEp4W=yZvNY1$E@!O5~bp zOkPdWse8Pjeh>8cK8ODsgN?q^V3x|3*s0xeP5S*iJ?hBeyi(_ZMG47YgXSt0rQh*% zmncD(`n%?5S9&vNVvAk&J2GIZiO+MOibR%r?y!&)iG=pUd4z97a7cW# zpTxIQH4--mRR@ryN86Ss9JTooX}~=7d$9pbn=J20h%#e4rY)7vt<6TV38nA81bi)b zU{P+IyV{9SNkh!|k0;$yh~GJCoLiTzq1;>e74UF<`KLNy)jK$BMb#=R0Rfq^)Tqv% z!5tmEVDJx5!K!=b3dp!53$rOV>qPuJsA*Lje$p<6E>RWe{(HfdC|DF&Lo zZucKG;3m(yxCofR!bmWBJyxxMcfEGDralJN!9`FCSiGv!uX6j^AL+|g-KZ}5_-|E| zRg9qFmfi2%W=)K#0lf!O#obHQiQ*{vYdV#VrKj36+g12OJ*EVm<(mY|B;JH;IZ|4ql;Z|!!I7DgS^{>30YZsCIf_#x; z<;Fu(;Q6Z|vd1iX=cfD{x+48dHRCz+ttys#UL}eT3%aO0%In(tv%Hb;Ws2JTu~}+Q z{*y-qM77JBpQU!Rn4c^d>`gU+_sk)W9SIMt+S>fxyuF+aLOZW?x}2Rm@{6tyNRv$dpzj>Ld=kB(n_ zeEu4VsKe7A^yf!3fT-( zET6t&++I)Mi#@}Yy<$}KVi|##l?Xfu-frLed~n~Qf(Rr~1>@-@T3)~S*h@E&i=1U? zUq5T)3yChQ$K5j~?)D&N1OOfc=1yliV=qPK>`LzF;r>?R99%{OF=-eUS2}M0*eNB9 zxQUADypJ{WNSTE&zlyVQ11we?65F37mmkm|Q^IYk3NX+Lb6r=)ebZS~f}_GS%I^g2 zz}9V~eAyTjaM~%3{w?A4<7wu;mEuS%@w##jjDQ>FBT}luj5wP*MXDuEdF7@h=Cu7u zuTJe9`4?hdUh^D*%~R5X#OmCdNh`>qMqN+<5*b2uEDsCD-;!+t)V9>lvDEfrzg z(@%?4jk7}@R;$^8d|TG1NqUWfQ)?5Yw|rJYR=wmmZ>!~Uqc`5ipCevy(@IC|E+O4u}qq4H2EJepg6G&KG(^dx-AG{ruXcM%|Zk(%D zfKT%D=)e$i&*txR)x25%6w4OQdS-pSr|ZBW?cw%5p%F^w^IkX1;@mODJ&j)SA$D%* zORl9#Dse)v#uNca(tqzpS^>a3&;6Z!<*l*~H!gru7f}NqiO5}RD5XXp|9SZ~`HwFK zfCE{PbYX3=6fh_P?=vIK;2rjU^$d!$M>LP=qu5x0W1OkEJeK>kOr!q@hC$?-Ij6cl zRRMA@w76JTFK9voue^Q9^o6Yx;Vg=)`DQ+R&2zwoSjntSh0b8oMHa5$W5>`q@o)MH z!-el#()X8IN3PxTKccYvoEQkjRToFe0Rh);YCU9T8FaA)Qi)AZp{j#}gVOL3?VB{z z2;-y;={#jcInHf*79wYsq4MFoCvVno?i41fTz5UFrwUVpgd0;l!jv^~1RoF3kheaB zNh=Cop@t>8l9D^7)NzB5*8K$clf*QlHvv<4&#mXku5>&xMYr^gRImhN?s0htb$jfE zZDDrE5E5nX4f| z*$i`{ak_pID#ts14+4tf-ad{s_a*;%6xsp7KcfaA4~UzI&g*o@nx)&_C)maq?uci- zw#|%jt&$lYbboqb79=fTM}TDv_23dB(}V6yR(oB)ipa1fsIB{|DMZv})Az~gU{Cez z1jo*(5cUvX~7NswhAXKe^fiQ>p(g6M5tQ5m6)$^ z6`=fsYJHuzSCRkhw?gi``EYqA!h4S4c(UmO|NNO#`w?ZnYCfb59#Yu2?;x>ueR7oC z{rR=8v=1(*s&chIpRN7yv8Qo`=KjX+VwY~yXTMeI+c3|po*!Q^-uiWV4w}qq+H?pj z`_%hKCuOApZ;m)5X4zO;*$R9X*DEI;VlC~We;GLVwM#H@(jom~0#bSyd7My_V#8oO ztD$yLOTqQi(9oQG7Rdsd;~Rr-gqaK;*1IJA)4$rEYe+stTB?X`88(7&4pQJ}oLkhE zn-7PGu{M$yz?wLKBv%(RKn!Jj+Hal75RE*i{0yUuys?wH(iOaez9g%)H&@QTW7?L& z{%Clk5h2o|k@5Wtj2X1k9_5tK`#@XfS$Jw|*Rz(5{Hm8r*f%uMw*cZNjAX`vR%$F@ zw8mSdT$+?cV?BJA)hl!WwA1zN+fQviQ~DZp(qgwY6B6y*pR>1Q`8Oa}{)nEY9XePg zxYcsZ#0;{FCKd*1@B)Z4CjGU7xC&)TB-`nWiN1uIF9%ITpmK2aR(uqa4bHvCOBBZk226CRR3dGHnblS4!&2ebcP`>4 zgIU0qJ7*fq0(n$u82QZ0fAAE>L@B6bWUkz>ClB&k+t`R|+ykuO<1jPKE7hl>0~PI# z1Mb+9azqX8y7%9d+Pb}-;5P2{)(QN^ z`Ut40nUGEk+L5q;^X4`8$gzU2qHhc}zY5RL^iP#=zeAzg^y2*ZHL*|MWpzp#hbVsI zWJ&Rpi79;3=4Z62vpUS%75ML(SbGM_ow~{XFRCIe^?nrVs#}d7y>X*q)3K5Rbd*Im z=#mr%fYc8xzb?dJseZSg5K>sem-F3K-oc7T5Z;X9Fujf5@(G78u z$i360E8k~5lfOB^>af^~5MxZdw;y005awu5>Av7hY1bOU3&n*44#2u!*whJg-29jCC&nQTI3@sdj0CE ziL)HX={eCzzE+8y(G=`?@aZylBsyXC3ME)9SB>GHNiNgq_VdT^4`|xXukLYkw^qwb zA`_n9P`X5t-Bgff2Ay|YMRzom^ie0#hOf3dWZbI)lmR@-TlVYk$64yP zSMqfXk;P?q8BpCGH*4#{LLT`rA4tY444e}1;>yD_?iVk|o7a4{yxtjGtd(>%pzY5R zsyyN32=SH^WG3G@G3M}#Lh?zhJEAjKKQ~}_aS~gj$w@sL20KrVJIY`(?rscNO11nR ztRF~YN~HJGnZbQJl%v!op|ED3ddMl}*AD1{+TR4NALrWMx=~u#)$GSL%9oDPI`aLE ztWeYKcg10P;PrCFtI}}X%%c{n=#L==g<2%ylz;49&Q@6IU?F;I-A`|$-}U}!i&K*C zO&P*czuuZWYAw@bQY zz&YuIQtiQqn5}>JphMAB^EdG_dD^4}i=pGLLYRWYO5EofWGX=|10bAWfn z8|15Kn?NWsM+l&nJnlUNy_f2!UYVzxKHixgR{=6@=8g|heK6`q8^eUdLX~lMSjUjm zrvtd}Ta?PU2)X?!o(A}e^<*pLUD+~Z-k+d-ACZP?n1?ODy|+{tCU&F^w^e2sa_wL? zREIdg-%{U(4z|82LbnC#tKv$t)`yr*zr|5-g5SgTsfa+v$k$^6@p@uIW;pH`C9EVr zV;esEqy+k`$G-(e1VT@gRdGUaFw{(1eQ6=QS zLt#X1i2Gm`KJQFD6M8gL@1j+QTx0e69IrAvdD-rC!^=f0bFTng(iJ>kiJp0o4r+z% z3m6dzDVSGqL`$K>&L8<>4$)R)Y$851JgtXpo_rzgmhCI|$1mrMC2M=w!A)K@0Jp%5 zQ8^7rj|K-vM31vrUWl`s>T(_XPS>Mxw{Y~bd(fldV9TNO252TChv(MhmKO8kp>igL zEDbS&XJ-nEH06_K4|XX$a{X~?<>NB+dfDnEhS8WPM;|b>!YG1)9zArlq-x!Z%*QS% zEgfHJi21l`=~p?#g7rEb(uoi>ZOexNg25|U$q%&)R~hd%2+I|qv@rr}2Q8on`LS%g zn12YiJfk{88$lEw)NMJ}UgO}i$jSk$0~+tj$v0j~-UGF$u~qa(HLD=fIdj-DM$zt; z^;6402_+s{cm;4fi&bC!j<&#EZ)d zQVbE`dZ}E;2YC0B)3opRL?A+$EIdej_X(t<69i^|&G0j!8@jgF5m|Ub3^>tBBzc0`4>!Xn zHKuUl2q1ii8Em&Zjxw5T`+~$AM7{jnsEFIpCkS4rs3v#lmIA&-bLiSsY%SXa z!&j%nfi9^~^4`sdUVr^34iK;{K9WV%NCxB~D7%P$Ao#=uF2#~bwwi>&Fw%F6wrZLA z!H-(x5#QF@0o>a*M$!%5OgJ77bFsU5AiAC7;shB(XR01T}Zgx{Y&L`V~DB!m7vyQ&~cZ|L?(OK#-3$^ zbFqxdJ5yCd0Qvn!L7*sMXX;@hYFPu~f-ZN!AMfIFNq9j!_^saK&AQUoJsB3T&DtYP z=2B~0(v;hYO^Cw5h^NgFE(Gwt^b0gC*~Y7U+!w&Cz=m_6ZYX*ifAgfp&*ZXeB1G=Y z!VF-}qrkH^eZ7Y=s}73u_ywD(o|3az1~gS_HiYpGwPh7|@2ieoWp5290t1d}EgE9RjAn!%Rx z2t+FcWDNpRWEF$cD_sowEKlTA!d~NpXFjhgDtwG9YDCYKwmqjA;7Yc+uzuXtn>HGF z!Uv_ACpnF=OrlW{dwWbh&OSZ@e}~!cgYJOVTF`ohbRcS#$Q%%gy-0@k zl!tz3iQ$Lbhvcoo0#C)Hv8~KyOFhyVOTGx#Yxn>i1YI+Z$I|GK%461AI~Of-Y=3@) z4?3@KCcvexLt(H>AyMa+d_hdY^@6aKIE-ZQAFFAVqH3B3lS zN=H#_BZvN-oxpU{t zoNxDjxHC7OcGk|C?6&q^`+cA1_r7)DmvCQy7_Gmo=y04T4C@ZJ>pR2Vw4}4!H2IcL zeG$j46zs_gzEtfUUc7=1<@x)!9+_sTbPpf7KcA2YQH*A=+rPg)e%!Psj$PB^S^j%N z-j`QQQ%s5l?7o+fWlIf26+D*|4g8@yuCme!C(n*UoGoJ{@q!q<2cqN0$9;Sc*#$E3(K|{fsZZ_hN3j{C9S+ zXFc(GLQnBQs@=wncV&Wy=2or#4SzNU=um$}Y;m zh^k6zVD|)?x&CVA(@;?)js}FVyGi=Gf3OT%es!1O=ZL)|9x7^j*a@!~8wXzZ6SfNy zpUbYS(0BIfx~C7R{&@1|w|G&}Vy+SyYQ@5OgB)(ApQQu*XqBR%1jES?+vnK{DeiD= zwp&;@d@<*nX=aud?;G`@N)Jn;C6lw!{`kQQWGc8FXrXQWvKzLpUV6)~1mB~5dXh}O45J0rfi{sW`y|+R z>nGQ7zv99nDu~yX#q3r0o~)q#Ce|&hd;Um55#o{TV7@lwwC{(g`(P}uybJrh;&(O= zbhGvtL3`0p%=qjhKVkN5I2T_l+&W<7ZQN(Zd6b*pdgt0 z*nGz{rW>l4c*e08eg(SuZ*M0GCLDv6Ov6~go6<}~wH&kRqlan7C2G|x>A8@cpAUJ; z6ii$(#G+7jzZDffOPlUhvE~)y)7u3}vdzMFPrlNtBJ%BRtgP>k z*$c*ubL8&c$F4}&?b%!ymvm8t^e;tI(&buBK97CL@%X81p{c-aV0kIeZ7L_sG_>h$ z!1iF?W*SF!6}UdTvq~>jq3a@6ru-`W7-x7nd_>G#-GmW_{ylKsPC<}Y$Hm3n8j}1S zjW#6YTS+CN2DQX}UVvxJ{&Q}JJ|b88w){EW*i?riiR%@N3e@|C?N5trcIc^IQ0^%n zTggoz@xJjZx4RMDvY_*Ck?jfrGEvNkxX?*BjEmj;IfNhaYF@OqF3y>$`k@Goa*qbSpAmBw<%fsX zs&>chxpL2k?HRer$d1)5Z+raxUHG)e$z~I|eKp9XtFB&XdgFGEe1n@7*)1n#W2VRF zPCZ|^c-3kRtFd9tg2_%@S$zLm_C>!YlSC!TNE2}#Z?RhCPc$DQ z%cuZswrBr%Hfe>~!SJjOo!umT*>ruPYFGCy>=6yMo8H%A;ffB2=SP(8Xr=ILjt*{X z_?NLCnA?+6_siu%p5Vi-Qq0Cg6{6hT+s-`foq6x$6lNjSB*$C_tw&4*7j9gN^Djvx z60?@Yn?o346qW`MyvX!Sxvt~5GGV9`h#dO!iYteVoec4e3|c(fGA1qhTuiwz(ARfW zx0o56x{#QO=VutPn6s;I)YBF8;_bOdDO@?)4<+TT`6mf>X{>huOM!9c`9<6`BBhu81 zpBl;#aKy7x9qcNCI!xiEr}=9T05|o|*Ye*AbJ{C}HrwP5R9SK8 zs2nq>^rWKox~6<-v<)vR1)URcong{h9tipjVG8@~5<8QCCf+a_iBDXb)7>wR)bs-- zL#Dsqgy9Z)-Tp97M)9h)ChH097`_QU{|I`0b3WHiZ=`%;q^PL7-|BsdGa;VAV=2G}9L0yRBM+(HZ6htA2A88Ojux+n z5ff767y)(uc8Q}#PM*s`OOB`JBK4Gj)(1;pp+rF%(8h7K2pY*Nw#Z*>^_puk@?;+MccAxZ|x35|c&aQqaI+HTbjjph)8J*l$cKC3$$J_0M;aJX$4G06)ns4CP5;yJEQ zdwY4+6tWXqLyoZdIf$>+#sL7(0Cj4LAS4rR))Zp zxVP6EsIYm`IOZ+6m5>v7vneU1rve(W@CjqS9+|1tOI#lAM?U3#JzFL2YxhK1?wMfp zC2d)dx7r1XM7f5VA_X=(cvUH3n>Xxb3vNe^p=p!^XJT;ltSIzVr_K3XG@on9`htvtb??@mtC0;SCi}H^o~chu+9<;!Kx1yb*5N<((Ow&ALL<@aPh=v83(zi!Gi(5O&uie~xiBmj9H(KOwj7Wlei+P8gRw_QaU(OKK;&(E1u3 zFZ5GOJeT^sTwspAR*lqdU83tz1XO5LW7^( zqp5#u>Ym%?PEm8c|2eBHzMwq)Vdt7&=5m^`yN%P(EdXbs5Fk`9W{{h0(Lx)^5Yp1^ zu+RI8G2ozns}nyK)d^QlMXatgi`L?(X#Z3AW;S?D%G@|e;*CUN2kT8c`o`n1Ozb$$ zi4<)#(9uP-J8wkXk8V1{lVIDvBd8t&yo^loQf<0=($wh`V))cTt>eM zCyU{COd8q)fNGbkj($8KgF;_Mg)=iwzNPmFyj~c8eN1g3+8Llzk$?1%V{gjPi8!dl z6&-K-Yrpp={0xPIiCQ$w;4|sTxH&@-!%j$cT$unBcTY@bGx2djp6J&7RIXB+UypLLw8QK5*E1HFRoGo zb8qhq=BK799?$bq2uatzpV$%p!q^J_Oc{pXdG(#p!qgznC{X$b)PjNe{YNT2YIXH0}N zXXRPFHQfBBy~P3CbDbC~yvZe8QE=BIJ?LRmb(i77S$2B5$XJ(9*l45Yyd^6MO>4AG z#-fbk-lh0#L;9)0?Uywy6x`;UgO_*{lRq0BZh~nefu5uN9@Jbnq5z=kv53=yRVjY0 zojFXx&eR(QDm$+-xPX$bwQbt^gFG@lb1vGC~$M-)AO#Uj$$S zg%{;M?(cU?y!BOwt2x8wmEOyqKQ+Dc7HJMvPN)tIq`s<=d~-YF-n&&?O>#q_v!Q$P z*4L-rrI(e3f8eebZveOwU59A$NYD3z2khbV|7yCZ+$;K$*kiI7 za&dLxVHawgjot(pA>TUub}NHX#L!)V^jE# zh-iWA(dv068E{O%xiDvj!3y6ExV@?NovQCkgFYH#Qp9gAfzxI>~epOdg>?3{Y$K9fqTjAcnEKrmf}=G<~@imsD7)O zzFqj^oTJk(%<13iJ5)4oH$$m{cQ?4cX;BZnbKNB6ID-Xx(;}@Fu z1zmO zs+Uhz$S>kU$wyWWe*5{W-V1GV%A7PrbRr$D%>OXhynhw@r?6!(XU!g)GS_W95TQ!>jtndNk0`!f-)T)izH7<$jUk10b%b70U4q9HL7O8BAH>q1 zx5z@p3ydbwYLkk`1!L6voS10u*M2s!g^Hl^sOUU3_3$0Z;9c1~4W7=950^sfem?_a zxVL=QENAW-plMjRIe?#6fa2K&p-(?$aID(ffH72>V89Wk>Ls(zPdc>h>qS%@ZJn`; z7x2tT8$@IWhq970kfzf78mLHCRiSGE^BI;u{EK}}^teC}^N~+k>{KETT%Q{n>(0Wz zs#U&`mmo(X5hmuXw>Jr`9pD7*qq}4pTgLgy?$R$+i<4p z4qAXKb~SE1Kjnuva0aFVkkEE$N^S&C7fRF{GPv>jT6Ou9S~!XWluS0z?R76khyBOU zDzCK*qv@BicZJG>LA2uf=4P(wU9) zkuIbbV(Yr1DqIPC^i8QK$qKV6K}> z`PHO%l`N3ZUf%m+aDZ2C=nQJk6+t>`7n$306O%UL$1x}Rl@)g{azflnH@~V`ea=Jm zT)uJW&bsqC7nb5^L2+Gvb?Gtw71WDwJ`1Y{95A-6srD^imE6%eAq$SZocJp z-zL(M`sWopx$AgXZQ8mAHvA*zvgrY}LI-r~@QJpy^=%bi9ueoOH{Qxao@4=Qk&kI1 z4Is<<-_~BeB8m%F4M*~?_dkS!Q$x3re|#6_qmh4c@yCf%C(-LK*0RkhF)~q|9ec&2 zM=t)!jL4ctt`vlaIlEv}!7Ezd;RkkvSOIZ>%iy?dUw#2m73M+}mP;kE9^ZiDsHa0H zy7Z*%?sULc#E|%rlUNo{V4t&ns%oVEe9q?aS@8-a8buWPlaP_v`z6TSvHS z;Fom2oKZyS?4b^2wKQKk2pzPR8Ab(aAb)-za|LO~q%asJQ1&)<4`ZBFl?R31Z32&G z$vH;&DM_HR&F!MBE|M=7+ElnE9Q7zA_Gf!q8=#FkCGtmh(-R7An5Y~UVA6(5z1T0d z$cnJicSvAYk1VoG-{mm)>L9N2?V-)q_w0l=b^F?mgkK!>+tP@xzI0>fO>NlU4zYZdE=FoP<>gJc1};BQ<}h2lW%FLoD#7@~k#@+Y}2bilXY_AHeAs0NVv`co3k zmObYPGrs?8rABz?|LlIe?lO>e3nI2LUY_!dMFjx?wi!%`ugZIG_o;Hol)}2PbOL#$OPAgUyHav8m@9_?TF-2_KM zt+p@GFgua@m{(slNpPWW-^;Lo1)t&CTGO^%6dvI?Cui(7uhEi9(0yP_MtCr#8SC38 zNzkzVRm6GIk&mLCovcbOsq#zf+zf;(simbU%tfe2F_Bizqw14$>OR)``Tpr=sc9tT z#}ZfE9l_UGto^7eJ>}osYbg5qKU(SjvbyidrUVo;d5XEM%)C;YwCjfb98q2L1&UDW zK1-xG?LW{`@Xb8QrdI**SnR}DyM}mdY;2x!%~cX%_22V8i%uhxm6esH?I!kEuO#JL zg+2GU!6=9s^zrfG4t}?1&aZ+l8kLA;PV)=+ zdAID3O@$Q~3g2Y{F`o5|jJjXsS{AdbJ&ArLc&mO(Q=R`eSR+eg;&Q>%+KP1VPdp3bdZ4dGfio@tKA6V~m*pD;|nnXNYW&mNl zriHWUS2#Ftf^fj41+?;7T3opzCNTTd$e4r+j=$yUfk1bf0kvd-R~ zJ0f`jJr0PqPe00Gfdh2**KoMFs^15p{{DreN;kN^d;g%IAc~8d`bJ-fXU!9{f~Bg6 z@Tv!=dEecs@RB6$dX54&x=LRLcRU>V>C|g;zmV+YtGTjdB*bLpuVR#A?G@d4`oyS> zJ=v45i#hYtWQYGS>+};p7aMUda)s^Zj2^bwR%FkgV|H-$A0npIWkg}o^q(eK3EsLj zfS)qLsn4QsA-gjnM!6lO2+g|nqp@H+Lv5_e%gg50(Vq^K`_KmJv|-*>QPS5@I69mL`Pg z;5ZRqCOyy!u$2**WGzmR+9WAkZH!J#lM++ z7^x?t3=fl}r9$*&>$5((xIF~S+PxB!znFx4yvUGFZ3sOS;8yse;S#^2{WU$%WVl1l z@B%zG_Z8XHnQd#mMm|d$C5)}F#hbqYG8XtMtXq>0kB)?Hbk%?Pb9S-`>^nvz2;!Bp z@27WM9(n|cKd$(vN+Pj&B?}e9`tWv#>!mmTxj95z*I5ijD5sQim<(2)NrEep#B0o% zPGV>cKnj!ADRxkYRg$B!;+pWHq(id;-|f16173XFVO}^d_-M{6TG+G2lY=!G6wuJ5 zl#cP#C*rb48cM0Y95}K2<2N3=OTTVi%m5;h(N8>SJu;Q!!qEDPy&v+9H0TP@<{r5f zBt6F{nZDmIrGY`DnB1M^&wohjnpZzE3!ATkzKiZAR$pXdm`2?ZWeJjm5+?m?iDNaN z-}mB5x1Kq|^B0KWcwZ#JGJ-1t5gdkF zpOVb9xe0_`tq=;xQK~rv1c*mb=?tfNwixUcyhDb$D7B=eA;p;u-rFx^ETWaf4eK|Vj)r-oYMb)9iPd_DGf*SQeFhW%WN4)eV2N)E;02j9;$ z?#ziJ;8P(?3^X9hh&Saw{yg3BCXQe-=;0{?5PllcKeU{=P+>1!V8T$zplr>4jJ+IZ zBjn52q~ARy-7dOoeIob|cGI<3XfRRqF&% z_`U3Q-pN+bki%w*S-P04RHe~;U+^A!rqzk@!mxz@D4Ljib(xNQdXX&FKJF=y7Ifdd zZ#wMJF>Z+R-!7B}v!=jLYN`SZ-QPbs1vSZl&tJLQpMHMrIVz~R*S(n$;XpyS6ku^a~B{HL=qw#8!WtSD$r(jr*;=QM|uwe#zmxb2^Eof3QGc&)V zQub+xObyjYfY2>!63sKJuB;o^Na@RpzK?KRU^yoXGR)L&P=+g`2KP8A+q3?7kzqB` zdQXgO3|FJ_zz;%qEGSXwBR+2Q<*5+fl)Wm%X$cZ41(tQs2DaY*1T8Nel|26AB40e3?G}dvsxe~<1iRNFol-M7*=YB^| zS&WScaz34Tu@YWg+auIYX`pmo@bqMEkRaCI%SK6&Urc4OOes>D8mmnsRHXHA#iFHx z9X?fr6it;1seAZ2hss~kjj~?X+tA+r&W=@cRxC~In|P$xEHGXH+s^@g=h7{?i(iJw z*<%d9DGzA=X}B{3*#8(J^Q!54M? z(8lKuW!tUL!{36(7h4k{6k*;oZl=$k>Dn(Y*5#Hxn(Ap)IK0_YcTEjQsn5tFW?m?= zf+f|Z2N;S5S(vXIspxAoPsQ=7e_9k<-yS(V0;(b8?Ej z0i-|zgW7-+iB0?JUQXcPI;V9iP9{MEU4-1W$ZyU+s^r-~YX(`QEPRFnNbLqDULX3L zg9kK~pWT&EiY2XU=U(n__PIKTrT*?fa+E|Aocq~1_yYNFYl<5#f>G5vK&s5kDU2_) z%`#!H=j*ezz+K%f?xe9|xu}JOG}QzC@h%Y~DQ;GRgkZG=mqishIeg1G=y-oz#&9&v z+0-Ug=R+#(=7=?yEYC;`HCL{w<#m;wjo|r$GUyu{#g;$ZewSx^#mC2f%?Zf5x-Y6f zCRVc)VMAr(B83cwS3-OO(_2+sk7A(CBN?5Bwon@ssY#=o+{8wCqQLLy8RIQuVFthzL*7wx1s&9511mL3d85OLvE5Z`}9{HYM2 z|8S9%>W=MW$!BcrD~3-+R{THgKg{xjD!eKkWABYxDl@~BVHsg`r1rhc@Mg=YJgZIgz=iPB|KpIt5h65BMt(Dj?XVS!J?saTWP$4tV z#;eY^TS_|y4B!ey_3^rU%tQnn0)kpwTQPb0tfBxdPXAo*gHB#&mzL&Ho->asDvPwD zY6AY{D4Yd@>=;OVD_=pCL%fu3?5-qh{FZ{@fz9#@B4;uQrSUKXTTN=@jU4OPkRtXzaRKgz; zUuE}+*pq?fwC2vim897D48cH!=(=ta1($taOL8bFs6Tv`X07^M{oL;YG5Xw+z5yty zN+#}+y$QxEx%p?WD5>2*FG}W!f}vj|=d8EDHq~2UlOZ}3OoX+SpWFBjNGn;8-^2>q z8YG17LrWukvEGZu7q~aYp>nI5gOGd)em~ajus3-QmWEGN=(xXq%l#ZdEt!JJNlkra zSrbNMCTE=$H-^G>E4~K5C04JAyd8PgOr%s7kUNs%wGuZGcR@l@J2JLDrB|s8$1Y|> z&B3?x#-u$Gl&_r_;tgoG_i-=mxg!lA^2~$O&D6y1_>dA%B8?z=nobVVq?hh^lj6ig z%4@r!ekFey$w(uOUT=2DZ|qDXHTP=;p6Xu?i^pw5rexhO(3?)ag=5<;-miAmMqAxM z+3L{`cQJi-C@~$orGu5+R@BAnj`;}v!l|v6@NO#EcagR%#ftp1r6i-Jc(0nS@l1r9 za&F7usedCgSfto?`=I|$f_3_+Uof7oJiyTTg1@G)*4wg*#D5|8lO)$o(Dw ztplWq<{2f+E6I=16TCnaVrKdBkiyV*oML_Yhz{?7t76OHW+!{!coOkdb~krGN64k` zF~>}8b~T(be`Lv7>Y#)F%ar8Xp9>?=ufE5+dZ)zH1zD37;)FtID*WS@WhDsvoc9T$ zr2Cv*sFb14LEEW!|EjW^wvxVX6qz-v8mSh!;WpLd#{z_ziZ=y~HxN(pUdjDmmP3iO()PA*WJ)N))?2cIZD$MZ|PQ5N$K zlAl;r9nQ1K>#{YM$uo2acsr#er!_+@=lNz=re!ZCetoMNk z@}V*_kwr#Wb~N;j?+^1g_B$peWfF<1@*2jo4LYt~$kTrIe^} zVuqfYE1JG|R~vA~O8#y{+6hVvz01vOyEna@PcJgE7IOqL_U|0*N6|uWpEvBHwT<-h zO4`0Z`}wYjQ7U+xOItQ|2^2OoO+3v;-pofM)Zy`*6Na@VtDePt`xMo$db0f_j&kbg z>tL!Mp;b}0lwW77i_@b@P#Q|tuU{Y0;CbeBos1H}W*cm>dmV#V;MMVIoDblvygGuY zfee$|v;V}EZ$wL{3za>sNQJ!1Pd90eN2rY=sN;=fN;vE&_qF=`qa zs>HepZ1*>UuI)d$7G+q@=$rnUUS?jH@cJ$M-&Sp@2Nq6Rrq6VllwBCfYhhx%Ht4#d zn%A%t0+L(N)xHX2<7NfB>9*lt5d&5ZFB2aaGXTffI2-g!Duz7}KZ4y>h`xXkp%JC5 zTvcTaegq2^_y`qi%NkAFQG*mTT@dGSn$5c1R&dGbUQjuBE+4+%NwIqg+k@}?s4Z*> z9c_oSjvhF3@ettWiOOFnALF`Xl}#4SMLS$HID(vSR^r9p6BAzO#XrK3{jK2_=Z*F| zubM%WprY~R-c~8b_QTv6G>mMxHJd5(PRKXfj%?TXDfoTt^wFKmWnS0LYbv)MLz|cU z8XTRXbHsoMw;h#{2T_1>($Kqv1}H!YHX|_%AAEUqf=|g*oQP|s4G}rkBvC2^P)Z8UeM|8g)L?y;~$TLNaN6av5i_Q509VF&|W0!%f&ogvQdk&LnHY& zbTS;4M0d2W$487G(vd2wRUf}wb=xC(n78dY)y0l&4?es7NE#EUMg_`mlsns-cQ8@qe=J4uNdi|$Q-hZV~WJ}4!66tO13&FuxV>zr2_X)s|67Oci)Ac zMRd?b8d(E4roYW!?wuAHP821X9&foAvtz2B0{dQVeJh`CI$Av#$V4XWW(iL4_(!xu zQ18>@{{=mNUf}0Kr=wsC8nmBss9U}}HA#kTjSVG_>3S4|c-VjcUMZdI4=rTP5=w`w z;ap?qvt{)PHV=84Y<|4;e!%aSe`*b_m?M|e?o!zCh0f1~Pl=zOtsVHR&$d#DSuM{r zymxswb!}S&z_#muC?5UGw07sihVHz+n^ue#?{U_OnP%j-S|pft5Z@|5u4|jK9u7u9d*gIwi~eX zvyMzzt>K5j7n$wpniq5&M9ikGDlo{H=lBEvx~99bqnk)4a5^8-w7bsEgN{v$dSjga zr~CM1=}leZX-3P%U5fz-AHj2jr7mE>`Qj|2&n+MOV&d}tukjGi*5+H8GvaBhVx?P( zp;U;iZ`)dH8Ix~3xy9eVb>|wBsZsQh&(O&KJY#HM&cR_}rc!y&(e=$LLcd-YfgJrc z+SBqSQngE<FG6(sR2SMpq|Q8oBdt@*k!$lrI~)|81S`Rw>Hnl${eP^ZEPM ze6YcXM<$`NY$ca5T3z;916N~WtJ$V)yTNJf#xBF`qczb6$+a`+JSUNvdQY;ISdZT? zQgFAUK~774Yb8yjGqp~U_B<6A5V>ZWodqAm$59U|^Gfd^Gqhjn2$h-LPv8$112#Fy zG>F5qc5kj;2a6Q>&mV~q&?9PY-m$LMPHR#5HThDMF<`{YDsqOL91XLR4U%p7wNf7Yq?=2Srdkgb*FvF|d(-&&H;@8J2MAPp6o>7(D z!)uXHn2s`Ww;eg|v%QmLLco7b)t1CnuegpERc@dA%!|rB#!t}D60v#j7{KqWgX@xW z5fpLO)ryR={6uhJ3-cDH-~Z&U+!di`xa}m zp^DipZecOTpOXIZ4Y~CIIl&)%9OI!e1kz?!wS&yt-5>?RNT&z_e(OUj{fSXVuixv` za!9*>VWxddtfiosXK7sZl8B@ibCJrSh$52C zi?%~sOJ`AwrhK>E`Dt_L_%Ki1jB>}Q`@t}Lz0T>c=aN)L_c+L`fK;E_PYM=SAYl8y zNnO{ceF}*Zbp>hL=H!en2Xb;1d4aAw2JB>=e6MxV%}o_HAIS)Ex`VG_pf!D=ezicb zl_crw7ZV{fpJ$@zjWvAQu$~uCCVp=W3M8xBCDifz_ixju>&AqjSKhy`yhw<7mnq@Mr%r|tVLXQ2pQgof*l zRd7S4m4GzJ7IYuaHFT-Qq&!ul%Ox(Vn*L3!kTr+g3Xr;nNH;Utf+)`}%hW-Myi1h( zw}O_~fVa}QuNG-?);gb6xknEW;>$v?Boe^}wQEmyBYV~Q=l2W-a&aVGdY10|NrqqA zito~u1$BacXDNQOVKR@aR(gbBKu9QWi)MULHAy8sgQk5%E4_zJ{4h%SM}v?B9!-r^eU(S5G{@#^ zy8OM!D7zDZ$)>!qco@U>`$azRAG-2#@2+)AQ=&a3Dhsjyo-Fb~wgszKady>L4cRUe zpN&dKq3{PLeaF<6XPxGM462H>eXySC*bw^}PCbKd-{yyt z+R8bm{Sk2djP(IuP501SVcv7q&YvZX!NpJ9ryqQP1yHl)<&3PQoe^vKlv*`!gZRkyr%|Sd2Nd0%$$}gMvN*@~W0Sic7pDEQ<6 zg_+4rolWMubn}W{YGH(D!$BdW2;R<$5LU`EKD+(&Vf1)AMdnvV{q($^kf>CqAcyRO ziz}m-5e-m;P}IoJk~@$qr4S zp+s|-j&1f17}I-G1iwiIZVx^cRt^mV$&06xocszWPFYeIuIRiv&Y9<5_380M02uh; zZwi01NaXqKh6fSO;|kDAV9xhWcV;(cz2NmXNt@0FugOCh&(Br|ggjMHGvSv0vs_Ie zrGm`D0T5gk7(x>8exTFEv5ru$mcu^>BQD)02JOmmYy{Ud>ue>pp0GC$j?sj$Tl(TQ zVuxvu;e^ZDuJmDm$i!yW)|wXi7TmWy@%_87YhSY2Jp@%x0noo~*f?2u6^_459( zV(?*gBFYi}I=>hhtW)WkLyezj$!VseY# z@izlS=5|q*V(@S@Z79UAkG0}4AHBUu`NK;DX>$(YS0`52_Pu}I^ICBDWI;iN4>}5Co&7#qz=}Yo(%6Zi zCV+}i0r{kXaPnmUh_~TsR|H4$rlBS(ryX9rqNU@OQ*|X5q?8UTVJ5faNARNxQ?f)n zSenkVAMDUgA7uxvKK+uOE+!4mn15I8I()5^Y^offJAJzI-h&=H2r9W+KL>?9%l0FV z*%+U%kY%|C=4e(>J2Bv0O003xdTqU_8b`zrEC?SgSH3QVhTm9zS?P+@eM0 z$B$zS4`!P>6IAV#$y69vScH``Z@>SdFc8{&0|>}g%KT@bi|4m%gY2tOD)aHtB~ujZ zo>L5@9yI7WLO>kC;l~$B_{I6p|1L$DfVI^MSs%uoQHgnzb(Cb%LO)ON9XUbP~Ej z5GxptZ`RevQB6|U`MMNwVqZ*to3Ot2;|Wh9Y<>KIZ8?|{+z%oqiazm#?3+_vNWYjE zkzIR#!T`__%mb+YBS~QgKs!Zz@Oy~ID9(s5d{ANV8Sn1VPd@lz?dSsriVuaM|LBfm zm1;e<_jq4kMHZg*JZqpB+9gcl8w5cKkNXSTvdTqtiuz9q8(zVs|Yl1kxrzfmM+ z#i$hNpae7hV}bQI{p0n2_ODvo(`W!FpG9!70OP(S4|j>f@e~)Ip|n5YWirF%y3Iuy zz_l>7u_KH4xe&2)G0Ro`KY$>J0nmTO>HpAI{|`1miGLUXlpsB5FoSH3qcdDsnpc=6 z849|k^qEzZAMR@+#fw4s`(a)YLqCbmWqOol&rsr~=L5&GY3#{Y62G!P^Wih&qirOng1yv@_I zTBL0bm-h@F06S&sxe$3S|I6viF?xl{wb=TbDIYwquccLki+IpJ0QGRBD!Rg|#l6}& zb!oq9CPVzGBi4t2g@^7fwC@JPcz+aCIkpTSFFc^G!LGh@KetcU=C4!4LWKb33XeJ; zAD=HNDH_-~#0z?y3bs+t>!?a;1~S94*1aQs|NiLw?o6GVK-JFa+O>Bl;m~Mm8#Ct|g~|b+d#|!svF|Uzo=RgKy3hkQ7D+f8aMxp9!}rUXsSE2LQ(v6AA zt_U+20=^peh>$jJ@;`f>&)2#bJpG2mx$GaW^LJ!Z;x6AM+0x*7jwVNREJC%`2&1X+ z^Ye4h#cKa8b5*HwXdUU!L!{Cydf1bo@javwFyxHhJ|Np~^g`c-(!&6WC*wdJSh-Lm z0ZkCgBa%~z&oR8KeIaw$KvL(ohn@*nK&?Z0GXY_Ar}F%OZ1!eDY{W@gQT&M#r<@RRwl zCwwKoAW^>UQwumYF%e<+N;RUqQQZ)F8%;7Q``pDPSkr+>D6>_o=dF{k(`dbtrp3?o zA?CJ7{%!V}stiuT+*9@TEX8WhEs#4DnRGJ(_?ex-p74tw*}ISVSo%9szkTQ&dy(Fu z&pw5_?^$O)14-D4|A~hMP3?#`ow^)bZ(si3?^-C^7~)6?!q|?UQrKMzxQ=1Z;q)ok a`g-o5p#KUK|F1=z|7-jIKmVUN0{;g_z_e5V From 11e71b6dddaa868ab2710452796586f166976e6c Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Thu, 8 Aug 2013 12:38:35 -0400 Subject: [PATCH 113/115] Removed all errors --- src/dark/mech/steam/ItemRenderHelperS.java | 9 +- src/dark/mech/steam/SteamClientProxy.java | 6 +- src/dark/mech/steam/SteamPowerMain.java | 99 +++---- src/dark/mech/steam/SteamProxy.java | 9 +- .../mech/steam/boiler/TileEntityBoiler.java | 11 +- src/dark/mech/steam/firebox/BlockHeaters.java | 122 --------- .../mech/steam/firebox/ContainerFireBox.java | 45 ---- src/dark/mech/steam/firebox/GUIFireBox.java | 89 ------- .../mech/steam/firebox/TileEntityFireBox.java | 247 ------------------ .../steam/firebox/TileEntityLavaBuffer.java | 8 - .../steam/firebox/TileEntityLiquidBurner.java | 8 - src/dark/mech/steam/renders/RenderBoiler.java | 23 +- .../mech/steam/renders/RenderFurnace.java | 16 +- .../mech/steam/renders/RenderGearPiston.java | 16 +- .../mech/steam/renders/RenderGenerator.java | 45 ---- .../steam/steamengine/BlockSteamPiston.java | 2 +- 16 files changed, 108 insertions(+), 647 deletions(-) delete mode 100644 src/dark/mech/steam/firebox/BlockHeaters.java delete mode 100644 src/dark/mech/steam/firebox/ContainerFireBox.java delete mode 100644 src/dark/mech/steam/firebox/GUIFireBox.java delete mode 100644 src/dark/mech/steam/firebox/TileEntityFireBox.java delete mode 100644 src/dark/mech/steam/firebox/TileEntityLavaBuffer.java delete mode 100644 src/dark/mech/steam/firebox/TileEntityLiquidBurner.java delete mode 100644 src/dark/mech/steam/renders/RenderGenerator.java diff --git a/src/dark/mech/steam/ItemRenderHelperS.java b/src/dark/mech/steam/ItemRenderHelperS.java index 03d547aa..9d66e871 100644 --- a/src/dark/mech/steam/ItemRenderHelperS.java +++ b/src/dark/mech/steam/ItemRenderHelperS.java @@ -2,6 +2,7 @@ package dark.mech.steam; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; @@ -25,21 +26,21 @@ public class ItemRenderHelperS implements ISimpleBlockRenderingHandler @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if (block.blockID == SteamPowerMain.boilers.blockID && metadata >= 0 && metadata <= 3) + if (block.blockID == SteamPowerMain.blockBoiler.blockID && metadata >= 0 && metadata <= 3) { GL11.glPushMatrix(); GL11.glTranslatef((float) 0.0F, (float) 1F, (float) 0.0F); GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile + "tankTexture.png")); + FMLClientHandler.instance().getClient().renderEngine.func_110577_a(new ResourceLocation(SteamPowerMain.instance.PREFIX,SteamPowerMain.GUI_DIRECTORY + "tankTexture.png")); modelTank.generalRender(0.0625F); GL11.glPopMatrix(); } - if (block.blockID == SteamPowerMain.heaters.blockID && metadata >= 0 && metadata <= 3) + if (block.blockID == SteamPowerMain.blockHeater.blockID && metadata >= 0 && metadata <= 3) { GL11.glPushMatrix(); GL11.glTranslatef((float) 0.0F, (float) 1F, (float) 0.0F); GL11.glRotatef(180f, 0f, 0f, 1f); - GL11.glBindTexture(GL11.GL_TEXTURE_2D, FMLClientHandler.instance().getClient().renderEngine.getTexture(SteamPowerMain.textureFile + "Furnace.png")); + FMLClientHandler.instance().getClient().renderEngine.func_110577_a(new ResourceLocation(SteamPowerMain.instance.PREFIX,SteamPowerMain.GUI_DIRECTORY + "Furnace.png")); modelFurnace.genRender(0.0625F); GL11.glPopMatrix(); } diff --git a/src/dark/mech/steam/SteamClientProxy.java b/src/dark/mech/steam/SteamClientProxy.java index 3bef6e1d..3af33eff 100644 --- a/src/dark/mech/steam/SteamClientProxy.java +++ b/src/dark/mech/steam/SteamClientProxy.java @@ -1,14 +1,10 @@ package dark.mech.steam; -import net.minecraftforge.client.MinecraftForgeClient; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import dark.mech.steam.boiler.TileEntityBoiler; -import dark.mech.steam.firebox.TileEntityFireBox; import dark.mech.steam.renders.RenderBoiler; -import dark.mech.steam.renders.RenderFurnace; import dark.mech.steam.renders.RenderGearPiston; -import dark.mech.steam.renders.RenderGenerator; import dark.mech.steam.steamengine.TileEntitySteamPiston; public class SteamClientProxy extends SteamProxy @@ -23,7 +19,7 @@ public class SteamClientProxy extends SteamProxy public void init() { ClientRegistry.registerTileEntity(TileEntityBoiler.class, "boiler", new RenderBoiler(0f)); - ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); + // ClientRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox", new RenderFurnace()); ClientRegistry.registerTileEntity(TileEntitySteamPiston.class, "generator", new RenderGearPiston()); } diff --git a/src/dark/mech/steam/SteamPowerMain.java b/src/dark/mech/steam/SteamPowerMain.java index 06c91938..2ef67bf9 100644 --- a/src/dark/mech/steam/SteamPowerMain.java +++ b/src/dark/mech/steam/SteamPowerMain.java @@ -3,16 +3,11 @@ package dark.mech.steam; import java.io.File; import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; import net.minecraftforge.common.Configuration; -import net.minecraftforge.oredict.ShapedOreRecipe; import universalelectricity.prefab.network.PacketManager; import cpw.mods.fml.common.Mod; -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.Mod.EventHandler; +import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; @@ -20,74 +15,84 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.common.registry.LanguageRegistry; +import dark.core.DarkMain; +import dark.core.ModPrefab; import dark.mech.steam.boiler.BlockBoiler; -import dark.mech.steam.firebox.BlockHeaters; import dark.mech.steam.steamengine.BlockSteamPiston; -import dark.mech.steam.steamengine.ItemSteamPiston; -@Mod(modid = "SteamPower", name = "Steam Power", version = "0.2.3", dependencies = "after:basicPipes") +@Mod(modid = SteamPowerMain.MOD_NAME, name = SteamPowerMain.MOD_ID, version = DarkMain.VERSION, dependencies = ("after:" + DarkMain.MOD_ID)) @NetworkMod(channels = { SteamPowerMain.channel }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) -public class SteamPowerMain +public class SteamPowerMain extends ModPrefab { public static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); - public static final String channel = "SPpack"; - public static String textureFile = "/dark/SteamPower/textures/"; - public final static int BLOCK_ID_PREFIX = 3100; - // Blocks and items - public static Block heaters = new BlockHeaters(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Burners", BLOCK_ID_PREFIX).value)).setBlockName("machine"); - public static Block piston = new BlockSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "SteamPiston", BLOCK_ID_PREFIX + 1).value)).setBlockName("SteamEngien"); - public static Block boilers = new BlockBoiler(Integer.parseInt(config.get(Configuration.CATEGORY_BLOCK, "Boilers", BLOCK_ID_PREFIX + 2).value)).setBlockName("machine"); - public static Item itemEngine = new ItemSteamPiston(Integer.parseInt(config.get(Configuration.CATEGORY_ITEM, "SteamPistonItem", 30308).value)).setItemName("SteamEngine"); + public static final String MOD_ID = "SteamPower"; + public static final String MOD_NAME = "Steam Power"; + public static final String channel = MOD_ID; + + // Blocks and items + public static Block blockHeater, blockPiston, blockBoiler; + // extra configs + public static int steamOutBoiler, boilerHeat, fireOutput; + @Instance public static SteamPowerMain instance; @SidedProxy(clientSide = "dark.SteamPower.SteamClientProxy", serverSide = "dark.SteamPower.SteamProxy") public static SteamProxy proxy; - // extra configs - public static int steamOutBoiler = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "steamOutPerCycle", 10).value); - public static int boilerHeat = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "boilerInKJNeed", 4500).value); - public static int fireOutput = Integer.parseInt(config.get(Configuration.CATEGORY_GENERAL, "fireBoxOutKJMax", 250).value); - @PreInit + @EventHandler public void preInit(FMLPreInitializationEvent event) { instance = this; NetworkRegistry.instance().registerGuiHandler(this, this.proxy); + super.preInit(event); + + GameRegistry.registerBlock(blockHeater, "SPHeater"); + GameRegistry.registerBlock(blockPiston, "SPPiston"); + GameRegistry.registerBlock(blockBoiler, "SPBoiler"); proxy.preInit(); - - GameRegistry.registerBlock(heaters, "heater units"); - GameRegistry.registerBlock(piston, "steam piston"); - GameRegistry.registerBlock(boilers, "boiler tanks"); } - @Init - public void load(FMLInitializationEvent evt) + @EventHandler + public void load(FMLInitializationEvent event) { + super.init(event); proxy.init(); - - // Burner Names - - LanguageRegistry.addName((new ItemStack(heaters, 1, 0)), BlockHeaters.Burners.values()[0].name); - // Boiler Names - LanguageRegistry.addName((new ItemStack(boilers, 1, 0)), BlockBoiler.Boilers.values()[0].name); - // Steam Piston Name - LanguageRegistry.addName((new ItemStack(itemEngine, 1, 0)), "Steam Piston"); - } - @PostInit + @EventHandler public void postInit(FMLPostInitializationEvent event) { + super.postInit(event); proxy.postInit(); + } - // Boiler basic - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(boilers, 1, 0), new Object[] { "TT", "VV", "TT", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 6), 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7) })); - // Burner Coal - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(heaters, 1, 0), new Object[] { "@", "F", 'F', Block.stoneOvenIdle, '@', "plateSteel" })); - // SteamPiston - CraftingManager.getInstance().getRecipeList().add(new ShapedOreRecipe(new ItemStack(itemEngine, 1, 0), new Object[] { "GGG", "VPV", "@T@", 'T', new ItemStack(BasicUtilitiesMain.parts, 1, 1), 'G', BasicUtilitiesMain.rod, '@', "plateSteel", 'P', Block.pistonBase, 'V', new ItemStack(BasicUtilitiesMain.parts, 1, 7), 'M', "motor" })); + @Override + public String getDomain() + { + return "steam"; + } + + @Override + public void loadConfig() + { + config.load(); + //blockHeater = new BlockHeaters(config.get("Heater", "HeaterBlockID", this.getNextID()).getInt()); + blockPiston = new BlockSteamPiston(config.getBlock(Configuration.CATEGORY_BLOCK, "Piston", this.getNextID()).getInt()); + blockBoiler = new BlockBoiler(config.get("Boiler", "BoilerBlockID", this.getNextID()).getInt()); + steamOutBoiler = config.get("Boiler", "SteamPerCycle", 10).getInt(); + boilerHeat = config.get("Boiler", "HeatNeeded", 4500).getInt(); + fireOutput = config.get("Heater", "MaxOutputEnergy", 250).getInt(); + + config.save(); + + } + + @Override + public void loadModMeta() + { + // TODO Auto-generated method stub } diff --git a/src/dark/mech/steam/SteamProxy.java b/src/dark/mech/steam/SteamProxy.java index 45145fb8..ddfc6b99 100644 --- a/src/dark/mech/steam/SteamProxy.java +++ b/src/dark/mech/steam/SteamProxy.java @@ -6,9 +6,6 @@ import net.minecraft.world.World; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; import dark.mech.steam.boiler.TileEntityBoiler; -import dark.mech.steam.firebox.ContainerFireBox; -import dark.mech.steam.firebox.GUIFireBox; -import dark.mech.steam.firebox.TileEntityFireBox; import dark.mech.steam.steamengine.TileEntitySteamPiston; public class SteamProxy implements IGuiHandler @@ -22,7 +19,7 @@ public class SteamProxy implements IGuiHandler public void init() { GameRegistry.registerTileEntity(TileEntityBoiler.class, "boiler"); - GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); + //GameRegistry.registerTileEntity(TileEntityFireBox.class, "fireBox"); GameRegistry.registerTileEntity(TileEntitySteamPiston.class, "steamPiston"); } @@ -42,7 +39,7 @@ public class SteamProxy implements IGuiHandler switch (ID) { case 0: - return new GUIFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); + //return new GUIFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); //case 1: return new GuiBoiler(player.inventory, ((TileEntityBoiler)tileEntity)); //case 2: return new GUISteamPiston(player.inventory, ((TileEntitySteamPiston)tileEntity)); } @@ -61,7 +58,7 @@ public class SteamProxy implements IGuiHandler switch (ID) { case 0: - return new ContainerFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); + //return new ContainerFireBox(player.inventory, ((TileEntityFireBox) tileEntity)); //default: return new ContainerFake(player.inventory, (IInventory) tileEntity); } } diff --git a/src/dark/mech/steam/boiler/TileEntityBoiler.java b/src/dark/mech/steam/boiler/TileEntityBoiler.java index 96a71f92..c086f392 100644 --- a/src/dark/mech/steam/boiler/TileEntityBoiler.java +++ b/src/dark/mech/steam/boiler/TileEntityBoiler.java @@ -1,16 +1,11 @@ package dark.mech.steam.boiler; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.liquids.ILiquidTank; -import net.minecraftforge.liquids.ITankContainer; -import net.minecraftforge.liquids.LiquidContainerRegistry; -import net.minecraftforge.liquids.LiquidStack; -import net.minecraftforge.liquids.LiquidTank; public class TileEntityBoiler extends TileEntity { + public TileEntity[] connectedBlocks = new TileEntity[6]; + public int tankCount; + } diff --git a/src/dark/mech/steam/firebox/BlockHeaters.java b/src/dark/mech/steam/firebox/BlockHeaters.java deleted file mode 100644 index 97a7fe4f..00000000 --- a/src/dark/mech/steam/firebox/BlockHeaters.java +++ /dev/null @@ -1,122 +0,0 @@ -package dark.mech.steam.firebox; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import dark.core.blocks.BlockMachine; -import dark.core.blocks.TileEntityMachine; -import dark.core.helpers.MetaGroup; -import dark.mech.steam.ItemRenderHelperS; -import dark.mech.steam.SteamPowerMain; - -public class BlockHeaters extends BlockMachine -{ - /** Quick enum to help sort out meta data info */ - public enum Burners - { - Coal("FireBox", TileEntityFireBox.class, 0), - Liquid("LiquidBurner", TileEntityLiquidBurner.class, -1), - Lava("LavaBuffer", TileEntityLavaBuffer.class, -1), - Bio("BioFurnace", null, -1); - - public String name; - public Class ent; - public int gui; - - private Burners(String name, Class tileEntity, int gui) - { - this.name = name; - this.gui = gui; - this.ent = tileEntity; - } - } - - public BlockHeaters(int par1) - { - super("machine", SteamPowerMain.config, par1, Material.iron); - this.setCreativeTab(CreativeTabs.tabBlock); - this.setHardness(1f); - this.setResistance(3f); - } - - @Override - public int damageDropped(int metadata) - { - return MetaGroup.getGroupStartMeta(MetaGroup.getGrouping(metadata)); - } - - /** Called upon block activation (left or right click on the block.). The three integers - * represent x,y,z of the block. */ - @Override - public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) - { - TileEntity blockEntity = (TileEntity) world.getBlockTileEntity(x, y, z); - if (!world.isRemote && !player.isSneaking() && blockEntity instanceof TileEntityFireBox) - { - TileEntity var6 = (TileEntityFireBox) world.getBlockTileEntity(x, y, z); - player.openGui(SteamPowerMain.instance, 0, world, x, y, z); - return true; - } - - return false; - } - - @Override - public TileEntity createNewTileEntity(World var1, int meta) - { - try - { - return Burners.values()[MetaGroupingHelper.getGrouping(meta)].ent.newInstance(); - } - catch (Exception e) - { - e.printStackTrace(); - return null; - } - } - - /** Called when the block is placed in the world. */ - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving user) - { - int angle = MathHelper.floor_double((user.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; - int metadata = world.getBlockMetadata(x, y, z); - TileEntityMachine ent = (TileEntityMachine) world.getBlockTileEntity(x, y, z); - - if (ent instanceof TileEntityFireBox) - { - world.setBlockMetadata(x, y, z, angle); - } - } - - @Override - public boolean isOpaqueCube() - { - return false; - } - - @Override - public boolean renderAsNormalBlock() - { - return false; - } - - @Override - public int getRenderType() - { - return ItemRenderHelperS.renderID; - } - - @Override - public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) - { - par3List.add(new ItemStack(par1, 1, 0)); - } -} diff --git a/src/dark/mech/steam/firebox/ContainerFireBox.java b/src/dark/mech/steam/firebox/ContainerFireBox.java deleted file mode 100644 index d1aaeb53..00000000 --- a/src/dark/mech/steam/firebox/ContainerFireBox.java +++ /dev/null @@ -1,45 +0,0 @@ -package dark.mech.steam.firebox; - -import java.awt.Container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerFireBox extends Container -{ - private TileEntityFireBox tileEntity; - - public ContainerFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - this.tileEntity = tileEntity; - this.addSlotToContainer(new Slot(tileEntity, 0, 33, 34)); - int var3; - - for (var3 = 0; var3 < 3; ++var3) - { - for (int var4 = 0; var4 < 9; ++var4) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); - } - } - - for (var3 = 0; var3 < 9; ++var3) - { - this.addSlotToContainer(new Slot(par1InventoryPlayer, var3, 8 + var3 * 18, 142)); - } - } - - public boolean canInteractWith(EntityPlayer par1EntityPlayer) - { - return this.tileEntity.isUseableByPlayer(par1EntityPlayer); - } - - /** Called to transfer a stack from one inventory to the other eg. when shift clicking. */ - public ItemStack transferStackInSlot(int par1) - { - - return null; - } -} diff --git a/src/dark/mech/steam/firebox/GUIFireBox.java b/src/dark/mech/steam/firebox/GUIFireBox.java deleted file mode 100644 index a1800bb3..00000000 --- a/src/dark/mech/steam/firebox/GUIFireBox.java +++ /dev/null @@ -1,89 +0,0 @@ -package dark.mech.steam.firebox; - -import java.text.DecimalFormat; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.StatCollector; - -import org.lwjgl.opengl.GL11; - -public class GUIFireBox extends GuiContainer -{ - private TileEntityFireBox tileEntity; - - private int containerWidth; - private int containerHeight; - - public GUIFireBox(InventoryPlayer par1InventoryPlayer, TileEntityFireBox tileEntity) - { - super(new ContainerFireBox(par1InventoryPlayer, tileEntity)); - this.tileEntity = tileEntity; - } - - /** Draw the foreground layer for the GuiContainer (everything in front of the items) */ - @Override - protected void drawGuiContainerForegroundLayer(int par1, int par2) - { - this.fontRenderer.drawString("FireBox", 55, 6, 4210752); - this.fontRenderer.drawString("HeatOut", 90, 33, 4210752); - String displayText = ""; - if (!tileEntity.isConnected) - { - displayText = "No Boiler"; - } - else if (tileEntity.storedItems[0] != null) - { - if (tileEntity.storedItems[0].getItem().shiftedIndex != Item.coal.shiftedIndex) - { - displayText = "No Fuel"; - } - else - { - if (tileEntity.generateRate * 20 < 20) - { - displayText = "Hull Heat: " + (tileEntity.generateRate * 100) + "%"; - } - else - { - displayText = getWattDisplay((tileEntity.generateRate * 20)); - } - } - } - this.fontRenderer.drawString(displayText, (int) (105 - displayText.length() * 1.25), 45, 4210752); - this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - /** Draw the background layer for the GuiContainer (everything behind the items) */ - @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) - { - int var4 = this.mc.renderEngine.getTexture(dark.mech.steam + "SteamGUI.png"); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.renderEngine.bindTexture(var4); - containerWidth = (this.width - this.xSize) / 2; - containerHeight = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(containerWidth, containerHeight, 0, 0, this.xSize, this.ySize); - } - - public static String getWattDisplay(int watts) - { - String displayWatt; - if (watts > 1000) - { - displayWatt = roundTwoDecimals((double) watts / 1000) + " MJ"; - } - else - { - displayWatt = watts + " KJ"; - } - - return displayWatt; - } - - public static double roundTwoDecimals(double d) - { - DecimalFormat twoDForm = new DecimalFormat("#.##"); - return Double.valueOf(twoDForm.format(d)); - } -} diff --git a/src/dark/mech/steam/firebox/TileEntityFireBox.java b/src/dark/mech/steam/firebox/TileEntityFireBox.java deleted file mode 100644 index 49a69b48..00000000 --- a/src/dark/mech/steam/firebox/TileEntityFireBox.java +++ /dev/null @@ -1,247 +0,0 @@ -package dark.mech.steam.firebox; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.INetworkManager; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.ForgeDirection; -import universalelectricity.prefab.network.IPacketReceiver; - -import com.google.common.io.ByteArrayDataInput; - -import dark.core.blocks.TileEntityMachine; -import dark.mech.steam.boiler.TileEntityBoiler; - -public class TileEntityFireBox extends TileEntityMachine implements IPacketReceiver, IInventory, ISidedInventory, IHeatCreator -{ - // max heat generated per second - - public boolean isConnected = false; - public TileEntity[] connectedBlocks = { null, null, null, null, null, null }; - private int connectedUnits = 0; - public static int maxGenerateRate = 250; - public int generateRate = 0; - int count = 0; - public int itemCookTime = 0; - - public void updateEntity() - { - super.updateEntity(); - if (count++ >= 10) - { - count = 0; - addConnection(); - if (!worldObj.isRemote) - { - sharCoal(); - } - TileEntity blockEntity = worldObj.getBlockTileEntity(this.xCoord, this.yCoord + 1, this.zCoord); - if (blockEntity instanceof TileEntityBoiler) - { - isConnected = true; - } - else - { - isConnected = false; - } - if (!this.worldObj.isRemote) - { - - maxGenerateRate = dark.mech.steam + (connectedUnits * 10); - - // The top slot is for recharging items. Check if the item is a - // electric item. If so, recharge it. - if (this.storedItems[0] != null && isConnected) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if (this.itemCookTime <= 0) - { - itemCookTime = Math.max(1600 - (int) (this.generateRate * 20), 400); - this.decrStackSize(0, 1); - } - } - } - - } - // Starts generating electricity if the device is heated up - if (this.itemCookTime > 0) - { - this.itemCookTime--; - if (isConnected) - { - this.generateRate = Math.min(this.generateRate + Math.min((this.generateRate) + 1, 1), this.maxGenerateRate / 10); - } - } - // Loose heat when the generator is not connected or if there is no - // coal in the inventory. - if (this.itemCookTime <= 0 || !isConnected) - { - this.generateRate = Math.max(this.generateRate - 5, 0); - } - } - } - - // gets all connected fireBoxes and shares its supply of coal - public void sharCoal() - { - for (int i = 0; i < 6; i++) - { - - if (connectedBlocks[i] instanceof TileEntityFireBox) - { - TileEntityFireBox connectedConsumer = (TileEntityFireBox) connectedBlocks[i]; - if (this.storedItems[0] != null) - { - if (this.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex && this.storedItems[0].stackSize > 0) - { - if (connectedConsumer.storedItems[0] != null) - { - if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - if (connectedConsumer.storedItems[0].getItem().shiftedIndex == Item.coal.shiftedIndex) - { - int CSum = Math.round(this.storedItems[0].stackSize + connectedConsumer.storedItems[0].stackSize) / 2; - if (this.storedItems[0].stackSize > connectedConsumer.storedItems[0].stackSize) - { - int transferC = 0; - transferC = Math.round(CSum - connectedConsumer.storedItems[0].stackSize); - connectedConsumer.storedItems[0].stackSize = connectedConsumer.storedItems[0].stackSize + transferC; - this.storedItems[0].stackSize = this.storedItems[0].stackSize - transferC; - } - } - } - } - else - { - connectedConsumer.storedItems[0] = new ItemStack(this.storedItems[0].getItem(), 1, this.storedItems[0].getItemDamage()); - this.storedItems[0].stackSize -= 1; - } - } - } - } - } - - } - - public void addConnection() - { - connectedUnits = 0; - TileEntity[] aEntity = MHelper.getSourounding(worldObj, xCoord, yCoord, zCoord); - for (int i = 0; i < 6; i++) - { - - if (aEntity[i] instanceof TileEntityFireBox && i != 0 && i != 1) - { - this.connectedBlocks[i] = aEntity[i]; - connectedUnits += 1; - } - else - { - this.connectedBlocks[i] = null; - } - } - } - - /** Reads a tile entity from NBT. */ - public void readFromNBT(NBTTagCompound par1NBTTagCompound) - { - super.readFromNBT(par1NBTTagCompound); - this.itemCookTime = par1NBTTagCompound.getInteger("itemCookTime"); - this.generateRate = par1NBTTagCompound.getInteger("generateRate"); - } - - /** Writes a tile entity to NBT. */ - public void writeToNBT(NBTTagCompound par1NBTTagCompound) - { - super.writeToNBT(par1NBTTagCompound); - par1NBTTagCompound.setInteger("itemCookTime", (int) this.itemCookTime); - par1NBTTagCompound.setInteger("generateRate", (int) this.generateRate); - } - - @Override - public String getInvName() - { - return "FireBox"; - } - - public float onProduceHeat(float jouls, ForgeDirection side) - { - if (side == ForgeDirection.UP) - { - return Math.min(generateRate, jouls); - } - return 0; - } - - @Override - public Object[] getSendData() - { - return new Object[] { (int) generateRate, (int) itemCookTime }; - } - - @Override - public void handlePacketData(INetworkManager network, int packetType, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream) - { - try - { - generateRate = dataStream.readInt(); - itemCookTime = dataStream.readInt(); - } - catch (Exception e) - { - e.printStackTrace(); - } - - } - - @Override - public int getStartInventorySide(ForgeDirection side) - { - return 0; - } - - @Override - public int getSizeInventorySide(ForgeDirection side) - { - return 1; - } - - @Override - public String getChannel() - { - return dark.mech.steam; - } - - @Override - public int getSizeInventory() - { - return 1; - } - - @Override - public boolean needUpdate() - { - return true; - } - - @Override - public boolean canCreatHeat(ForgeDirection dir) - { - if (dir == ForgeDirection.UP) - return true; - return false; - } - - @Override - public int createHeat(ForgeDirection dir) - { - if (dir == ForgeDirection.UP) - return this.generateRate; - return 0; - } -} diff --git a/src/dark/mech/steam/firebox/TileEntityLavaBuffer.java b/src/dark/mech/steam/firebox/TileEntityLavaBuffer.java deleted file mode 100644 index 6c2b441b..00000000 --- a/src/dark/mech/steam/firebox/TileEntityLavaBuffer.java +++ /dev/null @@ -1,8 +0,0 @@ -package dark.mech.steam.firebox; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityLavaBuffer extends TileEntity -{ - -} diff --git a/src/dark/mech/steam/firebox/TileEntityLiquidBurner.java b/src/dark/mech/steam/firebox/TileEntityLiquidBurner.java deleted file mode 100644 index 91b71e5b..00000000 --- a/src/dark/mech/steam/firebox/TileEntityLiquidBurner.java +++ /dev/null @@ -1,8 +0,0 @@ -package dark.mech.steam.firebox; - -import net.minecraft.tileentity.TileEntity; - -public class TileEntityLiquidBurner extends TileEntity -{ - -} diff --git a/src/dark/mech/steam/renders/RenderBoiler.java b/src/dark/mech/steam/renders/RenderBoiler.java index fc28668d..0e6d4fa5 100644 --- a/src/dark/mech/steam/renders/RenderBoiler.java +++ b/src/dark/mech/steam/renders/RenderBoiler.java @@ -2,12 +2,16 @@ package dark.mech.steam.renders; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +import dark.core.client.RenderMachine; +import dark.core.helpers.ConnectionHelper; +import dark.mech.steam.SteamPowerMain; import dark.mech.steam.boiler.TileEntityBoiler; -public class RenderBoiler extends TileEntitySpecialRenderer +public class RenderBoiler extends RenderMachine { int type = 0; private ModelTank model; @@ -32,18 +36,18 @@ public class RenderBoiler extends TileEntitySpecialRenderer int meta = 0; if (connected[5] == null && connected[3] == null && connected[4] == null && connected[2] == null || ((TileEntityBoiler) tileEntity).tankCount < 2) { - bindTextureByName(dark.mech.steam + "tankTexture.png"); + bindTextureByName(SteamPowerMain.instance.PREFIX, SteamPowerMain.MODEL_DIRECTORY + "tankTexture.png"); model.generalRender(0.0625F); } - else if (MHelper.corner(tileEntity) == 0 || ((TileEntityBoiler) tileEntity).tankCount > 2) + else if (ConnectionHelper.corner(tileEntity) == 0 || ((TileEntityBoiler) tileEntity).tankCount > 2) { - bindTextureByName(dark.mech.steam + "tankBlock.png"); + bindTextureByName(SteamPowerMain.instance.PREFIX, SteamPowerMain.MODEL_DIRECTORY + "tankBlock.png"); model2.renderBlock(0.0625F); } else { - int corner = MHelper.corner(tileEntity); - bindTextureByName(dark.mech.steam + "CornerTank.png"); + int corner = ConnectionHelper.corner(tileEntity); + bindTextureByName(SteamPowerMain.instance.PREFIX, SteamPowerMain.MODEL_DIRECTORY + "CornerTank.png"); switch (corner) { case 1: @@ -65,4 +69,11 @@ public class RenderBoiler extends TileEntitySpecialRenderer GL11.glPopMatrix(); } + @Override + public ResourceLocation getTexture(int block, int meta) + { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderFurnace.java b/src/dark/mech/steam/renders/RenderFurnace.java index b720e65d..6dd73b94 100644 --- a/src/dark/mech/steam/renders/RenderFurnace.java +++ b/src/dark/mech/steam/renders/RenderFurnace.java @@ -1,11 +1,14 @@ package dark.mech.steam.renders; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class RenderFurnace extends TileEntitySpecialRenderer +import dark.core.client.RenderMachine; +import dark.mech.steam.SteamPowerMain; + +public class RenderFurnace extends RenderMachine { int type = 0; private ModelFurnace model; @@ -18,7 +21,7 @@ public class RenderFurnace extends TileEntitySpecialRenderer @Override public void renderTileEntityAt(TileEntity te, double d, double d1, double d2, float d3) { - bindTextureByName(dark.mech.steam + "Furnace.png"); + bindTextureByName(SteamPowerMain.instance.PREFIX, SteamPowerMain.MODEL_DIRECTORY + "Furnace.png"); GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); @@ -42,4 +45,11 @@ public class RenderFurnace extends TileEntitySpecialRenderer GL11.glPopMatrix(); } + @Override + public ResourceLocation getTexture(int block, int meta) + { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderGearPiston.java b/src/dark/mech/steam/renders/RenderGearPiston.java index 1eed0f24..563f9a9b 100644 --- a/src/dark/mech/steam/renders/RenderGearPiston.java +++ b/src/dark/mech/steam/renders/RenderGearPiston.java @@ -2,12 +2,15 @@ package dark.mech.steam.renders; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +import dark.core.client.RenderMachine; +import dark.mech.steam.SteamPowerMain; import dark.mech.steam.steamengine.TileEntitySteamPiston; -public class RenderGearPiston extends TileEntitySpecialRenderer +public class RenderGearPiston extends RenderMachine { private ModelGearPiston model; @@ -18,7 +21,7 @@ public class RenderGearPiston extends TileEntitySpecialRenderer public void renderTileEntityAt(TileEntitySteamPiston tileEntity, double d, double d1, double d2, float d3) { - bindTextureByName(dark.mech.steam + "GearShaftPiston.png"); + bindTextureByName(SteamPowerMain.instance.PREFIX, SteamPowerMain.MODEL_DIRECTORY + "GearShaftPiston.png"); GL11.glPushMatrix(); GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); GL11.glScalef(1.0F, -1F, -1F); @@ -40,7 +43,7 @@ public class RenderGearPiston extends TileEntitySpecialRenderer break; } model.renderGear(0.0625F); - model.renderR(0.0625F, tileEntity.pos); + model.renderR(0.0625F, 0);//TODO fix model.renderBody(0.0625F); model.renderBack(0.0625F); model.renderFront(0.0625F); @@ -56,4 +59,11 @@ public class RenderGearPiston extends TileEntitySpecialRenderer } + @Override + public ResourceLocation getTexture(int block, int meta) + { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderGenerator.java b/src/dark/mech/steam/renders/RenderGenerator.java deleted file mode 100644 index e2b80b22..00000000 --- a/src/dark/mech/steam/renders/RenderGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -package dark.mech.steam.renders; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -public class RenderGenerator extends TileEntitySpecialRenderer -{ - int type = 0; - private ModelGenerator model; - - public RenderGenerator() - { - model = new ModelGenerator(); - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double d, double d1, double d2, float d3) - { - bindTextureByName(dark.mech.steam + "Generator.png"); - GL11.glPushMatrix(); - GL11.glTranslatef((float) d + 0.5F, (float) d1 + 1.5F, (float) d2 + 0.5F); - GL11.glScalef(1.0F, -1F, -1F); - int meta = tileEntity.worldObj.getBlockMetadata(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - switch (meta) - { - case 0: - GL11.glRotatef(0f, 0f, 1f, 0f); - break; - case 1: - GL11.glRotatef(90f, 0f, 1f, 0f); - break; - case 2: - GL11.glRotatef(180f, 0f, 1f, 0f); - break; - case 3: - GL11.glRotatef(270f, 0f, 1f, 0f); - break; - } - model.RenderMain(0.0625F); - GL11.glPopMatrix(); - } - -} \ No newline at end of file diff --git a/src/dark/mech/steam/steamengine/BlockSteamPiston.java b/src/dark/mech/steam/steamengine/BlockSteamPiston.java index 2512bc4f..50ce1cab 100644 --- a/src/dark/mech/steam/steamengine/BlockSteamPiston.java +++ b/src/dark/mech/steam/steamengine/BlockSteamPiston.java @@ -63,7 +63,7 @@ public class BlockSteamPiston extends BlockMachine @Override public int idDropped(int par1, Random par2Random, int par3) { - return SteamPowerMain.itemEngine.itemID; + return this.blockID; } @Override From 3c851b1dac4d93191be067036bdbdea150b9e804 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sat, 24 Aug 2013 08:03:46 -0400 Subject: [PATCH 114/115] misc --- src/dark/mech/steam/SteamPowerMain.java | 4 ++-- src/dark/mech/steam/steamengine/TileEntitySteamPiston.java | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dark/mech/steam/SteamPowerMain.java b/src/dark/mech/steam/SteamPowerMain.java index 2ef67bf9..f21cbcd0 100644 --- a/src/dark/mech/steam/SteamPowerMain.java +++ b/src/dark/mech/steam/SteamPowerMain.java @@ -21,14 +21,14 @@ import dark.mech.steam.boiler.BlockBoiler; import dark.mech.steam.steamengine.BlockSteamPiston; @Mod(modid = SteamPowerMain.MOD_NAME, name = SteamPowerMain.MOD_ID, version = DarkMain.VERSION, dependencies = ("after:" + DarkMain.MOD_ID)) -@NetworkMod(channels = { SteamPowerMain.channel }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) +@NetworkMod(channels = { SteamPowerMain.CHANNEL }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketManager.class) public class SteamPowerMain extends ModPrefab { public static Configuration config = new Configuration((new File(cpw.mods.fml.common.Loader.instance().getConfigDir(), "SteamPower.cfg"))); public static final String MOD_ID = "SteamPower"; public static final String MOD_NAME = "Steam Power"; - public static final String channel = MOD_ID; + public static final String CHANNEL = MOD_ID; // Blocks and items public static Block blockHeater, blockPiston, blockBoiler; diff --git a/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java b/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java index 21da3958..48f4e601 100644 --- a/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java +++ b/src/dark/mech/steam/steamengine/TileEntitySteamPiston.java @@ -1,7 +1,14 @@ package dark.mech.steam.steamengine; import dark.core.blocks.TileEntityMachine; +import dark.mech.steam.SteamPowerMain; public class TileEntitySteamPiston extends TileEntityMachine { + + @Override + public String getChannel() + { + return SteamPowerMain.CHANNEL; + } } From e14862eb09ea31d036e4091f5c08d008498266fc Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Wed, 28 Aug 2013 14:03:34 -0400 Subject: [PATCH 115/115] removed files to allow merge --- LICENSE.txt | 68 ------------------- README.md | 4 -- src/dark/mech/steam/renders/RenderBoiler.java | 2 +- .../mech/steam/renders/RenderFurnace.java | 2 +- .../mech/steam/renders/RenderGearPiston.java | 2 +- 5 files changed, 3 insertions(+), 75 deletions(-) delete mode 100644 LICENSE.txt delete mode 100644 README.md diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index bc0c36de..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,68 +0,0 @@ -Copyright (c) 2013, DarkGuardsman -All rights reserved. - -0. Definitions - --------------- - -Minecraft: Denotes a copy of the Minecraft game licensed by Mojang AB - -User: Anybody that interacts with the software in one of the following ways: -- play -- decompile -- recompile or compile -- modify -- distribute - -Mod: The mod code designated by the present license, in source form, binary form, as obtained standalone, as part of a wider distribution or resulting from the compilation of the original or modified Minecraft sources. - -Mod Pack - Package distrubution of mods and there assets to be used by the user for easy install and collective download. - -Texture Pack - Package distrubution of texture or art work to change the visual look of the mod. - -Dependency: Code required for the Mod to work properly. This includes dependencies required to compile the code as well as any file or modification -that is explicitely or implicitely required for the Mod to be working. - -Owner: The project leader of the Mod reguardless of repo holder or manager - -1. Scope --------- - -The present license is granted to any user of the Mod. As a prerequisite, a user must own a legally acquired copy of Minecraft. Terms of license may change anytime with or without notice. The user of this Mod will be subject to the newest version of this license. - -2. Liability ------------- - -This Mod is provided 'as is' with no warranties, implied or otherwise. The owner of this Mod takes no responsibility for any damages incurred from the use of this Mod. This Mod alters fundamental parts of the Minecraft game, parts of Minecraft may not work with this Mod installed. All damages caused from the use or misuse of this Mod fall on the user. - -3. Play rights --------------- - -The user is allowed to install this Mod on a client or a server and to play without restriction. - -4. Modification rights ----------------------- - -The user may modify the original code for private use, learning experience, or to make a contribution to the original project source code. This does not give the right to redistrubute any part of the original or modified code. - -5. Distribution of original or modified copy rights ---------------------------------------------------- - -Is subject to distribution rights this entire Mod in its various forms. This -includes: -- original binary or source forms of this Mod files -- modified versions of these binaries or source files, as well as binaries resulting from source modifications -- patches to its source or binary files -- any copy of a portion of its binary source files - -A) The user is NOT allowed to redistribute this Mod partially, in totality, or included in a distribution without explict permissions from the owner. - -B) Distrubution of this mod in a mod pack is allowed as long as the user obeys the following rules: - 1) The mod pack should not contain a major version release of the mod within one week of the mod version release to allow for bug fixes - 2) The mod pack should not contain a modified version of the mod unless to change the texture look of parts of the mod - 3) The mod pack owner or contributors must redirect errors and bug reports to the issue area of the mod's original github repo - 4) The mod pack needs full public permission from all parts of the mod pack including mods, assets, and textures. - 5) The mod pack or its download site should allow access by users to the list of permissions and credits to authors - 6) The mod pack or its download site should contain links to mod documentation and original mod sites - -C) Textures of this mod are allowed to be used in the creation or modification of texture packs without permision. That is as long as links and credit to the original mod are given for easy user understanding. diff --git a/README.md b/README.md deleted file mode 100644 index 2ef60310..00000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Steam Power -========== - -Steam Power is a mod that brings the most powerful (but environmentally hazard) cheap coal power generators in all of Minecraft! Ever had too much coal? Too much lava? Well in Steam Power you can put all of those into use and generate a large amount of power! \ No newline at end of file diff --git a/src/dark/mech/steam/renders/RenderBoiler.java b/src/dark/mech/steam/renders/RenderBoiler.java index 0e6d4fa5..be7d15da 100644 --- a/src/dark/mech/steam/renders/RenderBoiler.java +++ b/src/dark/mech/steam/renders/RenderBoiler.java @@ -6,7 +6,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import dark.core.client.RenderMachine; +import dark.client.renders.RenderMachine; import dark.core.helpers.ConnectionHelper; import dark.mech.steam.SteamPowerMain; import dark.mech.steam.boiler.TileEntityBoiler; diff --git a/src/dark/mech/steam/renders/RenderFurnace.java b/src/dark/mech/steam/renders/RenderFurnace.java index 6dd73b94..78b11f39 100644 --- a/src/dark/mech/steam/renders/RenderFurnace.java +++ b/src/dark/mech/steam/renders/RenderFurnace.java @@ -5,7 +5,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import dark.core.client.RenderMachine; +import dark.client.renders.RenderMachine; import dark.mech.steam.SteamPowerMain; public class RenderFurnace extends RenderMachine diff --git a/src/dark/mech/steam/renders/RenderGearPiston.java b/src/dark/mech/steam/renders/RenderGearPiston.java index 563f9a9b..0b0884c5 100644 --- a/src/dark/mech/steam/renders/RenderGearPiston.java +++ b/src/dark/mech/steam/renders/RenderGearPiston.java @@ -6,7 +6,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import dark.core.client.RenderMachine; +import dark.client.renders.RenderMachine; import dark.mech.steam.SteamPowerMain; import dark.mech.steam.steamengine.TileEntitySteamPiston;