package com.minemaarten.advancedmod.tileentity;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper;
public class TileEntityTreeFarm extends TileEntityAdvancedMod{
private boolean formed;
private boolean foundInvalidBlock;
private int inventoriesFound;
private IInventory inventory;
private int checkingX, checkingY, checkingZ;
@Override
public void updateEntity(){
super.updateEntity();
if(!worldObj.isRemote) {
checkMultiblock();
if(formed) {
cutTree();
placeSapling();
}
}
}
private void placeSapling(){
if(worldObj.isAirBlock(xCoord, yCoord + 2, zCoord)) {
if(inventory != null) {
for(int i = 0; i < inventory.getSizeInventory(); i++) {
ItemStack stack = inventory.getStackInSlot(i);
if(stack != null && stack.getItem() instanceof ItemBlock) {
Block block = ((ItemBlock)stack.getItem()).field_150939_a;
if(block == Blocks.sapling) {
worldObj.setBlock(xCoord, yCoord + 2, zCoord, block, stack.getItemDamage(), 3);
inventory.decrStackSize(i, 1);
}
}
}
}
}
}
private void cutTree(){
if(inventory != null) {
Block block = worldObj.getBlock(xCoord, yCoord + 2, zCoord);
int offsetY = yCoord + 2;
while(block.getMaterial() == Material.wood) {
List<ItemStack> items = block.getDrops(worldObj, xCoord, offsetY, zCoord, worldObj.getBlockMetadata(xCoord, offsetY, zCoord), 0);
for(ItemStack item : items) {
ItemStack remainder = TileEntityHopper.func_145889_a(inventory, item, 0);
if(remainder != null) {
worldObj.spawnEntityInWorld(new EntityItem(worldObj, xCoord + 0.5, yCoord + 2.5, zCoord + 0.5, remainder));
}
}
worldObj.setBlock(xCoord, offsetY, zCoord, Blocks.air);
offsetY++;
block = worldObj.getBlock(xCoord, offsetY, zCoord);
}
}
}
private void checkMultiblock(){
checkingX++;
if(checkingX > 1) {
checkingX = -1;
checkingY++;
if(checkingY > 1) {
checkingY = -1;
checkingZ++;
if(checkingZ > 1) {
checkingZ = -1;
formed = !foundInvalidBlock && inventoriesFound == 1;
foundInvalidBlock = false;
inventoriesFound = 0;
}
}
}
if(checkingX == 0 && checkingY == 0 && checkingZ == 0) return;
Block block = worldObj.getBlock(xCoord + checkingX, yCoord + checkingY, zCoord + checkingZ);
if(checkingX == 0 && checkingZ == 0 && checkingY == 1) {
if(block != Blocks.dirt && block != Blocks.grass) {
foundInvalidBlock = true;
}
} else if(checkingY == 1 && checkingX != 0 ^ checkingZ != 0) {
TileEntity te = worldObj.getTileEntity(xCoord + checkingX, yCoord + checkingY, zCoord + checkingZ);
if(te instanceof IInventory) {
inventoriesFound++;
inventory = (IInventory)te;
} else if(block != Blocks.iron_block) {
foundInvalidBlock = true;
}
} else if(block != Blocks.iron_block) {
foundInvalidBlock = true;
}
}
}