のMinecraft 1.8.9のMinecraft Forgeの改造 - バリエーションを持つブロックは、私が正常に一つだけのテクスチャを持つブロックを作って、それを適切にレンダリングする適切
レンダリングされません。私はいくつかのYouTubeのチュートリアルに従って、それは働いた。わーい!
しかし、私の問題は、複数のテクスチャを持つ別のブロックが原因です。それはもともと私のブロックを練習するために他のブロックのような1つのテクスチャを持っていましたが、メタデータと状態が必要と判断しました。このために、BlockRenderRegister.classを呼び出すまで、私はthis tutorialに続きました。私はこのクラスを作っていないし、それを置く場所を詳述していないので、残りの部分を自分で見つけようとしました。
成功したブロックはcellauto1(Cellular Automaton Frame)と呼ばれ、不良ブロックはcellauto2(Cellular Automaton Grid)と呼ばれ、黒いバリアント(cellauto2b)と白いバリアント(cellauto2w)それはそのようにはうまくいかない。両方のブロックはクリエイティブタブに表示されますが、ブロックが正しくレンダリングされず、ワールドに配置されません(ピンク黒のテクスチャが代わりに読み込まれます)。
私のような例外が出ます:ここで[Client thread/ERROR] [FML]: Exception loading model for variant cellauto:cellauto2#type=black for blockstate "cellauto:cellauto2[type=black]"
は、私のファイル構造である:ここで
は私のCellularAutomatonGridクラスです:
package com.cellularautomaton.mod.blocks;
import java.util.List;
import net.minecraft.block.Block;
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.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockPos;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class CellularAutomatonGrid extends Block implements IMetaBlockName{
public CellularAutomatonGrid(String unlocalizedName, Material material, float hardness, float resistance){
super(material);
this.setUnlocalizedName(unlocalizedName);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setHardness(hardness);
this.setResistance(resistance);
this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumType.WHITE));
}
@Override
public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) {
list.add(new ItemStack(itemIn, 1, 0)); //Meta 0
list.add(new ItemStack(itemIn, 1, 1)); //Meta 1
}
public CellularAutomatonGrid(String unlocalizedName, float hardness, float resistance){
this(unlocalizedName, Material.rock, hardness, resistance);
}
public CellularAutomatonGrid(String unlocalizedName)
{
this(unlocalizedName, 2.0f, 10.0f);
}
@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 int damageDropped(IBlockState state){
return getMetaFromState(state);
}
public static final PropertyEnum TYPE = PropertyEnum.create("type", CellularAutomatonGrid.EnumType.class);
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;
}
@Override
public String toString(){
return getName();
}
public int getID() {
return ID;
}
}
@Override
public String getSpecialName(ItemStack stack) {
return stack.getItemDamage() == 0 ?"white" :"black";
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, BlockPos pos){
return new ItemStack(Item.getItemFromBlock(this), 1, this.getMetaFromState(world.getBlockState(pos)));
}
}
マイCellularAutomatonBlocksクラス:
package com.cellularautomaton.mod.blocks;
import com.cellularautomaton.mod.Reference;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.registry.GameRegistry;
public class CellularAutomatonBlocks {
public static Block cellauto1;
public static Block cellauto2;
public static void init(){
cellauto1 = new CellularAutomatonFrame("cellauto1");
cellauto2 = new CellularAutomatonGrid("cellauto2");
}
public static void register(){
GameRegistry.registerBlock(cellauto1, cellauto1.getUnlocalizedName().substring(5));
GameRegistry.registerBlock(cellauto2, ItemBlockMeta.class, "cellauto2");
}
public static void registerRenders(){
registerRender(cellauto1);
registerRender(cellauto2);
}
public static void registerRender(Block block){
Item item = Item.getItemFromBlock(block);
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory"));
}
}
他のファイルが必要な場合は教えてください。ありがとうございました!