package crazypants.enderio.machine.farm.farmers;
import net.minecraft.block.Block;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import com.enderio.core.common.util.BlockCoord;
import cpw.mods.fml.common.registry.GameRegistry;
import crazypants.enderio.machine.farm.FarmStationContainer;
import crazypants.enderio.machine.farm.TileFarmStation;
import crazypants.enderio.machine.farm.TileFarmStation.ToolType;
public class RubberTreeFarmerIC2 extends TreeFarmer {
public static Class<?> treeTap;
private ItemStack stickyResin;
public RubberTreeFarmerIC2() {
super(GameRegistry.findBlock("IC2", "blockRubSapling"), GameRegistry.findBlock("IC2", "blockRubWood"));
Item item = GameRegistry.findItem("IC2", "itemTreetap");
if(item != null) {
treeTap = item.getClass();
}
item = GameRegistry.findItem("IC2", "itemHarz");
if(item != null) {
stickyResin = new ItemStack(item);
FarmStationContainer.slotItemsProduce.add(stickyResin);
}
}
public boolean isValid() {
return woods != null && woods.length > 0 && sapling != null && saplingItem != null && treeTap != null && stickyResin != null;
}
@Override
public boolean prepareBlock(TileFarmStation farm, BlockCoord bc, Block block, int meta) {
for(int x=-1;x<2;x++) {
for(int z=-1;z<2;z++) {
Block blk = farm.getBlock(bc.x + x, bc.y, bc.z + z);
if(isWood(blk) || sapling == blk) {
return false;
}
}
}
return super.prepareBlock(farm, bc, block, meta);
}
@Override
public IHarvestResult harvestBlock(TileFarmStation farm, BlockCoord bc, Block block, int meta) {
HarvestResult res = new HarvestResult();
int y = bc.y;
boolean done = false;
while (!done && farm.hasTool(ToolType.TREETAP)) {
bc = new BlockCoord(bc.x, y, bc.z);
block = farm.getBlock(bc);
if(!isWood(block)) {
done = true;
} else {
meta = farm.getBlockMeta(bc);
if(attemptHarvest(res, farm.getWorldObj(), bc.x, y, bc.z, meta)) {
farm.damageTool(ToolType.TREETAP, woods[0], bc, 1);
}
}
y++;
}
return res;
}
private boolean attemptHarvest(HarvestResult res, World world, int x, int y, int z, int meta) {
if(meta > 1 && meta < 6) {
world.setBlockMetadataWithNotify(x, y, z, meta + 6, 3);
world.scheduleBlockUpdate(x, y, z, woods[0], woods[0].tickRate(world));
ItemStack drop = stickyResin.copy();
drop.stackSize = world.rand.nextInt(3) + 1;
EntityItem dropEnt = new EntityItem(world, x + 0.5, y + 1, z + 0.5, drop);
res.getDrops().add(dropEnt);
return true;
}
return false;
}
}