package com.jaquadro.minecraft.storagedrawers.block;
import com.jaquadro.minecraft.storagedrawers.StorageDrawers;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.api.storage.INetworked;
import com.jaquadro.minecraft.storagedrawers.block.dynamic.StatusModelData;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawersComp;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.property.ExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.List;
public class BlockCompDrawers extends BlockDrawers implements INetworked
{
public static final PropertyEnum SLOTS = PropertyEnum.create("slots", EnumCompDrawer.class);
@SideOnly(Side.CLIENT)
private StatusModelData statusInfo;
public BlockCompDrawers (String blockName) {
super(Material.ROCK, blockName);
setSoundType(SoundType.STONE);
}
@Override
protected void initDefaultState () {
setDefaultState(blockState.getBaseState().withProperty(SLOTS, EnumCompDrawer.OPEN1).withProperty(FACING, EnumFacing.NORTH));
}
@Override
@SideOnly(Side.CLIENT)
public void initDynamic () {
ResourceLocation location = new ResourceLocation(StorageDrawers.MOD_ID + ":models/dynamic/compDrawers.json");
statusInfo = new StatusModelData(3, location);
}
@Override
public StatusModelData getStatusInfo (IBlockState state) {
return statusInfo;
}
@Override
public int getDrawerCount (IBlockState state) {
return 3;
}
@Override
public boolean isHalfDepth (IBlockState state) {
return false;
}
@Override
protected int getDrawerSlot (int drawerCount, int side, float hitX, float hitY, float hitZ) {
if (hitTop(hitY))
return 0;
if (hitLeft(side, hitX, hitZ))
return 1;
else
return 2;
}
@Override
public BlockType retrimType () {
return null;
}
@Override
public TileEntityDrawers createNewTileEntity (World world, int meta) {
return new TileEntityDrawersComp();
}
@Override
public void getSubBlocks (Item item, CreativeTabs creativeTabs, List<ItemStack> list) {
list.add(new ItemStack(item, 1, 0));
}
@Override
public int getMetaFromState (IBlockState state) {
return 0;
}
@Override
protected BlockStateContainer createBlockState () {
return new ExtendedBlockState(this, new IProperty[] { SLOTS, FACING }, new IUnlistedProperty[] { STATE_MODEL });
}
@Override
public IBlockState getActualState (IBlockState state, IBlockAccess world, BlockPos pos) {
TileEntityDrawers tile = getTileEntity(world, pos);
if (tile == null)
return state;
EnumCompDrawer slots = EnumCompDrawer.OPEN1;
if (tile.isDrawerEnabled(1))
slots = EnumCompDrawer.OPEN2;
if (tile.isDrawerEnabled(2))
slots = EnumCompDrawer.OPEN3;
return super.getActualState(state, world, pos).withProperty(SLOTS, slots);
}
}