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); } }