I am trying to create two log blocks (So blocks with different orientations and side textures) using variants for two types of tree, and although the item textures work fine, when I place the block, it has no texture. My code for the logs, enum, and jsons are below:
Log Class
package com.nerdyninja.tutorialmod.blocks.trees;
import javax.annotation.Nullable;
import com.google.common.base.Predicate;
import com.nerdyninja.tutorialmod.Main;
import com.nerdyninja.tutorialmod.blocks.item.ItemBlockVariants;
import com.nerdyninja.tutorialmod.init.ModBlocks;
import com.nerdyninja.tutorialmod.init.ModItems;
import com.nerdyninja.tutorialmod.util.IHasModel;
import com.nerdyninja.tutorialmod.util.IMetaName;
import com.nerdyninja.tutorialmod.util.handlers.EnumTreeHandler;
import net.minecraft.block.BlockLog;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
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.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
public class BlockLogs extends BlockLog implements IHasModel, IMetaName {
public static final PropertyEnum<EnumTreeHandler.EnumType> VARIANT = PropertyEnum.<EnumTreeHandler.EnumType>create("variant", EnumTreeHandler.EnumType.class, new Predicate<EnumTreeHandler.EnumType>() {
public boolean apply(@Nullable EnumTreeHandler.EnumType apply) {
return apply.getMeta() < 2;
}
});
private String name;
public BlockLogs(String name) {
setUnlocalizedName(name);
setRegistryName(name);
setCreativeTab(Main.tutorialtab);
setDefaultState(this.blockState.getBaseState().withProperty(VARIANT, EnumTreeHandler.EnumType.BAOBAB).withProperty(LOG_AXIS, EnumAxis.Y));
setSoundType(SoundType.WOOD);
setHardness(2.0F);
setResistance(3.3F);
setHarvestLevel("axe", 0);
this.name = name;
ModBlocks.BLOCKS.add(this);
ModItems.ITEMS.add(new ItemBlockVariants(this).setRegistryName(this.getRegistryName()));
}
@Override
public void getSubBlocks(CreativeTabs itemIn, NonNullList<ItemStack> items) {
for(EnumTreeHandler.EnumType varient : EnumTreeHandler.EnumType.values()) {
items.add(new ItemStack(this, 1, varient.getMeta()));
}
}
@Override
public IBlockState getStateFromMeta(int meta) {
IBlockState state = this.getDefaultState().withProperty(VARIANT, EnumTreeHandler.EnumType.byMetadata((meta & 1) % 2));
switch(meta & 6) {
case 0 :
state = state.withProperty(LOG_AXIS, EnumAxis.Y);
break;
case 2 :
state = state.withProperty(LOG_AXIS, EnumAxis.X);
break;
case 4 :
state = state.withProperty(LOG_AXIS, EnumAxis.Z);
break;
default :
state = state.withProperty(LOG_AXIS, EnumAxis.NONE);
}
return state;
}
@SuppressWarnings("incomplete-switch")
@Override
public int getMetaFromState(IBlockState state) {
int i = 0;
i = i | ((EnumTreeHandler.EnumType)state.getValue(VARIANT)).getMeta();
switch((BlockLogs.EnumAxis)state.getValue(LOG_AXIS)) {
case X:
i |= 2;
break;
case Y:
i |= 4;
break;
case Z:
i |= 6;
break;
}
return i;
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] {VARIANT, LOG_AXIS});
}
@Override
protected ItemStack getSilkTouchDrop(IBlockState state) {
return new ItemStack(Item.getItemFromBlock(this), 1, ((EnumTreeHandler.EnumType)state.getValue(VARIANT)).getMeta());
}
@Override
public int damageDropped(IBlockState state) {
return ((EnumTreeHandler.EnumType)state.getValue(VARIANT)).getMeta();
}
@Override
public String getSpecialName(ItemStack stack) {
return EnumTreeHandler.EnumType.values()[stack.getItemDamage()].getName();
}
@Override
public void registerModels()
{
for (int i = 0; i < EnumTreeHandler.EnumType.values().length; i++) {
Main.proxy.registerVariantRenderer(Item.getItemFromBlock(this), i, "logs_" + EnumTreeHandler.EnumType.values()[i].getName(), "inventory");
}
}
}
EnumHandler
package com.nerdyninja.tutorialmod.util.handlers;
import net.minecraft.util.IStringSerializable;
public class EnumTreeHandler {
public static enum EnumType implements IStringSerializable {
BAOBAB(0, "baobab"),
POWERED(1, "powered");
private static final EnumType[] META_LOOKUP = new EnumType[values().length];
private final int meta;
private final String name, unlocalisedName;
private EnumType(int meta, String name) {
this(meta, name, name);
}
private EnumType(int meta, String name, String unlocalizedName) {
this.meta = meta;
this.name = name;
this.unlocalisedName = unlocalizedName;
}
@Override
public String getName() {
return this.name;
}
public int getMeta() {
return this.meta;
}
public String getUnlocalisedName() {
return this.unlocalisedName;
}
@Override
public String toString() {
return this.name;
}
public static EnumType byMetadata(int meta) {
return META_LOOKUP[meta];
}
static {
for(EnumType enumtype : values()) {
META_LOOKUP[enumtype.getMeta()] = enumtype;
}
}
}
}
BlockState Json
{
"variants":
{
"axis=x, variant=baobab": { "model": "nntm:logs_baobab" },
"axis=x, variant=powered": { "model": "nntm:logs_powered" },
"axis=y, variant=baobab": { "model": "nntm:logs_baobab" },
"axis=y, variant=powered": { "model": "nntm:logs_powered" },
"axis=z, variant=baobab": { "model": "nntm:logs_baobab" },
"axis=z, variant=powered": { "model": "nntm:logs_powered" },
"axis=none, variant=baobab": { "model": "nntm:logs_baobab" },
"axis=none, variant=powered": { "model": "nntm:logs_powered" }
}
}
Model.Block Json
{
"parent": "block/cube_column",
"textures": {
"end": "nntm:blocks/log_baobab_top",
"side": "nntm:blocks/log_baobab_side"
}
}
I'm very new to modding, so it may be just a silly error. Could anyone help?