package joshie.harvest.crops.block;
import joshie.harvest.core.base.block.BlockHFEnum;
import joshie.harvest.core.lib.CreativeSort;
import joshie.harvest.crops.block.BlockSprinkler.Sprinkler;
import joshie.harvest.crops.tile.TileSprinkler;
import joshie.harvest.crops.tile.TileSprinklerOld;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidUtil;
import javax.annotation.Nullable;
import java.util.Locale;
import static joshie.harvest.crops.HFCrops.SPRINKLER_DRAIN_RATE;
public class BlockSprinkler extends BlockHFEnum<BlockSprinkler, Sprinkler> {
private static final AxisAlignedBB IRON_AABB = new AxisAlignedBB(0.2D, 0D, 0.2D, 0.8D, 0.7D, 0.8D);
private static final AxisAlignedBB OLD_AABB = new AxisAlignedBB(0.2D, 0D, 0.2D, 0.8D, 0.5D, 0.8D);
public BlockSprinkler() {
super(Material.WOOD, Sprinkler.class);
setSoundType(SoundType.GROUND);
}
public enum Sprinkler implements IStringSerializable {
IRON, OLD;
@Override
public String getName() {
return toString().toLowerCase(Locale.ENGLISH);
}
}
@SuppressWarnings("deprecation")
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
if (getEnumFromState(state) == Sprinkler.IRON) return IRON_AABB;
else return OLD_AABB;
}
@SuppressWarnings("deprecation")
@Override
public AxisAlignedBB getCollisionBoundingBox(IBlockState state, World world, BlockPos pos) {
return NULL_AABB;
}
@Override
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (SPRINKLER_DRAIN_RATE <= 0) return false;
if (heldItem != null) {
TileEntity tile = worldIn.getTileEntity(pos);
if (tile instanceof TileSprinkler) {
TileSprinkler sprinkler = ((TileSprinkler)tile);
ItemStack result = FluidUtil.tryEmptyContainer(heldItem, sprinkler.getTank(), 1000, player, true);
if (result != null) {
if (result.stackSize > 0) {
player.setHeldItem(hand, result);
}
sprinkler.saveAndRefresh();
return true;
}
return false;
}
}
return false;
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return getEnumFromState(state) == Sprinkler.IRON ? new TileSprinkler() : new TileSprinklerOld();
}
@Override
public int getSortValue(ItemStack stack) {
return CreativeSort.TROUGH;
}
}