Advertisement
Guest User

Untitled

a guest
Mar 26th, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.28 KB | None | 0 0
  1. package org.tetawex.tileEntity;
  2.  
  3. import org.tetawex.block.AllBlocks;
  4. import org.tetawex.block.Foundry;
  5. import org.tetawex.block.Refinery;
  6. import org.tetawex.handler.FoundryRecipes;
  7. import org.tetawex.handler.RefineryRecipes;
  8.  
  9. import net.minecraft.block.Block;
  10. import net.minecraft.block.material.Material;
  11. import net.minecraft.entity.player.EntityPlayer;
  12. import net.minecraft.init.Blocks;
  13. import net.minecraft.init.Items;
  14. import net.minecraft.inventory.ISidedInventory;
  15. import net.minecraft.item.Item;
  16. import net.minecraft.item.ItemBlock;
  17. import net.minecraft.item.ItemStack;
  18. import net.minecraft.item.ItemTool;
  19. import net.minecraft.item.crafting.FurnaceRecipes;
  20. import net.minecraft.nbt.NBTTagCompound;
  21. import net.minecraft.nbt.NBTTagList;
  22. import net.minecraft.network.NetworkManager;
  23. import net.minecraft.network.Packet;
  24. import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
  25. import net.minecraft.tileentity.TileEntity;
  26. import cpw.mods.fml.common.registry.GameRegistry;
  27. import cpw.mods.fml.relauncher.Side;
  28. import cpw.mods.fml.relauncher.SideOnly;
  29.  
  30. public class TileEntityFoundry extends TileEntity implements ISidedInventory {
  31.  
  32.     private static final int[] slotsTop = new int[] { 0 };
  33.     private static final int[] slotsBottom = new int[] { 2, 1 };
  34.     private static final int[] slotsSides = new int[] { 1 };
  35.    
  36.     public int discNumber=0;
  37.     private ItemStack[] itemStacks = new ItemStack[3];//1=fuel,2=item,3=result
  38.     public int refineTime;
  39.     public int maxRefineTime=1600;
  40.     public int energyLevel=0;
  41.     public int maxEnergyLevel=128000;
  42.  
  43.     private String name;
  44.  
  45.     public void setName(String string)
  46.     {
  47.         name = string;
  48.     }
  49.    
  50.     @Override
  51.     public int getSizeInventory()
  52.     {
  53.         return itemStacks.length;
  54.     }
  55.  
  56.     @Override
  57.     public ItemStack getStackInSlot(int slot)
  58.     {
  59.         return itemStacks[slot];
  60.     }
  61.  
  62.     @Override
  63.     public ItemStack decrStackSize(int slot, int number)
  64.     {
  65.         if (itemStacks[slot] != null)
  66.         {
  67.             ItemStack itemstack;
  68.             if (itemStacks[slot].stackSize <= number)
  69.             {
  70.                 itemstack = itemStacks[slot];
  71.                 this.itemStacks[slot] = null;
  72.                 return itemstack;
  73.             }
  74.             else
  75.             {
  76.                 itemstack = itemStacks[slot].splitStack(number);
  77.  
  78.                 if (itemStacks[slot].stackSize == 0)
  79.                 {
  80.                     itemStacks[slot] = null;
  81.                 }
  82.                 return itemstack;
  83.             }
  84.         }
  85.         else
  86.         {
  87.             return null;
  88.         }
  89.     }
  90.  
  91.     @Override
  92.     public ItemStack getStackInSlotOnClosing(int slot)
  93.     {
  94.         if (itemStacks[slot] != null)
  95.         {
  96.             ItemStack itemstack = itemStacks[slot];
  97.             itemStacks[slot] = null;
  98.             return itemstack;
  99.         }
  100.         else
  101.         {
  102.             return null;
  103.         }
  104.     }
  105.  
  106.     @Override
  107.     public void setInventorySlotContents(int slot, ItemStack itemstack)
  108.     {
  109.         itemStacks[slot] = itemstack;
  110.  
  111.         if (itemstack != null && itemstack.stackSize > this.getInventoryStackLimit())
  112.         {
  113.             itemstack.stackSize = getInventoryStackLimit();
  114.         }
  115.  
  116.     }
  117.  
  118.     @Override
  119.     public String getInventoryName()
  120.     {
  121.         return this.hasCustomInventoryName() ? name : "Foundry";
  122.     }
  123.  
  124.     @Override
  125.     public boolean hasCustomInventoryName()
  126.     {
  127.         return name != null && name.length() > 0;
  128.     }
  129.  
  130.     @Override
  131.     public int getInventoryStackLimit()
  132.     {
  133.         return 64;
  134.     }
  135.     @Override
  136.     public Packet getDescriptionPacket() {
  137.         NBTTagCompound tag = new NBTTagCompound();
  138.         writeToNBT(tag);
  139.         return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, tag);
  140.     }
  141.     @Override
  142.     public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
  143.         readFromNBT(pkt.func_148857_g());
  144.     }
  145.     public void readFromNBT(NBTTagCompound tagCompound)
  146.     {
  147.         super.readFromNBT(tagCompound);
  148.         NBTTagList tagList = tagCompound.getTagList("Items", 10);
  149.         itemStacks = new ItemStack[getSizeInventory()];
  150.  
  151.         for (int i = 0; i < tagList.tagCount(); ++i)
  152.         {
  153.             NBTTagCompound tagCompound1 = tagList.getCompoundTagAt(i);
  154.             byte byte0 = tagCompound1.getByte("Slot");
  155.  
  156.             if (byte0 >= 0 && byte0 < itemStacks.length)
  157.             {
  158.                 itemStacks[byte0] = ItemStack.loadItemStackFromNBT(tagCompound1);
  159.             }
  160.         }
  161.  
  162.         refineTime = tagCompound.getShort("RefineTime");
  163.         energyLevel = tagCompound.getInteger("EnergyLevel");
  164.         discNumber = tagCompound.getShort("DiscNumber");
  165.         //System.out.println(discNumber);
  166.  
  167.         if (tagCompound.hasKey("Foundry", 8))
  168.         {
  169.             name = tagCompound.getString("Foundry");
  170.         }
  171.     }
  172.  
  173.     public void writeToNBT(NBTTagCompound tagCompound)
  174.     {
  175.         super.writeToNBT(tagCompound);
  176.         tagCompound.setShort("RefineTime", (short) refineTime);
  177.         tagCompound.setShort("DiscNumber", (short) discNumber);
  178.        
  179.         tagCompound.setInteger("EnergyLevel", energyLevel);
  180.         NBTTagList tagList = new NBTTagList();
  181.  
  182.         for (int i = 0; i < itemStacks.length; ++i)
  183.         {
  184.             if (itemStacks[i] != null)
  185.             {
  186.                 NBTTagCompound tagCompound1 = new NBTTagCompound();
  187.                 tagCompound1.setByte("Slot", (byte) i);
  188.                 itemStacks[i].writeToNBT(tagCompound1);
  189.                 tagList.appendTag(tagCompound1);
  190.             }
  191.         }
  192.  
  193.         tagCompound.setTag("Items", tagList);
  194.  
  195.         if (hasCustomInventoryName())
  196.         {
  197.             tagCompound.setString("Foundry", name);
  198.         }
  199.     }
  200.  
  201.     @SideOnly(Side.CLIENT)
  202.     public int getCookProgressScaled(int barHeight)
  203.     {
  204.         return this.refineTime * barHeight / maxRefineTime;
  205.     }
  206.  
  207.     @SideOnly(Side.CLIENT)
  208.     public int getEnergyLevelScaled(int barHeight)
  209.     {
  210.        
  211.         return energyLevel * barHeight / maxEnergyLevel;
  212.     }
  213.  
  214.     public boolean isBurning()
  215.     {
  216.         if (energyLevel > 0 && canSmelt())
  217.         {
  218.             return true;
  219.         }
  220.         else return false;
  221.     }
  222.  
  223.     public void updateEntity()
  224.     {
  225.         boolean flag = (energyLevel > 0 && canSmelt());
  226.         boolean flag1 = false;
  227.  
  228.         if (!worldObj.isRemote)
  229.         {
  230.                     flag1 = true;
  231.                     if (itemStacks[1] != null&&energyLevel+4000<=maxEnergyLevel)
  232.                     {
  233.                         itemStacks[1].stackSize--;
  234.  
  235.                         if (itemStacks[1].stackSize == 0)
  236.                         {
  237.                             itemStacks[1] = itemStacks[1].getItem().getContainerItem(itemStacks[1]);
  238.                         }
  239.                             energyLevel+=4000;
  240.                     }
  241.  
  242.             if (canSmelt()&&energyLevel>0)
  243.             {
  244.                 refineTime++;
  245.                 if (refineTime == maxRefineTime)
  246.                 {
  247.                     refineTime = 0;
  248.                     smeltItem();
  249.                     flag1 = true;
  250.                 }
  251.             }
  252.             else
  253.             {
  254.                 refineTime = 0;
  255.             }
  256.             if (energyLevel > 0 && canSmelt())
  257.             {
  258.                 energyLevel-=10 ;
  259.             }
  260.             //System.out.println("Server: "+discNumber);
  261.             flag1=true;
  262.         }
  263.         Foundry.updateBlockState(isBurning(), worldObj, xCoord, yCoord, zCoord);
  264.         if (flag1)
  265.         {
  266.             markDirty();
  267.         }
  268.     }
  269.  
  270.     private boolean canSmelt()
  271.     {
  272.         if (itemStacks[0] == null)
  273.         {
  274.             return false;
  275.         }
  276.         else
  277.         {
  278.             ItemStack itemstack = FoundryRecipes.smelting().getSmeltingResult(itemStacks[0],discNumber);
  279.             if (itemstack == null) return false;
  280.             if (itemStacks[0].stackSize<FoundryRecipes.smelting().getRequiredNumber(itemStacks[0],discNumber)) return false;
  281.             if (itemStacks[2] == null) return true;
  282.             if (!itemStacks[2].isItemEqual(itemstack)) return false;
  283.             int result = itemStacks[2].stackSize + itemstack.stackSize;
  284.             return result <= getInventoryStackLimit() && result <= itemStacks[2].getMaxStackSize();
  285.         }
  286.     }
  287.  
  288.     public void smeltItem()
  289.     {
  290.         if (canSmelt())
  291.         {
  292.             ItemStack itemstack = FoundryRecipes.smelting().getSmeltingResult(itemStacks[0],discNumber);
  293.  
  294.             if (this.itemStacks[2] == null)
  295.             {
  296.                 this.itemStacks[2] = itemstack.copy();
  297.             }
  298.             else if (itemStacks[2].getItem() == itemstack.getItem())
  299.             {
  300.                 itemStacks[2].stackSize += itemstack.stackSize;
  301.             }
  302.            
  303.             itemStacks[0].stackSize-=FoundryRecipes.smelting().getRequiredNumber(itemStacks[0],discNumber);
  304.            
  305.             if(itemStacks[0].stackSize < 1)
  306.             {
  307.                 itemStacks[0] = null;
  308.             }
  309.         }
  310.     }
  311.    
  312.     public static int getItemBurnTime(ItemStack itemstack)
  313.     {
  314.         if(itemstack == null)
  315.         {
  316.             return 0;
  317.         }
  318.         else
  319.         {
  320.             Item item = itemstack.getItem();
  321.            
  322.             /*if(item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air){
  323.                 Block block = Block.getBlockFromItem(item);
  324.                
  325.                 if(block == TMBlock.tutBlock){
  326.                     return 200;
  327.                 }
  328.                
  329.                 if(block.getMaterial() == Material.rock){
  330.                     return 300;
  331.                 }
  332.             }*/
  333.            
  334.             if(item == Item.getItemFromBlock(Blocks.redstone_block)) return 6400;
  335.             //if(item instanceof ItemTool && ((ItemTool) item).getToolMaterialName().equals("EMERALD")) return 300;
  336.             return GameRegistry.getFuelValue(itemstack);
  337.         }
  338.     }
  339.  
  340.     public static boolean isItemFuel(ItemStack itemstack)
  341.     {
  342.         return getItemBurnTime(itemstack) > 0;
  343.     }
  344.    
  345.     @Override
  346.     public boolean isUseableByPlayer(EntityPlayer player)
  347.     {
  348.         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;
  349.     }
  350.  
  351.     @Override
  352.     public void openInventory()
  353.     {
  354.  
  355.     }
  356.  
  357.     @Override
  358.     public void closeInventory()
  359.     {
  360.  
  361.     }
  362.  
  363.     @Override
  364.     public boolean isItemValidForSlot(int slot, ItemStack itemstack)
  365.     {
  366.         return slot == 2 ? false : (slot == 1 ? isItemFuel(itemstack) : true);
  367.     }
  368.  
  369.     @Override
  370.     public int[] getAccessibleSlotsFromSide(int side)
  371.     {
  372.         return side == 0 ? slotsBottom : (side == 1 ? slotsTop : slotsSides);
  373.     }
  374.  
  375.     @Override
  376.     public boolean canInsertItem(int slot, ItemStack itemstack, int side)
  377.     {
  378.         return this.isItemValidForSlot(slot, itemstack);
  379.     }
  380.  
  381.     @Override
  382.     public boolean canExtractItem(int slot, ItemStack itemstack, int side)
  383.     {
  384.         return side != 0 || slot != 1 || itemstack.getItem() == Items.bucket;
  385.     }
  386.  
  387. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement