Jump to content

Recommended Posts

Posted

I cant get the item and also can place them with setblock, it seems they arent registered

 

Thats my code for the slab

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import java.util.Random;

import com.Schleimtime.Wasteland.Main;
import com.Schleimtime.Wasteland.init.Modblocks;
import com.Schleimtime.Wasteland.util.IHasModel;

import net.minecraft.block.BlockSlab;
import net.minecraft.block.BlockStairs.EnumHalf;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public abstract class Slab extends BlockSlab implements IHasModel{

    public Slab(Material materialIn, String name) {
        super(materialIn);
        setUnlocalizedName(name);
        setRegistryName(name);
        
        IBlockState state = this.blockState.getBaseState();
        
        if(!this.isDouble()) {
            state = state.withProperty(HALF, EnumBlockHalf.BOTTOM);
        }
        
        setDefaultState(state);
        this.useNeighborBrightness=true;
    }
    
    @Override
    public String getUnlocalizedName(int meta) {
        return this.getUnlocalizedName();
    }
    
    @Override
    public IProperty<?> getVariantProperty() {
        return HALF;
    }
    
    @Override
    public Comparable<?> getTypeForItem(ItemStack stack) {
        return EnumBlockHalf.BOTTOM;
    }
    
    @Override
    public int damageDropped(IBlockState state) {
        return 0;
    }
    
    @Override
    public IBlockState getStateFromMeta(int meta) {
        if(!this.isDouble()) {
            return this.getDefaultState().withProperty(HALF, EnumBlockHalf.values()[meta % EnumHalf.values().length]);
        }
        return this.getDefaultState();
    }
    
    @Override
    public int getMetaFromState(IBlockState state) {
        if(!this.isDouble()) {
            return 0;
        }
        return ((EnumBlockHalf)state.getValue(HALF)).ordinal()+1;
    }
    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune) {
        return Item.getItemFromBlock(this.getDefaultState().withProperty(HALF, EnumBlockHalf.BOTTOM).getBlock());
    }
    
    @Override
    protected BlockStateContainer createBlockState() {
        return new BlockStateContainer(this, new IProperty[] {HALF});
    }
    

    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
    }

}

 

thats for half

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import net.minecraft.block.material.Material;

public class HalfSlab extends Slab{

    public HalfSlab(Material materialIn, String name) {
        super(materialIn, name);
    }

    @Override
    public boolean isDouble() {
        return false;
    }

}

 

 

and thats for full

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import com.Schleimtime.Wasteland.Main;

import net.minecraft.block.material.Material;
import net.minecraft.item.Item;

public class DoubleSlab extends Slab{

    public DoubleSlab(Material materialIn, String name) {
        super(materialIn, name);
    }

    @Override
    public boolean isDouble() {
        return true;
    }
}

 

 

i also put it in the class of my blocks that are all registered like that

 

public static final Block ASHBRICK_SLAB_HALF = new HalfSlab(Material.ROCK, "ashbrick_slab_half");
public static final Block ASHBRICK_SLAB_DOUBLE = new DoubleSlab(Material.ROCK, "ashbrick_slab_double");

 

and thats how all blocks get registered excluding my slabs in the same list

 

@SubscribeEvent
    public static void onBlockRegister(RegistryEvent.Register<Block> e) {
        e.getRegistry().registerAll(Modblocks.BLOCKS.toArray(new Block[0]));
    }

 

do i need to register slabs special? or is there a mistake in the slab itself

 

 

 

Posted
30 minutes ago, Brbcode said:

What means Modblocks.BLOCKS.toArray(new Block[0])?

I already fixed my slabs with an extra class so thats fine

 

To array converts a list to an array of a list, the new Block[0] means it converts the list to an blockarray

an array is very similar to a list, for example you create  a new array with

Blocks[] = new Blocks[]{block1, block2}

 

and if you do Block[1] you will get block2 from it because it counts from 0

Posted
15 minutes ago, Schleim_time said:

it gives an error now that block air dont have a model

That happens when the block in question was not correctly registered. The game attempts to get the registry key for the object it has, but it isn't in the registry, so it doesn't know what it's name is.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)
4 minutes ago, Draco18s said:

That happens when the block in question was not correctly registered. The game attempts to get the registry key for the object it has, but it isn't in the registry, so it doesn't know what it's name is.

Oh so i made a registering mistake, what is my mistake here?

 

public static final HalfSlab ASHBRICK_SLAB_HALF = new HalfSlab(Material.ROCK, "ashbrick_slab_half");
    public static final DoubleSlab ASHBRICK_SLAB_DOUBLE = new DoubleSlab(Material.ROCK, "ashbrick_slab_double");
    
    public static final ArrayList<Slab> SLABS = Lists.newArrayList(
            ASHBRICK_SLAB_DOUBLE,
            ASHBRICK_SLAB_HALF
            );
    
    public ModHalfSlab() {
        registerSlabs(ASHBRICK_SLAB_HALF, ASHBRICK_SLAB_DOUBLE);
    }
    
    
    private void registerSlabs(HalfSlab halfSlab, DoubleSlab doubleSlab) {
        final ItemSlab itemSlab = new ItemSlab(halfSlab, halfSlab, doubleSlab);
        final ResourceLocation name = halfSlab.getRegistryName();
        itemSlab.setRegistryName(name);
        itemSlab.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
        ForgeRegistries.BLOCKS.register(halfSlab);
        ForgeRegistries.BLOCKS.register(doubleSlab);
        ForgeRegistries.ITEMS.register(itemSlab);
    }
}

 

