Advertisement
GravityBurger

TileEntitySmallFryer

Jul 20th, 2014
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.12 KB | None | 0 0
  1. package GravityBurger.FriedChicken.tileentity;
  2.  
  3. import net.minecraft.block.Block;
  4. import net.minecraft.entity.player.EntityPlayer;
  5. import net.minecraft.init.Blocks;
  6. import net.minecraft.init.Items;
  7. import net.minecraft.inventory.IInventory;
  8. import net.minecraft.item.Item;
  9. import net.minecraft.item.ItemBlock;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.nbt.NBTTagCompound;
  12. import net.minecraft.nbt.NBTTagList;
  13. import net.minecraft.tileentity.TileEntity;
  14. import GravityBurger.FriedChicken.block.SmallFryer;
  15. import GravityBurger.FriedChicken.common.FriedChicken;
  16. import GravityBurger.FriedChicken.common.SmallFryerRecipes;
  17. import cpw.mods.fml.common.registry.GameRegistry;
  18. import cpw.mods.fml.relauncher.Side;
  19. import cpw.mods.fml.relauncher.SideOnly;
  20.  
  21. public class TileEntitySmallFryer extends TileEntity implements IInventory{
  22.  
  23.     private static final int[] slotsTop = new int[] {0};
  24.     private static final int[] slotsBottom = new int[] {2,1};
  25.     private static final int[] slotsSides = new int[] {1};
  26.    
  27.     private ItemStack[] furnaceItemStacks = new ItemStack[3];
  28.    
  29.     public int furnaceBurnTime;
  30.     public int currentBurnTime;
  31.     public int furnaceCookTime;
  32.    
  33.     private String furnaceName;
  34.    
  35.     public void furnaceName(String string){
  36.         this.furnaceName = string;
  37.     }
  38.     @Override
  39.     public int getSizeInventory() {
  40.         // TODO Auto-generated method stub
  41.         return this.furnaceItemStacks.length;
  42.     }
  43.  
  44.     @Override
  45.     public ItemStack getStackInSlot(int slot) {
  46.         // TODO Auto-generated method stub
  47.         return this.furnaceItemStacks[slot];
  48.     }
  49.  
  50.     @Override
  51.     public ItemStack decrStackSize(int par1, int par2) {
  52.         if (this.furnaceItemStacks[par1] != null) {
  53.             ItemStack itemstack;
  54.             if (this.furnaceItemStacks[par1].stackSize <= par2) {
  55.                 itemstack = this.furnaceItemStacks[par1];
  56.                 this.furnaceItemStacks[par1] = null;
  57.                 return itemstack;
  58.             } else {
  59.                 itemstack = this.furnaceItemStacks[par1].splitStack(par2);
  60.  
  61.                 if (this.furnaceItemStacks[par1].stackSize == 0) {
  62.                     this.furnaceItemStacks[par1] = null;
  63.                 }
  64.                 return itemstack;
  65.             }
  66.         } else {
  67.             return null;
  68.         }
  69.     }
  70.        
  71.    
  72.  
  73.     @Override
  74.     public ItemStack getStackInSlotOnClosing(int slot) {
  75.         if (this.furnaceItemStacks[slot] != null) {
  76.             ItemStack itemstack = this.furnaceItemStacks[slot];
  77.             this.furnaceItemStacks[slot] = null;
  78.             return itemstack;
  79.         } else {
  80.             return null;
  81.         }
  82.    
  83.        
  84.     }
  85.  
  86.     @Override
  87.     public void setInventorySlotContents(int slot, ItemStack itemstack) {
  88.         this.furnaceItemStacks[slot] = itemstack;
  89.  
  90.         if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit()) {
  91.             itemstack.stackSize = this.getInventoryStackLimit();
  92.         }
  93.  
  94.     }
  95.    
  96.  
  97.     @Override
  98.     public String getInventoryName() {
  99.         // TODO Auto-generated method stub
  100.         return this.hasCustomInventoryName() ? this.furnaceName : "Small Fryer";
  101.     }
  102.  
  103.     @Override
  104.     public boolean hasCustomInventoryName() {
  105.         return this.furnaceName != null && this.furnaceName.length() > 0;
  106.        
  107.     }
  108.  
  109.     @Override
  110.     public int getInventoryStackLimit() {
  111.         // TODO Auto-generated method stub
  112.         return 64;
  113.     }
  114.     public void readFromNBT(NBTTagCompound tagCompound) {
  115.         super.readFromNBT(tagCompound);
  116.         NBTTagList tagList = tagCompound.getTagList("Items", 10);
  117.         this.furnaceItemStacks = new ItemStack[this.getSizeInventory()];
  118.  
  119.         for (int i = 0; i < tagList.tagCount(); ++i) {
  120.             NBTTagCompound tabCompound1 = tagList.getCompoundTagAt(i);
  121.             byte byte0 = tabCompound1.getByte("Slot");
  122.  
  123.             if (byte0 >= 0 && byte0 < this.furnaceItemStacks.length) {
  124.                 this.furnaceItemStacks[byte0] = ItemStack.loadItemStackFromNBT(tabCompound1);
  125.             }
  126.         }
  127.  
  128.         this.furnaceBurnTime = tagCompound.getShort("BurnTime");
  129.         this.furnaceCookTime = tagCompound.getShort("CookTime");
  130.         this.currentBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);
  131.  
  132.         if (tagCompound.hasKey("CustomName", 8)) {
  133.             this.furnaceName = tagCompound.getString("CustomName");
  134.         }
  135.     }
  136.  
  137.     public void writeToNBT(NBTTagCompound tagCompound) {
  138.         super.writeToNBT(tagCompound);
  139.         tagCompound.setShort("BurnTime", (short) this.furnaceBurnTime);
  140.         tagCompound.setShort("CookTime", (short) this.furnaceBurnTime);
  141.         NBTTagList tagList = new NBTTagList();
  142.  
  143.         for (int i = 0; i < this.furnaceItemStacks.length; ++i) {
  144.             if (this.furnaceItemStacks[i] != null) {
  145.                 NBTTagCompound tagCompound1 = new NBTTagCompound();
  146.                 tagCompound1.setByte("Slot", (byte) i);
  147.                 this.furnaceItemStacks[i].writeToNBT(tagCompound1);
  148.                 tagList.appendTag(tagCompound1);
  149.             }
  150.         }
  151.  
  152.         tagCompound.setTag("Items", tagList);
  153.  
  154.         if (this.hasCustomInventoryName()) {
  155.             tagCompound.setString("CustomName", this.furnaceName);
  156.         }
  157.        
  158.     }
  159.     @SideOnly(Side.CLIENT)
  160.     public int getCookProgressScaled(int par1) {
  161.         return this.furnaceCookTime * par1 / 200;
  162.     }
  163.  
  164.     @SideOnly(Side.CLIENT)
  165.     public int getBurnTimeRemainingScaled(int par1) {
  166.         if (this.currentBurnTime == 0) {
  167.             this.currentBurnTime = 200;
  168.         }
  169.  
  170.         return this.furnaceBurnTime * par1 / this.currentBurnTime;
  171.     }
  172.  
  173.     public boolean isBurning() {
  174.         return this.furnaceBurnTime > 0;
  175.     }
  176.  
  177.     public void updateEntity() {
  178.         boolean flag = this.furnaceBurnTime > 0;
  179.         boolean flag1 = false;
  180.  
  181.         if (this.furnaceBurnTime > 0) {
  182.             --this.furnaceBurnTime;
  183.         }
  184.  
  185.         if (!this.worldObj.isRemote) {
  186.             if (this.furnaceBurnTime == 0 && this.canSmelt()) {
  187.                 this.currentBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]);
  188.  
  189.                 if (this.furnaceBurnTime > 0) {
  190.                     flag1 = true;
  191.                     if (this.furnaceItemStacks[1] != null) {
  192.                         --this.furnaceItemStacks[1].stackSize;
  193.  
  194.                         if (this.furnaceItemStacks[1].stackSize == 0) {
  195.                             this.furnaceItemStacks[1] = furnaceItemStacks[1].getItem().getContainerItem(this.furnaceItemStacks[1]);
  196.                         }
  197.                     }
  198.                 }
  199.             }
  200.  
  201.             if (this.isBurning() && this.canSmelt()) {
  202.                 ++this.furnaceCookTime;
  203.                 if (this.furnaceCookTime == 200) {
  204.                     this.furnaceCookTime = 0;
  205.                     this.smeltItem();
  206.                     flag1 = true;
  207.                 }
  208.             } else {
  209.                 this.furnaceCookTime = 0;
  210.             }
  211.         }
  212.  
  213.         if (flag != this.furnaceBurnTime > 0) {
  214.             flag1 = true;
  215.             SmallFryer.updateBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord);
  216.         }
  217.  
  218.         if (flag1) {
  219.             this.markDirty();
  220.         }
  221.     }
  222.  
  223.     private boolean canSmelt() {
  224.         if (this.furnaceItemStacks[0] == null) {
  225.             return false;
  226.         } else {
  227.             ItemStack itemstack = SmallFryerRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
  228.             if (itemstack == null) return false;
  229.             if (this.furnaceItemStacks[2] == null) return true;
  230.             if (!this.furnaceItemStacks[2].isItemEqual(itemstack)) return false;
  231.             int result = furnaceItemStacks[2].stackSize + itemstack.stackSize;
  232.             return result <= getInventoryStackLimit() && result <= this.furnaceItemStacks[2].getMaxStackSize();
  233.         }
  234.     }
  235.  
  236.     public void smeltItem() {
  237.         if (this.canSmelt()) {
  238.             ItemStack itemstack = SmallFryerRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0]);
  239.  
  240.             if (this.furnaceItemStacks[2] == null) {
  241.                 this.furnaceItemStacks[2] = itemstack.copy();
  242.             } else if (this.furnaceItemStacks[2].getItem() == itemstack.getItem()) {
  243.                 this.furnaceItemStacks[2].stackSize += itemstack.stackSize;
  244.             }
  245.  
  246.             --this.furnaceItemStacks[0].stackSize;
  247.  
  248.             if(this.furnaceItemStacks[0].stackSize >= 0){
  249.                 this.furnaceItemStacks[0] = null;
  250.             }
  251.         }
  252.     }
  253.  
  254.     public static int getItemBurnTime(ItemStack itemstack){
  255.         if(itemstack == null){
  256.             return 0;
  257.         }else{
  258.             Item item = itemstack.getItem();
  259.  
  260.             if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){
  261.                 Block block = Block.getBlockFromItem(item);
  262.  
  263.                 if(item == FriedChicken.VegetableOil){
  264.                     return 200;
  265.                 }
  266.  
  267.                 //if(block.getMaterial() == Material.rock){
  268.                     return 300;
  269.                 }
  270.             }
  271.  
  272.             //if(item == TMItem.tutItem) return 1600;
  273.             //if(item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("EMERALD")) return 300;
  274.             return GameRegistry.getFuelValue(itemstack);
  275.         }
  276.    
  277.  
  278.     public static boolean isItemFuel(ItemStack itemstack){
  279.         return getItemBurnTime(itemstack) > 0;
  280.     }
  281.  
  282.     @Override
  283.     public boolean isUseableByPlayer(EntityPlayer player) {
  284.         // TODO Auto-generated method stub
  285.         return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double) this.xCoord + 0.5D, (double) this.yCoord + 0.5D, (double) this.zCoord + 0.5D) <= 64.0D;
  286.     }
  287.  
  288.     @Override
  289.     public void openInventory() {
  290.         // TODO Auto-generated method stub
  291.        
  292.     }
  293.  
  294.     @Override
  295.     public void closeInventory() {
  296.         // TODO Auto-generated method stub
  297.        
  298.     }
  299.  
  300.     @Override
  301.     public boolean isItemValidForSlot(int par1, ItemStack itemstack) {
  302.         // TODO Auto-generated method stub
  303.         return par1 == 2 ? false : (par1 == 1 ? isItemFuel(itemstack) : true);
  304.     }
  305.    
  306.  
  307.     public int[] getAccessibleSlotsFromSide(int par1) {
  308.         return par1 == 0 ? slotsBottom : (par1 == 1 ? slotsTop : slotsSides);
  309.     }
  310.  
  311.  
  312.     public boolean canInsertItem(int par1, ItemStack itemstack, int par3) {
  313.         return this.isItemValidForSlot(par1, itemstack);
  314.     }
  315.  
  316.  
  317.     public boolean canExtractItem(int par1, ItemStack itemstack, int par3) {
  318.         return par3 != 0 || par1 != 1 || itemstack.getItem() == Items.glass_bottle;
  319.     }
  320.  
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement