package pneumaticCraft.common.thirdparty.forestry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import pneumaticCraft.common.item.ItemPlasticPlants;
import pneumaticCraft.common.item.Itemss;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
public class FarmablePlastic implements IFarmable{
private final int meta;
public FarmablePlastic(Block block){
meta = getItemMetaForBlock(block);
}
public static int getItemMetaForBlock(Block block){
List<ItemStack> seeds = new ArrayList<ItemStack>();
((ItemPlasticPlants)Itemss.plasticPlant).addSubItems(seeds);
for(ItemStack seed : seeds) {
Block plantBlock = ItemPlasticPlants.getPlantBlockIDFromSeed(seed.getItemDamage());
if(plantBlock == block) {
return seed.getItemDamage();
}
}
throw new IllegalArgumentException("No meta value found for the given block!");
}
public FarmablePlastic(int meta){
this.meta = meta;
}
@Override
public boolean isSaplingAt(World world, int x, int y, int z){
Block block = world.getBlock(x, y, z);
List<ItemStack> seeds = new ArrayList<ItemStack>();
((ItemPlasticPlants)Itemss.plasticPlant).addSubItems(seeds);
for(ItemStack seed : seeds) {
if(seed.getItemDamage() % 16 == meta) {
Block plantBlock = ItemPlasticPlants.getPlantBlockIDFromSeed(seed.getItemDamage());
if(plantBlock == block) return true;
}
}
return false;
}
@Override
public ICrop getCropAt(World world, int x, int y, int z){
if(!isSaplingAt(world, x, y, z)) return null;
int meta = world.getBlockMetadata(x, y, z);
return meta == 6 || meta == 13 ? new ICrop(){
private World world;
private int x, y, z;
public ICrop setCoord(World world, int x, int y, int z){
this.world = world;
this.x = x;
this.y = y;
this.z = z;
return this;
}
@Override
public Collection<ItemStack> harvest(){
List<ItemStack> drops = world.getBlock(x, y, z).getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
for(ItemStack drop : drops) {
drop.setItemDamage(drop.getItemDamage() % 16);
}
world.func_147480_a(x, y, z, false);
world.setBlockToAir(x, y, z);
return drops;
}
}.setCoord(world, x, y, z) : null;
}
@Override
public boolean isGermling(ItemStack itemstack){
return itemstack.getItem() == Itemss.plasticPlant && itemstack.getItemDamage() % 16 == meta;
}
@Override
public boolean isWindfall(ItemStack itemstack){
return false;
}
@Override
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, int x, int y, int z){
Block plant = ItemPlasticPlants.getPlantBlockIDFromSeed(germling.getItemDamage());
if(plant.canBlockStay(world, x, y, z)) {
return world.setBlock(x, y, z, plant);
}
return false;
}
}