i get the slabs working corectly but dont owning a model :/ even if i manuelly set them a modellocation that exists

 

I tried to put it all in one class, i got my block now but its not in the inventory also

 

also it will be executed from the main class Init method

Edited by Schleim_time
Posted (edited)
25 minutes ago, Draco18s said:

That happens when the block in question was not correctly registered. The game attempts to get the registry key for the object it has, but it isn't in the registry, so it doesn't know what it's name is.

i saw a toturial about it and see someboday making it a static void

 

private static void registerSlabs(HalfSlab halfSlab, DoubleSlab doubleSlab) {
        ForgeRegistries.BLOCKS.register(halfSlab);
        halfSlab.setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
        ItemSlab itemSlab = new ItemSlab(halfSlab, halfSlab, doubleSlab);
        itemSlab.setRegistryName(halfSlab.getRegistryName());
        ForgeRegistries.ITEMS.register(itemSlab);
        
        ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(halfSlab), 0, new ModelResourceLocation(halfSlab.getRegistryName(), "inventory"));
    }

 

the air error is gone but the models still dont exist

i also added my modell directly into it but it still have the notexture model

Edited by Schleim_time
Posted
31 minutes ago, Schleim_time said:

i saw a toturial about it and see someboday making it a static void

I mean, that is a solution, assuming that other factors are true.

 

You haven't posted enough code for us to determine if those factors are true or not. The best way for us to help you is if you post your entire project as a working git repo and include a full error log. Not just "but don't have a model."

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
1 hour ago, Draco18s said:

I mean, that is a solution, assuming that other factors are true.

 

You haven't posted enough code for us to determine if those factors are true or not. The best way for us to help you is if you post your entire project as a working git repo and include a full error log. Not just "but don't have a model."

Yeah you are alright "but don't have a model." isnt really a good information xD

 

Double Slab

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import com.Schleimtime.Wasteland.Main;

import net.minecraft.block.material.Material;
import net.minecraft.item.Item;

public class DoubleSlab extends Slab{

    public DoubleSlab(Material materialIn, String name) {
        super(materialIn, name);
    }

    @Override
    public boolean isDouble() {
        return true;
    }

    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
    }
}

 

 

HalfSlab

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import com.Schleimtime.Wasteland.Main;

import net.minecraft.block.material.Material;
import net.minecraft.item.Item;

public class HalfSlab extends Slab{

    public HalfSlab(Material materialIn, String name) {
        super(materialIn, name);
    }

    @Override
    public boolean isDouble() {
        return false;
    }
    
    @Override
    public void registerModels() {
        Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
    }

}

 

SlabClass

Spoiler

package com.Schleimtime.Wasteland.blocks.slab;

import java.util.Random;

import com.Schleimtime.Wasteland.Main;
import com.Schleimtime.Wasteland.init.Modblocks;
import com.Schleimtime.Wasteland.util.IHasModel;

import net.minecraft.block.BlockSlab;
import net.minecraft.block.BlockStairs.EnumHalf;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public abstract class Slab extends BlockSlab implements IHasModel{

    public Slab(Material materialIn, String name) {
        super(materialIn);
        setUnlocalizedName(name);
        setRegistryName(name);
        
        IBlockState state = this.blockState.getBaseState();
        
        if(!this.isDouble()) {
            state = state.withProperty(HALF, EnumBlockHalf.BOTTOM);
        }
        
        setDefaultState(state);
        this.useNeighborBrightness=true;
    }
    
    @Override
    public String getUnlocalizedName(int meta) {
        return this.getUnlocalizedName();
    }
    
    @Override
    public IProperty<?> getVariantProperty() {
        return HALF;
    }
    
    @Override
    public Comparable<?> getTypeForItem(ItemStack stack) {
        return EnumBlockHalf.BOTTOM;
    }
    
    @Override
    public int damageDropped(IBlockState state) {
        return 0;
    }
    
    @Override
    public IBlockState getStateFromMeta(int meta) {
        if(!this.isDouble()) {
            return this.getDefaultState().withProperty(HALF, EnumBlockHalf.values()[meta % EnumHalf.values().length]);
        }
        return this.getDefaultState();
    }
    
    @Override
    public int getMetaFromState(IBlockState state) {
        if(!this.isDouble()) {
            return 0;
        }
        return ((EnumBlockHalf)state.getValue(HALF)).ordinal()+1;
    }
    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune) {
        return Item.getItemFromBlock(this.getDefaultState().withProperty(HALF, EnumBlockHalf.BOTTOM).getBlock());
    }
    
    @Override
    protected BlockStateContainer createBlockState() {
        return new BlockStateContainer(this, new IProperty[] {HALF});
    }

}

 

Model Registery

Spoiler

