Jump to content

Recommended Posts

Posted

I want to preface this with I am a complete amatuer in JAVA coding, and everything I know is from YouTube tutorials, so examples of code would be greatly appreciated. I am creating a custom slab for my mod, but when doing so I am having an  issue where the double slab will not display correctly, the top slab will be invisible when placed after the bottom slab, and when trying to place a top slab first then bottom, the game will not let me place the bottom slab at all.

 

BLOCKSLABBASE.java

 

package guardia.coremod.objects.blocks.slab;

import java.util.Random;

import guardia.coremod.Main;
import guardia.coremod.init.BlockInit;
import guardia.coremod.init.ItemInit;
import guardia.coremod.utils.interfaces.IHasModel;
import net.minecraft.block.BlockSlab;
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.ItemSlab;
import net.minecraft.item.ItemStack;

public abstract class BlockSlabBase extends BlockSlab implements IHasModel
{

    public BlockSlabBase(String name) 
    {
        super(Material.WOOD);
        setUnlocalizedName(name);
        setRegistryName(name);
        setHardness(3F);
        setResistance(15F);
        setCreativeTab(Main.coretab);
        
        IBlockState state = this.blockState.getBaseState();
        if (!this.isDouble()) 
        {
            state = state.withProperty(HALF, EnumBlockHalf.BOTTOM);
        }
        setDefaultState(state);
        this.useNeighborBrightness = true;
        
        this.fullBlock = !this.isDouble();
        
        BlockInit.BLOCKS.add(this);
        
    }
    
    @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(BlockInit.HALF_SLAB);
    }
    
    @Override
    protected BlockStateContainer createBlockState() 
    {
        return new BlockStateContainer(this, new IProperty[] {HALF});
    }
    
    
    
    
    
    
    
    @Override
    public void registerModels() 
    {
        Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
    }

}
 

 

REGISTRYHANDLER.java

 

package guardia.coremod.utils.handlers;

import guardia.coremod.init.BiomeInit;
import guardia.coremod.init.BlockInit;
import guardia.coremod.init.EntityInit;
import guardia.coremod.init.ItemInit;
import guardia.coremod.utils.interfaces.IHasModel;
import guardia.coremod.world.gen.WorldGenCustomOres;
import guardia.coremod.world.gen.WorldGenCustomStructures;
import guardia.coremod.world.gen.WorldGenCustomTrees;
import guardia.coremod.world.types.WorldTypeCustom;
import guardia.coremod.world.types.WorldTypeElderOak;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemSlab;
import net.minecraft.world.WorldType;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;

@EventBusSubscriber
public class RegistryHandler 
{
    @SubscribeEvent
    public static void onItemRegister(RegistryEvent.Register<Item> event)
    {
        event.getRegistry().registerAll(ItemInit.ITEMS.toArray(new Item[0]));
        
        ItemBlock item = new ItemSlab(BlockInit.HALF_SLAB, BlockInit.HALF_SLAB, BlockInit.DOUBLE_SLAB);
        item.setRegistryName(BlockInit.HALF_SLAB.getRegistryName());
        ForgeRegistries.ITEMS.register(item);
    }
    
    @SubscribeEvent
    public static void onBlockRegister(RegistryEvent.Register<Block> event)
    {
        event.getRegistry().registerAll(BlockInit.BLOCKS.toArray(new Block[0]));
    }
    
    @SubscribeEvent
    public static void onModelRegister(ModelRegistryEvent event)
    {
        for(Item item : ItemInit.ITEMS)
        {
            if(item instanceof IHasModel)
            {
                ((IHasModel)item).registerModels();
            }
        }
        
        for(Block block : BlockInit.BLOCKS)
        {
            if(block instanceof IHasModel)
            {
                ((IHasModel)block).registerModels();
            }
        }
    }    
    
    
    
    public static void preInitRegistries()
    {
        GameRegistry.registerWorldGenerator(new WorldGenCustomOres(), 0);
        GameRegistry.registerWorldGenerator(new WorldGenCustomTrees(), 0);
        GameRegistry.registerWorldGenerator(new WorldGenCustomStructures(), 0);
        
        BiomeInit.registerBiomes();
        
        EntityInit.registerEntities();
        RenderHandler.registerEntityRenders();
    }
    
    public static void Client() 
    {
        RecipeHandler.registerSmelting();
    }
    
    public static void initRegistries()
    {
        SoundsHandler.registerSounds();
    }
    
    public static void postInitRegistries()
    {
        WorldType ELDER_OAK = new WorldTypeElderOak();
        WorldType CUSTOM = new WorldTypeCustom();
    }
}
 

Posted

It looks close, but you should probably look at the implementation of the vanilla block slab wood blocks and try making your code even closer. For example, in your constructor you set the block state based without any variant. Now that could make sense in your case, if you only have one type of slab you're making. However, it could also screw up your blockstates and model files unless you know what you're doing.

 

So you're close, but I would personally work back and copy more of the vanilla stuff until you get it working, and only then change things if you think you need to.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.