package com.jaquadro.minecraft.storagedrawers.block;
import com.jaquadro.minecraft.chameleon.block.properties.UnlistedModelData;
import com.jaquadro.minecraft.storagedrawers.api.pack.BlockType;
import com.jaquadro.minecraft.storagedrawers.api.storage.EnumBasicDrawer;
import com.jaquadro.minecraft.storagedrawers.block.modeldata.MaterialModelData;
import com.jaquadro.minecraft.storagedrawers.block.tile.TileEntityDrawers;
import com.jaquadro.minecraft.storagedrawers.item.ItemCustomDrawers;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
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.IExtendedBlockState;
import net.minecraftforge.common.property.IUnlistedProperty;
import java.util.List;
public class BlockDrawersCustom extends BlockStandardDrawers
{
public static final IUnlistedProperty<MaterialModelData> MAT_MODEL = UnlistedModelData.create(MaterialModelData.class);
public BlockDrawersCustom (String blockName) {
super(blockName);
}
protected void initDefaultState () {
setDefaultState(blockState.getBaseState().withProperty(BLOCK, EnumBasicDrawer.FULL2)
.withProperty(FACING, EnumFacing.NORTH));
}
@Override
public boolean canRenderInLayer (IBlockState state, BlockRenderLayer layer) {
return layer == BlockRenderLayer.CUTOUT_MIPPED || layer == BlockRenderLayer.TRANSLUCENT;
}
@Override
public boolean doesSideBlockRendering (IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing face) {
TileEntityDrawers tile = getTileEntity(world, pos);
if (tile != null && tile.getEffectiveMaterialSide() == null)
return false;
return super.doesSideBlockRendering(state, world, pos, face);
}
@Override
public BlockType retrimType () {
return null;
}
@Override
protected ItemStack getMainDrop (IBlockAccess world, BlockPos pos, IBlockState state) {
TileEntityDrawers tile = getTileEntity(world, pos);
if (tile == null)
return ItemCustomDrawers.makeItemStack(state, 1, null, null, null);
ItemStack drop = ItemCustomDrawers.makeItemStack(state, 1, tile.getMaterialSide(), tile.getMaterialTrim(), tile.getMaterialFront());
if (drop == null)
return null;
NBTTagCompound data = drop.getTagCompound();
if (data == null)
data = new NBTTagCompound();
if (tile.isSealed()) {
NBTTagCompound tiledata = new NBTTagCompound();
tile.writeToNBT(tiledata);
data.setTag("tile", tiledata);
}
drop.setTagCompound(data);
return drop;
}
@Override
public void getSubBlocks (Item item, CreativeTabs creativeTabs, List<ItemStack> list) {
for (EnumBasicDrawer type : EnumBasicDrawer.values())
list.add(new ItemStack(item, 1, type.getMetadata()));
}
@Override
public boolean onBlockActivated (World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack item, EnumFacing side, float hitX, float hitY, float hitZ) {
TileEntityDrawers tile = getTileEntity(world, pos);
if (tile != null && tile.getMaterialSide() == null)
return false;
return super.onBlockActivated(world, pos, state, player, hand, item, side, hitX, hitY, hitZ);
}
@Override
protected BlockStateContainer createBlockState () {
return new ExtendedBlockState(this, new IProperty[] { BLOCK, FACING }, new IUnlistedProperty[] { STATE_MODEL, MAT_MODEL });
}
@Override
public IBlockState getActualState (IBlockState state, IBlockAccess worldIn, BlockPos pos) {
TileEntityDrawers tile = getTileEntity(worldIn, pos);
if (tile == null)
return state;
EnumFacing facing = EnumFacing.getFront(tile.getDirection());
if (facing.getAxis() == EnumFacing.Axis.Y)
facing = EnumFacing.NORTH;
return state.withProperty(BLOCK, state.getValue(BLOCK))
.withProperty(FACING, facing);
}
@Override
public IBlockState getExtendedState (IBlockState state, IBlockAccess world, BlockPos pos) {
state = super.getExtendedState(state, world, pos);
if (!(state instanceof IExtendedBlockState))
return state;
TileEntityDrawers tile = getTileEntity(world, pos);
if (tile == null)
return state;
return ((IExtendedBlockState)state).withProperty(MAT_MODEL, new MaterialModelData(tile));
}
}