package com.Schleimtime.Wasteland.util.handlers;

import java.util.ArrayList;

import com.Schleimtime.Wasteland.blocks.slab.Slab;
import com.Schleimtime.Wasteland.init.ModHalfSlab;
import com.Schleimtime.Wasteland.init.Modbiome;
import com.Schleimtime.Wasteland.init.Modblocks;
import com.Schleimtime.Wasteland.init.Moditems;
import com.Schleimtime.Wasteland.util.IHasModel;
import com.Schleimtime.Wasteland.util.RecipeRemover;

import net.minecraft.block.Block;
import net.minecraft.client.model.ModelSlime;
import net.minecraft.item.Item;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.terraingen.OreGenEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.registries.ForgeRegistry;

@EventBusSubscriber
public class RegistryHandler {

    @SubscribeEvent
    public static void onModelRegister(ModelRegistryEvent e) {
        for(Item item : Moditems.ITEMS) {
            if(item instanceof IHasModel) {
                ((IHasModel)item).registerModels();
            }
        }//item
        for(Block block : Modblocks.BLOCKS) {
            if(block instanceof IHasModel) {
                ((IHasModel)block).registerModels();
            }
        }//block
        for(Block block : ModHalfSlab.SLABS) {
            if(block instanceof IHasModel) {
                ((IHasModel)block).registerModels();
            }
        }//slab
    }

}

 

ClientProxy

Spoiler

package com.Schleimtime.Wasteland.proxy;

import com.Schleimtime.Wasteland.items.newspaper.NewspaperGUI;

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;

public class clientproxy implements commonproxy{
    
    public void registerItemRenderer(Item item, int meta, String id) {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
    }
    
    public void openClientNewspaperGUI(int value) {
        Minecraft.getMinecraft().displayGuiScreen(new NewspaperGUI(value));
    }
    
}

 

that are all classes have to do with my slab block and the model is a missing moddel the error i got is

Spoiler

[01:12:03] [main/ERROR] [FML]: Exception loading model for variant minecraft:air#inventory for item "minecraft:air", normal location exception:
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model minecraft:item/air with loader VanillaLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:161) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadItemModels(ModelLoader.java:302) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadVariantItemModels(ModelBakery.java:175) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:151) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:559) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: java.io.FileNotFoundException: minecraft:models/item/air.json
    at net.minecraft.client.resources.FallbackResourceManager.getResource(FallbackResourceManager.java:69) ~[FallbackResourceManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:65) ~[SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadModel(ModelBakery.java:334) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.access$1400(ModelLoader.java:115) ~[ModelLoader.class:?]
    at net.minecraftforge.client.model.ModelLoader$VanillaLoader.loadModel(ModelLoader.java:861) ~[ModelLoader$VanillaLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:157) ~[ModelLoaderRegistry.class:?]
    ... 20 more
[01:12:03] [main/ERROR] [FML]: Exception loading model for variant minecraft:air#inventory for item "minecraft:air", blockstate location exception:
net.minecraftforge.client.model.ModelLoaderRegistry$LoaderException: Exception loading model minecraft:air#inventory with loader VariantLoader.INSTANCE, skipping
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:161) ~[ModelLoaderRegistry.class:?]
    at net.minecraftforge.client.model.ModelLoader.loadItemModels(ModelLoader.java:296) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelBakery.loadVariantItemModels(ModelBakery.java:175) ~[ModelBakery.class:?]
    at net.minecraftforge.client.model.ModelLoader.setupModelRegistry(ModelLoader.java:151) ~[ModelLoader.class:?]
    at net.minecraft.client.renderer.block.model.ModelManager.onResourceManagerReload(ModelManager.java:28) [ModelManager.class:?]
    at net.minecraft.client.resources.SimpleReloadableResourceManager.registerReloadListener(SimpleReloadableResourceManager.java:121) [SimpleReloadableResourceManager.class:?]
    at net.minecraft.client.Minecraft.init(Minecraft.java:559) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:421) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_211]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_211]
    at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?]
    at GradleStart.main(GradleStart.java:25) [start/:?]
Caused by: net.minecraft.client.renderer.block.model.ModelBlockDefinition$MissingVariantException
    at net.minecraft.client.renderer.block.model.ModelBlockDefinition.getVariant(ModelBlockDefinition.java:83) ~[ModelBlockDefinition.class:?]
    at net.minecraftforge.client.model.ModelLoader$VariantLoader.loadModel(ModelLoader.java:1175) ~[ModelLoader$VariantLoader.class:?]
    at net.minecraftforge.client.model.ModelLoaderRegistry.getModel(ModelLoaderRegistry.java:157) ~[ModelLoaderRegistry.class:?]
    ... 20 more

 

i also register all other blocks with the same interface but they have a model, my slabs doesnt have one

Posted (edited)

I fixed all my slabs :D ist working fine now, i did a lot of mistakes also the models have whrong names and some of my coed didnt make sence. Its always helpful to look on it after a break, but i dont know i still get the air exeption and it came from the slab even if my new models in game works fine

 

I also fixed that i registered the blocks as item oof xD

Edited by Schleim_time

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.