Advertisement
Guest User

Untitled

a guest
Jun 27th, 2013
80
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package mods.GeoActivity.common.blocks.Machines;
  2.  
  3. import java.util.Random;
  4. import mods.GeoActivity.common.geoactivity;
  5. import mods.GeoActivity.common.blocks.Machines.CR.CRTileE;
  6. import mods.GeoActivity.core.GuiIDs;
  7. import net.minecraft.block.Block;
  8. import net.minecraft.block.BlockContainer;
  9. import net.minecraft.block.material.Material;
  10. import net.minecraft.client.renderer.texture.IconRegister;
  11. import net.minecraft.entity.EntityLiving;
  12. import net.minecraft.entity.item.EntityItem;
  13. import net.minecraft.entity.player.EntityPlayer;
  14. import net.minecraft.inventory.Container;
  15. import net.minecraft.inventory.IInventory;
  16. import net.minecraft.item.ItemStack;
  17. import net.minecraft.nbt.NBTTagCompound;
  18. import net.minecraft.tileentity.TileEntity;
  19. import net.minecraft.util.Icon;
  20. import net.minecraft.util.MathHelper;
  21. import net.minecraft.world.IBlockAccess;
  22. import net.minecraft.world.World;
  23. import net.minecraftforge.common.ForgeDirection;
  24. import cpw.mods.fml.relauncher.Side;
  25. import cpw.mods.fml.relauncher.SideOnly;
  26.  
  27. public class CoalRefiner extends BlockContainer
  28. {
  29.     /**
  30.      * Is the random generator used by furnace to drop the inventory contents in random directions.
  31.      */
  32.     private Random furnaceRand = new Random();
  33.    
  34.     /** True if this is an active furnace, false if idle */
  35.     private final boolean isActive;
  36.    
  37.      /**
  38.      * This flag is used to prevent the furnace inventory to be dropped upon block removal, is used internally when the
  39.      * furnace block changes from idle to active and vice-versa.
  40.      */
  41.     private static boolean keepFurnaceInventory = false;
  42.    
  43.     @SideOnly(Side.CLIENT)
  44.     private Icon crIconTop;
  45.     @SideOnly(Side.CLIENT)
  46.     private Icon crIconFront;
  47.    
  48.     public CoalRefiner(int par1, Material material, boolean par2)
  49.     {
  50.              super(par1, material);
  51.              this.isActive = par2;
  52.     }
  53.    
  54.      /**
  55.      * Returns the ID of the items to drop on destruction.
  56.      */
  57.     @Override
  58.     public int idDropped(int par1, Random par2Random, int par3)
  59.     {
  60.              return geoactivity.coalrefineridle.blockID;
  61.     }
  62.    
  63.     /**
  64.      * Called whenever the block is added into the world. Args: world, x, y, z
  65.      */
  66.     public void onBlockAdded(World par1World, int par2, int par3, int par4)
  67.     {
  68.              super.onBlockAdded(par1World, par2, par3, par4);
  69.              this.setDefaultDirection(par1World, par2, par3, par4);
  70.     }
  71.    
  72.     @SideOnly(Side.CLIENT)
  73.     @Override
  74.     public Icon getIcon(int side, int meta)
  75.     {
  76.         if(side == meta)
  77.             return this.crIconFront;
  78.         switch(side)
  79.         {
  80.             case 0:
  81.                 return this.crIconTop; //bottom
  82.        
  83.             case 1:
  84.                 return this.crIconTop; //top
  85.        
  86.             default:
  87.                 return this.blockIcon; //sides
  88.             //case 2 & 4 - front sides
  89.             //case 3 & 5 - other sides
  90.         }
  91.     }
  92.    
  93.     @SideOnly(Side.CLIENT)
  94.     @Override
  95.     public void registerIcons(IconRegister par1IconRegister)
  96.     {
  97.         this.blockIcon = par1IconRegister.registerIcon("GeoActivity:CR_side");
  98.         this.crIconFront = par1IconRegister.registerIcon(this.isActive ? "GeoActivity:CR_frontA" : "GeoActivity:CR_frontI");
  99.         this.crIconTop = par1IconRegister.registerIcon("GeoActivity:CR_top");
  100.     }
  101.    
  102.     /**
  103.      * set a blocks direction
  104.      */
  105.     private void setDefaultDirection(World par1World, int par2, int par3, int par4)
  106.     {
  107.         if (!par1World.isRemote)
  108.         {
  109.             int l = par1World.getBlockId(par2, par3, par4 - 1);
  110.             int i1 = par1World.getBlockId(par2, par3, par4 + 1);
  111.             int j1 = par1World.getBlockId(par2 - 1, par3, par4);
  112.             int k1 = par1World.getBlockId(par2 + 1, par3, par4);
  113.             byte b0 = 3;
  114.  
  115.             if (Block.opaqueCubeLookup[l] && !Block.opaqueCubeLookup[i1])
  116.             {
  117.                 b0 = 3;
  118.             }
  119.  
  120.             if (Block.opaqueCubeLookup[i1] && !Block.opaqueCubeLookup[l])
  121.             {
  122.                 b0 = 2;
  123.             }
  124.  
  125.             if (Block.opaqueCubeLookup[j1] && !Block.opaqueCubeLookup[k1])
  126.             {
  127.                 b0 = 5;
  128.             }
  129.  
  130.             if (Block.opaqueCubeLookup[k1] && !Block.opaqueCubeLookup[j1])
  131.             {
  132.                 b0 = 4;
  133.             }
  134.  
  135.             par1World.setBlockMetadataWithNotify(par2, par3, par4, b0, 2);
  136.         }
  137.     }
  138.    
  139.     @Override
  140.     public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9)
  141.     {
  142.              if (par1World.isRemote)
  143.              {
  144.                      return true;
  145.              }
  146.              else
  147.              {
  148.                  CRTileE tile_entity = (CRTileE)par1World.getBlockTileEntity(par2, par3, par4);
  149.                  if (tile_entity == null || par5EntityPlayer.isSneaking())
  150.                  {
  151.                      return false;
  152.                  }
  153.                  par5EntityPlayer.openGui(geoactivity.instance, GuiIDs.CR, par1World, par2, par3, par4);
  154.                  return true;
  155.              }
  156.     }
  157.    
  158.     public static void updateFurnaceBlockState(boolean par0, World par1World, int par2, int par3, int par4)
  159.     {
  160.              int var5 = par1World.getBlockMetadata(par2, par3, par4);
  161.              TileEntity tileentity = par1World.getBlockTileEntity(par2, par3, par4);
  162.              keepFurnaceInventory = true;
  163.    
  164.              if (par0)
  165.              {
  166.                      par1World.setBlock(par2, par3, par4, geoactivity.coalrefineractive.blockID);
  167.              }
  168.              else
  169.              {
  170.                      par1World.setBlock(par2, par3, par4, geoactivity.coalrefineridle.blockID);
  171.              }
  172.    
  173.              keepFurnaceInventory = false;
  174.              par1World.setBlockMetadataWithNotify(par2, par3, par4, var5, 2);
  175.    
  176.              if (tileentity != null)
  177.              {
  178.                  tileentity.validate();
  179.                  par1World.setBlockTileEntity(par2, par3, par4, tileentity);
  180.              }
  181.     }
  182.    
  183.     @SideOnly(Side.CLIENT)
  184.     /**
  185.      * A randomly called display update to be able to add particles or other items for display
  186.      */
  187.     public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
  188.     {
  189.         if (this.isActive)
  190.         {
  191.             int l = par1World.getBlockMetadata(par2, par3, par4);
  192.             float f = (float)par2 + 0.5F;
  193.             float f1 = (float)par3 + 0.0F + par5Random.nextFloat() * 6.0F / 16.0F;
  194.             float f2 = (float)par4 + 0.5F;
  195.             float f3 = 0.52F;
  196.             float f4 = par5Random.nextFloat() * 0.6F - 0.3F;
  197.  
  198.             if (l == 4)
  199.             {
  200.                 par1World.spawnParticle("smoke", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
  201.                 par1World.spawnParticle("flame", (double)(f - f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
  202.             }
  203.             else if (l == 5)
  204.             {
  205.                 par1World.spawnParticle("smoke", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
  206.                 par1World.spawnParticle("flame", (double)(f + f3), (double)f1, (double)(f2 + f4), 0.0D, 0.0D, 0.0D);
  207.             }
  208.             else if (l == 2)
  209.             {
  210.                 par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
  211.                 par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 - f3), 0.0D, 0.0D, 0.0D);
  212.             }
  213.             else if (l == 3)
  214.             {
  215.                 par1World.spawnParticle("smoke", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
  216.                 par1World.spawnParticle("flame", (double)(f + f4), (double)f1, (double)(f2 + f3), 0.0D, 0.0D, 0.0D);
  217.             }
  218.         }
  219.     }
  220.    
  221.     public TileEntity createNewTileEntity(World par1World)
  222.     {
  223.              return new CRTileE();
  224.     }
  225.    
  226.     public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving, ItemStack par6ItemStack)
  227.     {
  228.              int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
  229.    
  230.              if (var6 == 0)
  231.              {
  232.                      par1World.setBlockMetadataWithNotify(par2, par3, par4, 2, 2);
  233.              }
  234.    
  235.              if (var6 == 1)
  236.              {
  237.                      par1World.setBlockMetadataWithNotify(par2, par3, par4, 5, 2);
  238.              }
  239.    
  240.              if (var6 == 2)
  241.              {
  242.                      par1World.setBlockMetadataWithNotify(par2, par3, par4, 3, 2);
  243.              }
  244.    
  245.              if (var6 == 3)
  246.              {
  247.                      par1World.setBlockMetadataWithNotify(par2, par3, par4, 4, 2);
  248.              }
  249.              if (par6ItemStack.hasDisplayName())
  250.              {
  251.                  ((CRTileE)par1World.getBlockTileEntity(par2, par3, par4)).func_94129_a(par6ItemStack.getDisplayName());
  252.              }
  253.     }
  254.    
  255.     public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6)
  256.     {
  257.              if (!keepFurnaceInventory)
  258.              {
  259.                  CRTileE var7 = (CRTileE) par1World.getBlockTileEntity(par2, par3, par4);
  260.  
  261.                  if (var7 != null)
  262.                  {
  263.                      for (int var8 = 0; var8 < var7.getSizeInventory(); ++var8)
  264.                      {
  265.                          ItemStack var9 = var7.getStackInSlot(var8);
  266.  
  267.                          if (var9 != null)
  268.                          {
  269.                              float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
  270.                              float var11 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
  271.                              float var12 = this.furnaceRand.nextFloat() * 0.8F + 0.1F;
  272.  
  273.                              while (var9.stackSize > 0)
  274.                              {
  275.                                  int var13 = this.furnaceRand.nextInt(21) + 10;
  276.  
  277.                                  if (var13 > var9.stackSize)
  278.                                  {
  279.                                          var13 = var9.stackSize;
  280.                                  }
  281.  
  282.                                  var9.stackSize -= var13;
  283.                                  EntityItem var14 = new EntityItem(par1World, (double)((float)par2 + var10), (double)((float)par3 + var11), (double)((float)par4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage()));
  284.  
  285.                                  if (var9.hasTagCompound())
  286.                                  {
  287.                                          var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy());
  288.                                  }
  289.  
  290.                                  float var15 = 0.05F;
  291.                                  var14.motionX = (double)((float)this.furnaceRand.nextGaussian() * var15);
  292.                                  var14.motionY = (double)((float)this.furnaceRand.nextGaussian() * var15 + 0.2F);
  293.                                  var14.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var15);
  294.                                  par1World.spawnEntityInWorld(var14);
  295.                              }
  296.                          }
  297.                      }
  298.                  }
  299.              }
  300.    
  301.              super.breakBlock(par1World, par2, par3, par4, par5, par6);
  302.     }
  303.    
  304.     public boolean hasComparatorInputOverride()
  305.     {
  306.         return true;
  307.     }
  308.    
  309.     public int getComparatorInputOverride(World par1World, int par2, int par3, int par4, int par5)
  310.     {
  311.         return Container.calcRedstoneFromInventory((IInventory)par1World.getBlockTileEntity(par2, par3, par4));
  312.     }
  313.     @SideOnly(Side.CLIENT)
  314.     public int idPicked(World par1World, int par2, int par3, int par4)
  315.     {
  316.         return Block.furnaceIdle.blockID;
  317.     }
  318. }
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement