/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ package com.shinoow.abyssalcraft.common.blocks; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockSlab; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.shinoow.abyssalcraft.lib.ACTabs; public abstract class BlockACSlab extends BlockSlab { public static final PropertyBool VARIANT_PROPERTY = PropertyBool.create("variant"); private Block singleSlab; private MapColor mapColor; private static final int HALF_META_BIT = 8; public BlockACSlab(Block par1SingleSlab, Material par3Material, String tooltype, int harvestlevel) { this(par1SingleSlab, par3Material); setHarvestLevel(tooltype, harvestlevel); } public BlockACSlab(Block par1SingleSlab, Material par3Material) { super(par3Material); setCreativeTab(null); singleSlab = par1SingleSlab; mapColor = par1SingleSlab.getMapColor(par1SingleSlab.getDefaultState()); setDefaultState(blockState.getBaseState().withProperty(VARIANT_PROPERTY, false)); if(getHarvestTool(getDefaultState()) == null) if(par3Material == Material.ROCK || par3Material == Material.IRON || par3Material == Material.ANVIL) setHarvestLevel("pickaxe", 0); else if(par3Material == Material.GROUND || par3Material == Material.GRASS || par3Material == Material.SAND || par3Material == Material.SNOW || par3Material == Material.CRAFTED_SNOW) setHarvestLevel("shovel", 0); } public BlockACSlab(Material par3Material, String tooltype, int harvestlevel, MapColor mapColor) { this(par3Material, mapColor); setHarvestLevel(tooltype, harvestlevel); } public BlockACSlab(Material par3Material, MapColor mapColor) { super(par3Material); singleSlab = this; setCreativeTab(ACTabs.tabBlock); useNeighborBrightness = true; this.mapColor = mapColor; setDefaultState(blockState.getBaseState().withProperty(VARIANT_PROPERTY, false).withProperty(HALF, EnumBlockHalf.BOTTOM)); if(getHarvestTool(getDefaultState()) == null) if(par3Material == Material.ROCK || par3Material == Material.IRON || par3Material == Material.ANVIL) setHarvestLevel("pickaxe", 0); else if(par3Material == Material.GROUND || par3Material == Material.GRASS || par3Material == Material.SAND || par3Material == Material.SNOW || par3Material == Material.CRAFTED_SNOW) setHarvestLevel("shovel", 0); } @Override public MapColor getMapColor(IBlockState state) { return mapColor; } @Override public Item getItemDropped(IBlockState state, Random par2Random, int par3) { return Item.getItemFromBlock(singleSlab); } @Override @SideOnly(Side.CLIENT) public ItemStack getItem(World par1World, BlockPos pos, IBlockState state) { return new ItemStack(singleSlab); } @Override public String getUnlocalizedName(int meta) { return this.getUnlocalizedName(); } @Override public IProperty<?> getVariantProperty() { return VARIANT_PROPERTY; } @Override public Comparable<?> getTypeForItem(ItemStack stack) { return false; } @Override public final IBlockState getStateFromMeta(final int meta) { IBlockState blockState = getDefaultState(); blockState = blockState.withProperty(VARIANT_PROPERTY, false); if (!isDouble()) { EnumBlockHalf value = EnumBlockHalf.BOTTOM; if ((meta & HALF_META_BIT) != 0) value = EnumBlockHalf.TOP; blockState = blockState.withProperty(HALF, value); } return blockState; } @Override public final int getMetaFromState(final IBlockState state) { if (isDouble()) return 0; if (state.getValue(HALF) == EnumBlockHalf.TOP) return HALF_META_BIT; else return 0; } @Override public final int damageDropped(final IBlockState state) { return 0; } @Override protected final BlockStateContainer createBlockState() { if (isDouble()) return new BlockStateContainer.Builder(this).add(VARIANT_PROPERTY).build(); else return new BlockStateContainer.Builder(this).add(VARIANT_PROPERTY, HALF).build(); } }