Advertisement
smbarbour

TileGrinder

Apr 22nd, 2012
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.37 KB | None | 0 0
  1. package grinder;
  2.  
  3. import java.util.Random;
  4.  
  5. import org.lwjgl.Sys;
  6.  
  7. import net.minecraft.src.Block;
  8. import net.minecraft.src.Container;
  9. import net.minecraft.src.EntityPlayer;
  10. import net.minecraft.src.IInventory;
  11. import net.minecraft.src.InventoryPlayer;
  12. import net.minecraft.src.Item;
  13. import net.minecraft.src.ItemStack;
  14. import net.minecraft.src.NBTTagCompound;
  15. import net.minecraft.src.NBTTagList;
  16. import net.minecraft.src.TileEntity;
  17. import net.minecraft.src.World;
  18. import net.minecraft.src.buildcraft.api.IPowerReceptor;
  19. import net.minecraft.src.buildcraft.api.Orientations;
  20. import net.minecraft.src.buildcraft.api.PowerFramework;
  21. import net.minecraft.src.buildcraft.api.PowerProvider;
  22. import net.minecraft.src.buildcraft.core.Utils;
  23. import net.minecraft.src.forge.ISidedInventory;
  24.  
  25. public class TileGrinder extends TileEntity implements ISidedInventory, IPowerReceptor {
  26.     public ItemStack[] inventory;
  27.     PowerProvider powerProvider;
  28.     public short progress;
  29.     public int power;
  30.     private static int maxPower = 512;
  31.     private static int maxProgress = 100;
  32.    
  33.     public TileGrinder () {
  34.         this.inventory = new ItemStack[2];
  35.         if (PowerFramework.currentFramework != null) {
  36.             this.powerProvider = PowerFramework.currentFramework.createPowerProvider();
  37.         }
  38.         this.powerProvider.configure(50, 1, 25, 5, 100);
  39.     }
  40.  
  41.     public Container getGuiContainer(InventoryPlayer invPlayer) {
  42.         return new ContainerGrinder(invPlayer, this);
  43.     }
  44.  
  45.     @Override
  46.     public void setPowerProvider(PowerProvider provider) {
  47.         powerProvider = provider;
  48.     }
  49.  
  50.     @Override
  51.     public PowerProvider getPowerProvider() {
  52.         return powerProvider;
  53.     }
  54.    
  55.     @Override
  56.     public void doWork() {
  57.         if (this.power < this.maxPower) {
  58.             int receivedPower = this.powerProvider.useEnergy(1,25, true);
  59.             this.power += receivedPower;
  60.             if (this.power > this.maxPower) {
  61.                 this.power = this.maxPower;
  62.             }
  63.         }
  64.     }
  65.    
  66.     @Override
  67.     public void updateEntity() {
  68.         super.updateEntity();
  69.         this.powerProvider.update(this);
  70.         boolean isPowered = this.power > 0;
  71.         boolean inventoryChanged = false;
  72.         if (!this.worldObj.isRemote) {
  73.            
  74.             if (isPowered && hasWork()){
  75.                 float overdriveRating = (float)this.power/(float)this.maxPower;
  76.                 if(overdriveRating > 0.8) {
  77.                     this.power -= 8;
  78.                     this.progress += 8;
  79.                 } else if (overdriveRating > 0.5) {
  80.                     this.power -= 4;
  81.                     this.progress += 4;
  82.                 } else {
  83.                     this.power--;
  84.                     this.progress++;
  85.                 }
  86.                
  87.                 if (this.progress >= this.maxProgress) {
  88.                     this.progress = 0;
  89.                     completeWork();
  90.                     inventoryChanged = true;
  91.                 }
  92.             }
  93.         }
  94.        
  95.         if (inventoryChanged) {
  96.             onInventoryChanged();
  97.         }
  98.     }
  99.  
  100.     private void completeWork() {
  101.         --this.inventory[0].stackSize;
  102.         if (this.inventory[0].stackSize == 0) {
  103.             this.inventory[0] = null;
  104.         }
  105.         Random magic = new Random();
  106.         int result = magic.nextInt(100);
  107.         ItemStack tempStack;
  108.         if (result > 80) {
  109.             tempStack = new ItemStack(Block.dirt, 1);
  110.         } else if (result > 60) {
  111.             tempStack = new ItemStack(Block.sand, 1);
  112.         } else if (result > 40) {
  113.             tempStack = new ItemStack(Block.gravel, 1);
  114.         } else if (result > 25) {
  115.             tempStack = new ItemStack(Item.coal, 1);
  116.         } else if (result > 15) {
  117.             tempStack = new ItemStack(Item.ingotIron, 1);
  118.         } else if (result > 5) {
  119.             tempStack = new ItemStack(Item.ingotGold, 1);
  120.         } else {
  121.             tempStack = new ItemStack(Item.diamond, 1);
  122.         }
  123.         if (Utils.addToRandomPipeEntry(this, Orientations.Unknown, tempStack)) {
  124.             return;
  125.         } else {
  126.             this.inventory[1] = tempStack;
  127.             return;
  128.         }
  129.     }
  130.  
  131.     @Override
  132.     public int powerRequest() {
  133.         if (this.power < this.maxPower) {
  134.             return getPowerProvider().maxEnergyReceived;
  135.         } else {
  136.             return 0;
  137.         }
  138.     }
  139.  
  140.     private boolean hasWork() {
  141.         if (inventory[0] != null && inventory[0].getItem().shiftedIndex == Block.cobblestone.blockID && inventory[1] == null) {
  142.             return true;
  143.         } else {
  144.             return false;
  145.         }
  146.     }
  147.  
  148.     @Override
  149.     public ItemStack getStackInSlot(int var1) {
  150.         return this.inventory[var1];
  151.     }
  152.  
  153.     @Override
  154.     public ItemStack decrStackSize(int slot, int requestedStackSize) {
  155.         if (this.inventory[slot] != null) {
  156.             ItemStack tempStack;
  157.             if (this.inventory[slot].stackSize <= requestedStackSize) {
  158.                 tempStack = this.inventory[slot];
  159.                 this.inventory[slot] = null;
  160.                 return tempStack;
  161.             } else {
  162.                 tempStack = this.inventory[slot].splitStack(requestedStackSize);
  163.                 if (this.inventory[slot].stackSize == 0) {
  164.                     this.inventory[slot] = null;
  165.                 }
  166.                 return tempStack;
  167.             }
  168.         } else {
  169.             return null;
  170.         }
  171.     }
  172.  
  173.     @Override
  174.     public ItemStack getStackInSlotOnClosing(int var1) {
  175.         return null;
  176.     }
  177.  
  178.     @Override
  179.     public void setInventorySlotContents(int slot, ItemStack tempStack) {
  180.         this.inventory[slot] = tempStack;
  181.     }
  182.  
  183.     @Override
  184.     public String getInvName() {
  185.         return "inventory.grinder";
  186.     }
  187.  
  188.     @Override
  189.     public int getInventoryStackLimit() {
  190.         return 64;
  191.     }
  192.  
  193.     @Override
  194.     public boolean isUseableByPlayer(EntityPlayer entityPlayer) {
  195.         return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : entityPlayer.getDistance((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
  196.     }
  197.  
  198.     @Override
  199.     public void openChest() {
  200.     }
  201.  
  202.     @Override
  203.     public void closeChest() {
  204.     }
  205.  
  206.     @Override
  207.     public int getStartInventorySide(int side) {
  208.         switch (side) {
  209.         case 0:
  210.             return 1;
  211.         case 1:
  212.             return 0;
  213.         default:
  214.             return 1;
  215.         }
  216.     }
  217.  
  218.     @Override
  219.     public int getSizeInventorySide(int side) {
  220.         return 1;
  221.     }
  222.  
  223.     public int gaugePowerScaled(int i) {
  224.         return i * this.power / maxPower;
  225.     }
  226.  
  227.     public int gaugeProgressScaled(int i) {
  228.         return i * this.progress / maxProgress;
  229.     }
  230.  
  231.     @Override
  232.     public int getSizeInventory() {
  233.         return this.inventory.length;
  234.     }
  235.  
  236.     public void readFromNBT(NBTTagCompound par1NBTTagCompound) {
  237.         super.readFromNBT(par1NBTTagCompound);
  238.         PowerFramework.currentFramework.loadPowerProvider(this, par1NBTTagCompound);
  239.         NBTTagList var2 = par1NBTTagCompound.getTagList("Items");
  240.         this.inventory = new ItemStack[this.getSizeInventory()];
  241.         for (int var3 = 0; var3 < var2.tagCount(); ++var3)
  242.         {
  243.             NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3);
  244.             byte var5 = var4.getByte("Slot");
  245.  
  246.             if (var5 >= 0 && var5 < this.inventory.length)
  247.             {
  248.                 this.inventory[var5] = ItemStack.loadItemStackFromNBT(var4);
  249.             }
  250.            
  251.             this.power = par1NBTTagCompound.getInteger("CurrentPower");
  252.             this.progress = par1NBTTagCompound.getShort("Progress");
  253.            
  254.         }
  255.     }
  256.    
  257.     public void writeToNBT(NBTTagCompound par1NBTTagCompound) {
  258.         super.writeToNBT(par1NBTTagCompound);
  259.         PowerFramework.currentFramework.savePowerProvider(this, par1NBTTagCompound);
  260.         par1NBTTagCompound.setInteger("CurrentPower", this.power);
  261.         par1NBTTagCompound.setShort("Progress", this.progress);
  262.         NBTTagList var2 = new NBTTagList();
  263.  
  264.         for (int var3 = 0; var3 < this.inventory.length; ++var3)
  265.         {
  266.             if (this.inventory[var3] != null)
  267.             {
  268.                 NBTTagCompound var4 = new NBTTagCompound();
  269.                 var4.setByte("Slot", (byte)var3);
  270.                 this.inventory[var3].writeToNBT(var4);
  271.                 var2.appendTag(var4);
  272.             }
  273.         }
  274.  
  275.         par1NBTTagCompound.setTag("Items", var2);
  276.     }
  277.  
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement