2016-06-19 4 views
0

Mine 1.8.9Mine Forge Modding - Block mit Varianten macht nicht richtig

Ich habe erfolgreich einen Block gemacht, dass nur eine Textur hat, und es macht richtig. Ich folgte einem Youtube Tutorial und es funktionierte. Yay!

Allerdings ist mein Problem mit einem anderen Block, der mehrere Texturen haben soll. Es hatte ursprünglich eine Textur wie der andere Block (nur um meine Blöcke zu üben), aber dann entschied ich, dass es Metadaten und Zustände brauchte. Dazu folgte ich this tutorial, bis es BlockRenderRegister.class aufruft. Ich habe diese Klasse nicht gemacht, und es wird nicht ausgearbeitet, wo ich sie hinbekomme, also habe ich selbst versucht, den Rest herauszufinden.

Der erfolgreiche Block heißt 'cellauto1' (Cellular Automaton Frame) und der fehlerhafte Block heißt 'cellauto2' (Cellular Automaton Grid) und sollte in einer schwarzen Variante (cellauto2b) und einer weißen Variante (cellauto2w), aber kommen so geht es nicht. Während beide Blöcke in den Creative-Registerkarten angezeigt werden, werden sie dort weder richtig dargestellt noch in der Welt platziert (die pink-schwarze Textur wird stattdessen geladen).

ich Ausnahmen wie: [Client thread/ERROR] [FML]: Exception loading model for variant cellauto:cellauto2#type=black for blockstate "cellauto:cellauto2[type=black]"

Hier ist meine Dateistruktur:

enter image description here

Hier ist meine CellularAutomatonGrid Klasse:

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))); 

    } 

} 

Meine CellularAutomatonBlocks Klasse:

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

Sagen Sie mir, wenn Sie andere Dateien benötigen. Vielen Dank!

Antwort

0

Okay ... Sie sind dem Tutorial gefolgt und sind in dieselbe Crux geraten, in die ich geraten bin. Zumindest war ich nicht der Einzige ;-)

Hilfreich für mich war, die bereitgestellten Quellen herunterzuladen.
Auf bedrockminers Lektionen Sie in der Regel einen Link

Sie den in diesem Tutorial von hier als ZIP-Datei verwendeten Code herunterladen versteckt finden.

Laden Sie es herunter, kopieren Sie über die Quellen und arbeiten Sie von dort. Denken Sie dann über das Tutorial nach, um die einzelnen Elemente zu verstehen.

Persönlich half es mir besser so. Er erklärt es gut, aber nicht so, dass man einem Redakteur leicht folgen kann, Fehler werden passieren und Dinge werden übersehen.

Verwandte Themen