I have created a custom slab in my mod and when I place one down on top of another slab, It doesn't form a double slab, but instead places a slab on top of the block. This is my Generic Slab code:
package com.kpzip.SushiMod.blocks.shapes.slab;
import java.util.Random;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import com.kpzip.SushiMod.Main;
import com.kpzip.SushiMod.init.ModBlocks;
import com.kpzip.SushiMod.init.ModItems;
import com.kpzip.SushiMod.util.IHasModel;
public abstract class BambooSlab extends BlockSlab implements IHasModel{
public BambooSlab(String name) {
super(Material.WOOD);
this.setUnlocalizedName(name);
this.setRegistryName(name);
this.setSoundType(SoundType.WOOD);
if (this instanceof BambooHalfSlab) {
this.setCreativeTab(Main.SUSHI_BLOCKS);
}
setHardness(2);
setResistance(15);
setHarvestLevel("axe", 0);
IBlockState state = this.blockState.getBaseState();
if (!this.isDouble()) {
state = state.withProperty(HALF, EnumBlockHalf.BOTTOM);
}
this.setDefaultState(state);
this.useNeighborBrightness = true;
ModBlocks.BLOCKS.add(this);
ModItems.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
}
@Override
public void registerModels() {
Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
@Override
public String getUnlocalizedName(int meta) {
return this.getUnlocalizedName();
}
@Override
public IProperty<?> getVariantProperty() {
return HALF;
}
@Override
public Comparable<?> getTypeForItem(ItemStack stack) {
return EnumBlockHalf.BOTTOM;
}
@Override
public int damageDropped(IBlockState state) {
return 0;
}
@Override
public IBlockState getStateFromMeta(int meta) {
if (!this.isDouble()) {
return this.getDefaultState().withProperty(HALF, EnumBlockHalf.values()[meta % EnumBlockHalf.values().length]);
}
return this.getDefaultState();
}
@Override
public int getMetaFromState(IBlockState state) {
if (!this.isDouble()) {
return 0;
}
return ((EnumBlockHalf)state.getValue(HALF)).ordinal() + 1;
}
@Override
public Item getItemDropped(IBlockState state, Random rand, int fortune) {
return Item.getItemFromBlock(ModBlocks.BAMBOO_SLAB_HALF);
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] {HALF});
}
}
This is my Double Slab code:
package com.kpzip.SushiMod.blocks.shapes.slab;
public class BambooDoubleSlab extends BambooSlab {
public BambooDoubleSlab(String name) {
super(name);
}
@Override
public boolean isDouble() {
return true;
}
}
And this is my half slab code:
package com.kpzip.SushiMod.blocks.shapes.slab;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import com.kpzip.SushiMod.blocks.shapes.IHasCustomShape;
import com.kpzip.SushiMod.init.ModBlocks;
public class BambooHalfSlab extends BambooSlab implements IHasCustomShape {
public BambooHalfSlab(String name) {
super(name);
}
@Override
public boolean isDouble() {
return false;
}
@Override
public IBlockState getStateFromMeta(int meta) {
if (meta == 0) {
return this.getDefaultState().withProperty(HALF, EnumBlockHalf.BOTTOM);
}
else {
return this.getDefaultState().withProperty(HALF, EnumBlockHalf.TOP);
}
}
@Override
public int getMetaFromState(IBlockState state) {
if (state.getValue(HALF) == EnumBlockHalf.BOTTOM) {
return 0;
}
else {
return 1;
}
}
}
Minecraft 1.12.2 7_20_2019 9_22_31 AM.mp4