package joshie.harvest.fishing.block;
import joshie.harvest.core.HFTab;
import joshie.harvest.core.base.block.BlockHFEnum;
import joshie.harvest.core.base.item.ItemBlockHF;
import joshie.harvest.core.base.tile.TileSingleStack;
import joshie.harvest.fishing.block.BlockAquatic.Aquatic;
import joshie.harvest.fishing.item.ItemBlockAquatic;
import joshie.harvest.fishing.tile.TileTrap;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
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.BlockPos;
import net.minecraft.world.ChunkCache;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import java.util.Locale;
import static joshie.harvest.core.proxy.HFClientProxy.NO_WATER;
import static joshie.harvest.fishing.block.BlockAquatic.Aquatic.TRAP_BAITED;
import static net.minecraft.block.BlockLiquid.LEVEL;
public class BlockAquatic extends BlockHFEnum<BlockAquatic, Aquatic> {
public BlockAquatic() {
super(Material.WATER, Aquatic.class, HFTab.FISHING);
setHardness(0.1F);
}
@Override
protected BlockStateContainer createBlockState() {
if(property == null) return new BlockStateContainer(this, LEVEL, temporary);
return new BlockStateContainer(this, LEVEL, property);
}
@Override
public ItemBlockHF getItemBlock() {
return new ItemBlockAquatic(this);
}
@SuppressWarnings("deprecation")
@Override
public boolean isFullCube(IBlockState state) {
return true;
}
@Override
public boolean isVisuallyOpaque() {
return false;
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack held, EnumFacing side, float hitX, float hitY, float hitZ) {
TileEntity tile = world.getTileEntity(pos);
return tile instanceof TileSingleStack && ((TileSingleStack) tile).onRightClicked(player, held);
}
@Override
public boolean isReplaceable(IBlockAccess worldIn, @Nonnull BlockPos pos) {
return false;
}
@Override
@SuppressWarnings("deprecation")
@Nonnull
public IBlockState getActualState(@Nonnull IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntity tile = world instanceof ChunkCache ? ((ChunkCache)world).getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK) : world.getTileEntity(pos);
if (tile instanceof TileTrap) {
TileTrap trap = ((TileTrap)tile);
if (trap.isBaited()) return getStateFromEnum(TRAP_BAITED);
else return getStateFromEnum(Aquatic.TRAP);
}
return state;
}
@Override
public boolean hasTileEntity(IBlockState state) {
return true;
}
@Override
@Nonnull
public TileEntity createTileEntity(@Nonnull World world, @Nonnull IBlockState state) {
switch (getEnumFromState(state)) {
case TRAP:
case TRAP_BAITED: return new TileTrap();
default: return null;
}
}
@Override
protected boolean shouldDisplayInCreative(Aquatic block) {
return block != TRAP_BAITED;
}
@SideOnly(Side.CLIENT)
@Override
public void registerModels(Item item, String name) {
ModelLoader.setCustomStateMapper(this, NO_WATER);
super.registerModels(item, name);
}
public enum Aquatic implements IStringSerializable {
TRAP, TRAP_BAITED;
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
public boolean isTrap() {
return this == TRAP || this == TRAP_BAITED;
}
}
}