SHARE
TWEET

TileEntityChickenFurnace.java

FlowArg Sep 24th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package fr.flowarg.gunsofchickens.blocks.tileentities;
  2.  
  3. import fr.flowarg.gunsofchickens.blocks.machines.chickenfurnace.ChickenFurnace;
  4. import fr.flowarg.gunsofchickens.blocks.machines.chickenfurnace.ChickenFurnaceRecipes;
  5. import fr.flowarg.gunsofchickens.items.ChickenCoal;
  6. import net.minecraft.entity.player.EntityPlayer;
  7. import net.minecraft.inventory.IInventory;
  8. import net.minecraft.inventory.ItemStackHelper;
  9. import net.minecraft.item.Item;
  10. import net.minecraft.item.ItemStack;
  11. import net.minecraft.nbt.NBTTagCompound;
  12. import net.minecraft.tileentity.TileEntity;
  13. import net.minecraft.util.ITickable;
  14. import net.minecraft.util.NonNullList;
  15. import net.minecraft.util.math.MathHelper;
  16. import net.minecraft.util.text.ITextComponent;
  17. import net.minecraft.util.text.TextComponentString;
  18. import net.minecraft.util.text.TextComponentTranslation;
  19. import net.minecraftforge.event.ForgeEventFactory;
  20. import net.minecraftforge.fml.relauncher.Side;
  21. import net.minecraftforge.fml.relauncher.SideOnly;
  22.  
  23. public class TileEntityChickenFurnace extends TileEntity implements IInventory,ITickable
  24. {
  25.     private NonNullList<ItemStack> inventory = NonNullList.<ItemStack>withSize(4, ItemStack.EMPTY);
  26.     private String customName;
  27.     private int burnTime;
  28.     private int currentBurnTime;
  29.     private int cookTime;
  30.     private int totalCookTime;
  31.  
  32.     @Override
  33.     public String getName()
  34.     {
  35.         return this.hasCustomName() ? this.customName : "container.chicken_furnace";
  36.     }
  37.  
  38.     @Override
  39.     public boolean hasCustomName()
  40.     {
  41.         return this.customName != null && !this.customName.isEmpty();
  42.     }
  43.  
  44.     public void setCustomName(String customName)
  45.     {
  46.         this.customName = customName;
  47.     }
  48.  
  49.     @Override
  50.     public ITextComponent getDisplayName()
  51.     {
  52.         return this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName());
  53.     }
  54.  
  55.     @Override
  56.     public int getSizeInventory()
  57.     {
  58.         return this.inventory.size();
  59.     }
  60.  
  61.     @Override
  62.     public boolean isEmpty()
  63.     {
  64.         for (ItemStack stack : this.inventory)
  65.         {
  66.             if (!stack.isEmpty()) return false;
  67.         }
  68.         return true;
  69.     }
  70.  
  71.     @Override
  72.     public ItemStack getStackInSlot(int index)
  73.     {
  74.         return (ItemStack)this.inventory.get(index);
  75.     }
  76.  
  77.     @Override
  78.     public ItemStack decrStackSize(int index, int count)
  79.     {
  80.         return ItemStackHelper.getAndSplit(this.inventory, index, count);
  81.     }
  82.  
  83.     @Override
  84.     public ItemStack removeStackFromSlot(int index)
  85.     {
  86.         return ItemStackHelper.getAndRemove(this.inventory, index);
  87.     }
  88.  
  89.     @Override
  90.     public void setInventorySlotContents(int index, ItemStack stack)
  91.     {
  92.         ItemStack itemStack = (ItemStack)this.inventory.get(index);
  93.         boolean flag = !stack.isEmpty() && stack.isItemEqual(itemStack) && ItemStack.areItemStacksEqualUsingNBTShareTag(stack, itemStack);
  94.         this.inventory.set(index, stack);
  95.  
  96.         if (stack.getCount() > this.getInventoryStackLimit()) stack.setCount(this.getInventoryStackLimit());
  97.         if (index == 0 && index + 1 == 1 && !flag)
  98.         {
  99.             ItemStack stack1 = (ItemStack)this.inventory.get(index + 1);
  100.             this.totalCookTime = this.getCookTime(stack, stack1);
  101.             this.cookTime = 0;
  102.             this.markDirty();
  103.         }
  104.     }
  105.  
  106.     @Override
  107.     public void readFromNBT(NBTTagCompound compound)
  108.     {
  109.         super.readFromNBT(compound);
  110.         this.inventory = NonNullList.<ItemStack>withSize(this.getSizeInventory(), ItemStack.EMPTY);
  111.         ItemStackHelper.loadAllItems(compound, this.inventory);
  112.         this.burnTime = compound.getInteger("BurnTime");
  113.         this.cookTime = compound.getInteger("CookTime");
  114.         this.totalCookTime = compound.getInteger("TotalCookTime");
  115.         this.currentBurnTime = getItemBurnTime((ItemStack)this.inventory.get(2));
  116.  
  117.         if (compound.hasKey("CustomChickenFurnaceName", 8)) this.setCustomName(compound.getString("CustomChickenFurnaceName"));
  118.     }
  119.  
  120.     @Override
  121.     public NBTTagCompound writeToNBT(NBTTagCompound compound)
  122.     {
  123.         super.writeToNBT(compound);
  124.         compound.setInteger("BurnTime", (short)this.burnTime);
  125.         compound.setInteger("CookTime", (short)this.cookTime);
  126.         compound.setInteger("TotalCookTime", (short)this.totalCookTime);
  127.         ItemStackHelper.saveAllItems(compound, this.inventory);
  128.  
  129.         if (this.hasCustomName()) compound.setString("CustomChickenFurnaceName", this.customName);
  130.         return compound;
  131.     }
  132.  
  133.     @Override
  134.     public int getInventoryStackLimit()
  135.     {
  136.         return 64;
  137.     }
  138.  
  139.     public boolean isBurning()
  140.     {
  141.         return this.burnTime > 0;
  142.     }
  143.  
  144.     @SideOnly(Side.CLIENT)
  145.     public static boolean isBurning(IInventory inventory)
  146.     {
  147.         return inventory.getField(0) > 0;
  148.     }
  149.  
  150.     @Override
  151.     public void update()
  152.     {
  153.         boolean flag = this.isBurning();
  154.         boolean flag1 = false;
  155.  
  156.         if (this.isBurning()) -- this.burnTime;
  157.  
  158.         if (!this.world.isRemote)
  159.         {
  160.             ItemStack stack = (ItemStack)this.inventory.get(2);
  161.  
  162.             if (this.isBurning() || !stack.isEmpty() && ((((ItemStack)this.inventory.get(0)).isEmpty()) || ((ItemStack)this.inventory.get(1)).isEmpty()))
  163.             {
  164.                 if (!this.isBurning() && this.canSmelt())
  165.                 {
  166.                     this.burnTime = getItemBurnTime(stack);
  167.                     this.currentBurnTime = this.burnTime;
  168.  
  169.                     if (this.isBurning())
  170.                     {
  171.                         flag1 = true;
  172.  
  173.                         if (!stack.isEmpty())
  174.                         {
  175.                             Item item = stack.getItem();
  176.                             stack.shrink(1);
  177.  
  178.                             if (stack.isEmpty())
  179.                             {
  180.                                 ItemStack item1 = item.getContainerItem(stack);
  181.                                 this.inventory.set(2, item1);
  182.                             }
  183.                         }
  184.                     }
  185.                 }
  186.                 if (this.isBurning() && this.canSmelt())
  187.                 {
  188.                     ++this.cookTime;
  189.  
  190.                     if (this.cookTime == this.totalCookTime)
  191.                     {
  192.                         this.cookTime = 0;
  193.                         this.totalCookTime = this.getCookTime((ItemStack)this.inventory.get(0), (ItemStack)this.inventory.get(2));
  194.                         this.smeltItem();
  195.                         flag1 = true;
  196.                     }
  197.                 }
  198.                 else this.cookTime = 0;
  199.             }
  200.             else if (!this.isBurning() && this.cookTime > 0)
  201.             {
  202.                 this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.totalCookTime);
  203.  
  204.             }
  205.             if (flag != this.isBurning())
  206.             {
  207.                 flag1 = true;
  208.                 ChickenFurnace.setState(this.isBurning(), this.world, this.pos);
  209.             }
  210.             if (flag1)
  211.                 this.markDirty();
  212.         }
  213.     }
  214.  
  215.     public int getCookTime(ItemStack input1, ItemStack input2)
  216.     {
  217.         return 200;
  218.     }
  219.  
  220.     private boolean canSmelt()
  221.     {
  222.         if (((ItemStack)this.inventory.get(0)).isEmpty() || ((ItemStack)this.inventory.get(1)).isEmpty()) return false;
  223.         else
  224.         {
  225.             ItemStack result = ChickenFurnaceRecipes.getInstance().getSmeltingResult((ItemStack)this.inventory.get(0), (ItemStack)this.inventory.get(1));
  226.             if (result.isEmpty()) return false;
  227.             else
  228.             {
  229.                 ItemStack output = (ItemStack)this.inventory.get(3);
  230.                 if (output.isEmpty()) return true;
  231.                 if (!output.isItemEqual(result)) return false;
  232.                 int res = output.getCount() + result.getCount();
  233.                 return res <= getInventoryStackLimit() && res <= output.getMaxStackSize();
  234.             }
  235.         }
  236.     }
  237.  
  238.     public void smeltItem()
  239.     {
  240.         if (this.canSmelt())
  241.         {
  242.             ItemStack input1 = (ItemStack)this.inventory.get(0);
  243.             ItemStack input2 = (ItemStack)this.inventory.get(1);
  244.             ItemStack result = ChickenFurnaceRecipes.getInstance().getSmeltingResult(input1, input2);
  245.             ItemStack output = (ItemStack)this.inventory.get(3);
  246.  
  247.             if (output.isEmpty()) this.inventory.set(3, result.copy());
  248.             else if(output.getItem() == result.getItem()) output.grow(result.getCount());
  249.  
  250.             input1.shrink(1);
  251.             input2.shrink(2);
  252.         }
  253.     }
  254.  
  255.     public static int getItemBurnTime(ItemStack fuel)
  256.     {
  257.         if (fuel.isEmpty()) return 0;
  258.         else
  259.         {
  260.             Item item = fuel.getItem();
  261.  
  262.             if (item instanceof ChickenCoal) return 200 * 10;
  263.  
  264.             return ForgeEventFactory.getItemBurnTime(fuel);
  265.         }
  266.     }
  267.  
  268.     public static boolean isItemFuel(ItemStack fuel)
  269.     {
  270.         return getItemBurnTime(fuel) > 0;
  271.     }
  272.  
  273.     @Override
  274.     public boolean isUsableByPlayer(EntityPlayer player)
  275.     {
  276.         return this.world.getTileEntity(this.pos) != this ? false : player.getDistanceSq((double)this.pos.getX() + 0.5d, (double)this.pos.getY() + 0.5d, (double)this.pos.getZ() + 0.5d) <= 64;
  277.     }
  278.  
  279.     @Override
  280.     public void openInventory(EntityPlayer player)
  281.     {
  282.  
  283.     }
  284.  
  285.     @Override
  286.     public void closeInventory(EntityPlayer player)
  287.     {
  288.  
  289.     }
  290.  
  291.     @Override
  292.     public boolean isItemValidForSlot(int index, ItemStack stack)
  293.     {
  294.         if (index == 3) return false;
  295.         else if (index != 2) return true;
  296.         else return isItemFuel(stack);
  297.     }
  298.  
  299.     @Override
  300.     public int getField(int id)
  301.     {
  302.         switch (id)
  303.         {
  304.             case 0:
  305.                 return this.burnTime;
  306.             case 1:
  307.                 return this.currentBurnTime;
  308.             case 2:
  309.                 return this.cookTime;
  310.             case 3:
  311.                 return this.totalCookTime;
  312.             default:
  313.                 return 0;
  314.         }
  315.     }
  316.  
  317.     @Override
  318.     public void setField(int id, int value)
  319.     {
  320.         switch (id)
  321.         {
  322.             case 0:
  323.                 this.burnTime = value;
  324.                 break;
  325.             case 1:
  326.                 this.currentBurnTime = value;
  327.                 break;
  328.             case 2:
  329.                 this.cookTime = value;
  330.                 break;
  331.             case 3:
  332.                 this.totalCookTime = value;
  333.                 break;
  334.         }
  335.     }
  336.  
  337.     @Override
  338.     public int getFieldCount()
  339.     {
  340.         return 4;
  341.     }
  342.  
  343.     @Override
  344.     public void clear()
  345.     {
  346.         this.inventory.clear();
  347.     }
  348. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top