package pneumaticCraft.common.thirdparty.forestry; import java.util.ArrayList; import java.util.Collection; import java.util.List; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.ForgeDirection; import pneumaticCraft.common.block.Blockss; import pneumaticCraft.common.item.ItemPlasticPlants; import pneumaticCraft.common.item.Itemss; import forestry.api.farming.ICrop; import forestry.api.farming.IFarmHousing; import forestry.api.farming.IFarmLogic; public class FarmLogicHelium implements IFarmLogic{ private final IFarmHousing housing; private IIcon icon; private final FarmablePlastic farmable = new FarmablePlastic(Blockss.heliumPlant); public FarmLogicHelium(IFarmHousing farmHousing){ housing = farmHousing; } @Override public int getFertilizerConsumption(){ return 5; } @Override public int getWaterConsumption(float hydrationModifier){ return (int)(20 * hydrationModifier); } @Override public boolean isAcceptedResource(ItemStack itemstack){ return itemstack.getItem() instanceof ItemBlock && Blocks.netherrack == ((ItemBlock)itemstack.getItem()).field_150939_a; } @Override public boolean isAcceptedGermling(ItemStack itemstack){ return itemstack.getItem() == Itemss.plasticPlant && itemstack.getItemDamage() == ItemPlasticPlants.HELIUM_PLANT_DAMAGE; } @Override public Collection<ItemStack> collect(){ List<ItemStack> col = new ArrayList<ItemStack>(); int[] coords = housing.getCoords(); int[] area = housing.getArea(); int[] offset = housing.getOffset(); AxisAlignedBB harvestBox = AxisAlignedBB.getBoundingBox(coords[0] + offset[0], coords[1] + offset[1], coords[2] + offset[2], coords[0] + offset[0] + area[0], coords[1] + offset[1] + area[1], coords[2] + offset[2] + area[2]); List<EntityItem> list = housing.getWorld().getEntitiesWithinAABB(EntityItem.class, harvestBox); for(EntityItem item : list) { if(!item.isDead) { ItemStack contained = item.getEntityItem(); if(isAcceptedGermling(contained)) { col.add(contained.copy()); item.setDead(); } } } return col; } @Override public boolean cultivate(int x, int y, int z, ForgeDirection d, int extent){ for(int i = 0; i < extent; i++) { if(tryPlaceSoil(x + d.offsetX * i, y + d.offsetY * i - 2, z + d.offsetZ * i)) return true; } for(int i = 0; i < extent; i++) { if(manageCrops(x + d.offsetX * i, y + d.offsetY * i - 3, z + d.offsetZ * i)) return true; } return false; } private boolean tryPlaceSoil(int x, int y, int z){ if(housing.getWorld().getBlock(x, y, z).isReplaceable(housing.getWorld(), x, y, z)) { if(housing.hasResources(new ItemStack[]{new ItemStack(Blocks.netherrack)})) { housing.removeResources(new ItemStack[]{new ItemStack(Blocks.netherrack)}); housing.getWorld().setBlock(x, y, z, Blocks.netherrack); return true; } } return false; } private boolean manageCrops(int x, int y, int z){ if(housing.getWorld().getBlock(x, y, z).isReplaceable(housing.getWorld(), x, y, z)) { return housing.plantGermling(farmable, housing.getWorld(), x, y, z); } return false; } @Override public Collection<ICrop> harvest(int x, int y, int z, ForgeDirection d, int extent){ List<ICrop> crops = new ArrayList<ICrop>(); for(int i = 0; i < extent; i++) { ICrop crop = farmable.getCropAt(housing.getWorld(), x + d.offsetX * i, y + d.offsetY * i - 3, z + d.offsetZ * i); if(crop != null) crops.add(crop); } return crops; } @Override public IIcon getIcon(){ if(icon == null) { ItemStack stack = new ItemStack(Itemss.plasticPlant, 1, ItemPlasticPlants.HELIUM_PLANT_DAMAGE); icon = stack.getIconIndex(); } return icon; } @Override public ResourceLocation getSpriteSheet(){ return TextureMap.locationItemsTexture; } @Override public String getName(){ return new ItemStack(Itemss.plasticPlant, 1, ItemPlasticPlants.HELIUM_PLANT_DAMAGE).getDisplayName(); } @Override public IFarmLogic setManual(boolean manual){ return this; } }