2016-06-19 1 views
0

の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]"

は、私のファイル構造である:ここで

enter image description here

は私の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")); 
    } 
} 

他のファイルが必要な場合は教えてください。ありがとうございました!

答えて

0

あなたはチュートリアルに続き、私が遭遇したのと同じ要点に遭遇しました。少なくとも私は唯一の人ではありません;-)

私に役立つものは、提供されたソースをダウンロードすることでした。あなたは通常、あなたがここから.zipファイルとして、このチュートリアルで使用されるコードをダウンロードすることができます

を隠されたリンクを見つけるbedrockminersチュートリアルで

ダウンロードしてソースからコピーしてください。チュートリアルを振り返り、個々の要素を理解してください。

個人的には、私はそれをより良く助けました。彼はそれをうまく説明しますが、エディタで簡単にフォローできる方法ではなく、間違いが起こり、物事が見過ごされます。

関連する問題