I really stink at explaining.
here is the base class
package com.steveT.yabm.objects.blocks;
import java.util.List;
import com.steveT.yabm.Main;
import com.steveT.yabm.init.YobBlockInit;
import com.steveT.yabm.init.YobItemInit;
import com.steveT.yabm.util.IHasModel;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemMultiTexture;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
public class YobBlock extends Block implements IHasModel{
public YobBlock(String name, Material material,CreativeTabs tab) {
this(name, material,tab,true);
}
public YobBlock(String name, Material material,CreativeTabs tab, Boolean createItem) {
super(material);
setUnlocalizedName(name);
setRegistryName(name);
setCreativeTab(tab);
YobBlockInit.BLOCKS.add(this);
if(createItem)
YobItemInit.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
}
@Override
public void registerModels() {
//System.out.println("--------------------------------------- YobBlock (blockbase)");
Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
public String[] getSubTypes() {
return null;
}
public void getSubBlocks(ItemMultiTexture item, CreativeTabs tudortab, List<ItemStack> list) {
// TODO Auto-generated method stub
}
}
child of YobBlock
package com.steveT.yabm.blocks;
import java.util.List;
import com.google.common.collect.Lists;
import com.steveT.yabm.objects.blocks.YobBlock;
import com.steveT.yabm.util.YbFacingHelper;
import com.steveT.yabm.util.YbStyleEnumHandler_4;
import com.steveT.yabm.util.YbUtility;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyDirection;
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.Entity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public abstract class YobBlockHFSCB extends YobBlock implements YbFacingHelper,YbUtility{
public YobBlockHFSCB(String registryName, Material material, CreativeTabs tab) {
super(registryName,material,tab);
}
public YobBlockHFSCB(String registryName, Material material, CreativeTabs tab, Boolean createItem) {
super(registryName,material,tab,createItem);
}
public static final PropertyDirection FACING = BlockHorizontal.FACING;
public static final PropertyEnum<YbStyleEnumHandler_4.EnumType> STYLE = PropertyEnum.<YbStyleEnumHandler_4.EnumType>create("style", YbStyleEnumHandler_4.EnumType.class);
@Override
protected BlockStateContainer createBlockState(){
return new BlockStateContainer(this, new IProperty[] {FACING,STYLE});
}
@Override
public IBlockState getStateFromMeta(int meta)
{ IBlockState bs = this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 3)).withProperty(STYLE,YbStyleEnumHandler_4.EnumType.byMetadata((meta & 15) >> 2));
return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta & 3)).withProperty(STYLE,YbStyleEnumHandler_4.EnumType.byMetadata((meta & 15) >> 2));
}
@Override
public int getMetaFromState(IBlockState state)
{
int i = 0;
i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex();
i = i | (int)state.getValue(STYLE).getMeta() <<2;
return i;
}
/**
* returns a list of blocks with the same ID, but different meta
*/
@SideOnly(Side.CLIENT)
public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list)
{
// item , amount, meta
list.add(new ItemStack(itemIn,1,2));
list.add(new ItemStack(itemIn, 1, 6));
list.add(new ItemStack(itemIn, 1, 10));
list.add(new ItemStack(itemIn, 1, 14));
}
/**
* Adds 4 Styles to inventory with extension of s0 ...
*/
public String[] getSubTypes(){
return new String[] {"s0", "s1", "s2", "s3"};
}
/**
* when choosing block from the map, sets the correct meta
* to match inventory
*/
@Override
public int damageDropped(IBlockState state)
{
// metadata: (s0)0-3, (s1)4-7,(s2)8-11,(s3) 12-15
int r = 2 ;
int meta = getMetaFromState(state);
switch(meta/4) {
case 1:
r = 6;
break;
case 2:
r = 10;
break;
case 3:
r = 14;
}
return r;
}
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, Entity entityIn)
{
for( AxisAlignedBB aabb: getCollisionBoxList(state)){
addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb);
}
}
/**
* If you don't override is child class, collision box is a full block
*/
protected List<AxisAlignedBB> getCollisionBoxList(IBlockState state) {
List<AxisAlignedBB> list = Lists.<AxisAlignedBB>newArrayList();
list.add(new AxisAlignedBB (0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D));
return list;
}
@Override
public RayTraceResult collisionRayTrace(IBlockState blockState, World worldIn, BlockPos pos, Vec3d start, Vec3d end)
{
List<RayTraceResult> list = Lists.<RayTraceResult>newArrayList();
if(blockState == null) {
System.out.println("Block State Error!");
}
for (AxisAlignedBB axisalignedbb : getCollisionBoxList(blockState))
{
list.add(this.rayTrace(pos, start, end, axisalignedbb));
}
RayTraceResult raytraceresult1 = null;
double d1 = 0.0D;
for (RayTraceResult raytraceresult : list)
{
if (raytraceresult != null)
{
double d0 = raytraceresult.hitVec.squareDistanceTo(end);
if (d0 > d1)
{
raytraceresult1 = raytraceresult;
d1 = d0;
}
}
}
return raytraceresult1;
}
}
here is the class i create int BlockInit()
package com.steveT.yabm.blocks;
import java.util.List;
import com.google.common.collect.Lists;
import com.steveT.yabm.Main;
import com.steveT.yabm.objects.blocks.YobBlock;
import com.steveT.yabm.util.YbConstants;
import com.steveT.yabm.util.YbStyleEnumHandler_4;
import net.minecraft.block.material.Material;
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.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class YobBlockMultiBlockWF extends YobBlockHFSCB implements YbConstants{
public final static AxisAlignedBB AABB = new AxisAlignedBB ( CU0, CU0,CU0 , CU16, CU16, CU16);
public YobBlockMultiBlockWF(String registryNameBase, Material material, CreativeTabs tab, int numBlocks){
super(registryNameBase+"0", material,tab);
this.setDefaultState(this.blockState.getBaseState().withProperty(FACING,EnumFacing.NORTH).withProperty(STYLE,YbStyleEnumHandler_4.EnumType.S1 ));
//yobBlockRegisterWFS(this);
for(int i = 1 ; i <= numBlocks ; i++) {
//new YobBlockMultiBlockWF(registryNameBase+i, material, tab);
}
}
public YobBlockMultiBlockWF(String registryName, Material material, CreativeTabs tab){
super(registryName,material,tab);
//yobBlockRegisterWFS(this);
}
protected List<AxisAlignedBB> getCollisionBoxList(IBlockState state) {
List<AxisAlignedBB> list = Lists.<AxisAlignedBB>newArrayList();
list.add(AABB);
return list;
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack){
YbStyleEnumHandler_4.EnumType bs = state.getValue(STYLE);
EnumFacing playerFacing = getPlayerFacing(pos, placer);
if(playerFacing == EnumFacing.DOWN || playerFacing == EnumFacing.UP){
world.setBlockToAir(pos);
return;
}
world.setBlockState(pos, state.withProperty(FACING, getFacingFromEntity(pos, placer)).withProperty(STYLE,bs), 2);
}
@Override
@SideOnly(Side.CLIENT)
public void getSubBlocks(CreativeTabs whichTab, NonNullList<ItemStack> items)
{
items.add(new ItemStack(this, 1, 0));
items.add(new ItemStack(this, 1, 4));
items.add(new ItemStack(this, 1, 8));
items.add(new ItemStack(this, 1, 12));
}
@Override
public void registerModels() {
Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
}
}
I know the blocks/items in the inventory are meta 0 because the block when placed is the blank texture state of the block.
thank you for helping