[1.8.9] Как работает метадата и blockstate?

1,015
9
102
Вот я попытался сделать 2 блокстейта у блока, и при запуске мне выдает java.lang.NullPointerException вот здесь:
Код:
    @Override
    protected BlockState createBlockState() {
        return new BlockState(this, new IProperty[] { TYPE });
    }
А вот сам код блока:
Код:
package com.minebot.statics.blocks;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IStringSerializable;
import net.minecraft.world.World;

import com.minebot.statics.Main;
import com.minebot.statics.ModInfo;
import com.minebot.statics.gui.SpoilGenerator.SG_TileEntity;

public class SplitGenerator extends Block implements ITileEntityProvider{

    public static final SplitGenerator splitGenerator = new SplitGenerator();
    public static final PropertyEnum<EnumType> TYPE = PropertyEnum.create("type", SplitGenerator.EnumType.class);
    
    public SplitGenerator() {
        super(Material.iron);
        this.setUnlocalizedName(ModInfo.MODID + ":splitGenerator");
        this.setCreativeTab(ModInfo.stCreativeTab);
        this.setHardness(5f);
        this.setHarvestLevel("pickaxe", 2);
        this.setStepSound(soundTypeMetal);
        this.setDefaultState(blockState.getBaseState().withProperty(TYPE, EnumType.WHITE));
    }
    
    @Override
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) {
        list.add(new ItemStack(itemIn, 1, 0));
        list.add(new ItemStack(itemIn, 1, 1));
    }
    
    @Override
    protected BlockState createBlockState() {
        return new BlockState(this, new IProperty[] { TYPE });
    }
    
    @Override
    public IBlockState getStateFromMeta(int meta) {
        return getDefaultState().withProperty(TYPE, meta == 0 ? EnumType.WHITE : EnumType.BLACK);
    }

    @Override
    public int getMetaFromState(IBlockState state) {
        EnumType type = (EnumType) state.getValue(TYPE);
        return type.getID();
    }
    
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ)
    {
        playerIn.openGui(Main.instance, 1, worldIn, pos.getX(), pos.getY(), pos.getZ());
        return true;
    }

    @Override
    public int damageDropped(IBlockState state) {
        return getMetaFromState(state);
    }
    
    @Override
    public TileEntity createNewTileEntity(World worldIn, int meta) {
        return new SG_TileEntity();
    }
    
    @Override
    public void breakBlock(World worldIn, BlockPos pos, IBlockState state)
    {
        TileEntity tileentity = worldIn.getTileEntity(pos);

        if (tileentity instanceof IInventory)
        {
            InventoryHelper.dropInventoryItems(worldIn, pos, (IInventory)tileentity);
        }

        super.breakBlock(worldIn, pos, state);
    }
    
    public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
    {
        
    }
    
    public enum EnumType implements IStringSerializable 
    {
        WHITE(0, "white"),
        BLACK(1, "black");

        private int ID;
        private String name;
        
        private EnumType(int ID, String name) {
            this.ID = ID;
            this.name = name;
        }
        
        @Override
        public String getName() {
            return name;
        }

        public int getID() {
            return ID;
        }
        
        @Override
        public String toString() {
            return getName();
        }
    }
}
В чем проблема то?
 
Minebot написал(а):
Как работает метадата?
Грубо говоря, создаёт новый массив в массиве ID (под каждым ID может быть ещё один массив - метадата)

Minebot написал(а):
Как работает blockstate?
ну это хз :D
[merge_posts_bbcode]Добавлено: 20.05.2016 22:17:39[/merge_posts_bbcode]

Minebot написал(а):
Код:
IProperty[] { TYPE });
В чем проблема то?
Может потому, что пустой массив (чему равна переменная TYPE?)
 
Назад
Сверху