Jump to content

Recommended Posts

Posted

So i am trying to register blocks with metadata,

They do register ingame fine, but when i look, theres no texture,

 

my ModBlocks.java

 

package Fatal1tyGC.BitofTuts.init;

import net.minecraft.block.Block;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import Fatal1tyGC.BitofTuts.Reference;
import Fatal1tyGC.BitofTuts.blocks.BlockBlockBreaker;
import Fatal1tyGC.BitofTuts.blocks.ItemBlockMeta;
import Fatal1tyGC.BitofTuts.blocks.blockCopperBlock;
import Fatal1tyGC.BitofTuts.blocks.blockCopperOre;
import Fatal1tyGC.BitofTuts.handlers.EnumHandler;

public class ModBlocks {

public static Block copper_ore;
public static Block copper_block;

public static Block block_breaker;


public static void init(){
	copper_ore = new blockCopperOre("copper_ore");
	copper_block = new blockCopperBlock("copper_block");

	block_breaker = new BlockBlockBreaker("block_breaker");
}

public static void register(){
	registerBlock(copper_ore, "copper_ore");
	registerBlock(copper_block, "copper_block");

	//DEPRECATED BUT STILL WORKING
	GameRegistry.registerBlock(block_breaker,ItemBlockMeta.class, "block_breaker");

}

public static void registerRenders(){
	registerRender(copper_ore);
	registerRender(copper_block);

	for(int i = 0; i< EnumHandler.BlockBreakerTypes.values().length; i++){
		registerRender(block_breaker, i, EnumHandler.BlockBreakerTypes.values()[i].getName() + "_block_breaker");
	}

}

public static void registerBlock(Block block,String registryName){
	//GameRegistry.register(block.setRegistryName("copper_ore"));

	/*
	GameRegistry.register(copper_ore.setRegistryName("copper_ore"));
	GameRegistry.register(new ItemBlock(copper_ore).setRegistryName(copper_ore.getRegistryName()));

	GameRegistry.register(copper_block.setRegistryName("copper_block"));
	GameRegistry.register(new ItemBlock(copper_block).setRegistryName(copper_block.getRegistryName()));
	*/

	/*
	GameRegistry.register(copper_ore.setRegistryName(Reference.MODID + ":" + "copper_ore"));
	GameRegistry.register(new ItemBlock(block));

	GameRegistry.register(copper_block.setRegistryName(Reference.MODID + ":" + "copper_block"));
	GameRegistry.register(new ItemBlock(block));
	*/

	GameRegistry.register(block.setRegistryName(registryName));
	GameRegistry.register(new ItemBlock(block).setRegistryName(registryName));

	System.out.println("Registered Block: " + block.getUnlocalizedName().substring(5));

}

public static void registerRender(Block block){
	Item item = Item.getItemFromBlock(block);
	ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(),"inventory"));
}

public static void registerRender(Block block, int meta, String fileName){
	Item item = Item.getItemFromBlock(block);
	ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MODID + ":" + fileName,"inventory"));
}

}

 

And yes, i know that GameRegistry.registerBlock is deprecated :P

 

The errors coming up:

 

 

  Reveal hidden contents

 

 

I guess myself its something with

 

public static void registerRender(Block block, int meta, String fileName){
	Item item = Item.getItemFromBlock(block);
	ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MODID + ":" + fileName,"inventory"));
}

 

It refers to

bot:models/item/stone_block_breaker.json

 

but the stone_block_breaker is in models/block ....

 

 

Thanks for the help in advance!

 

Posted

ItemBlockMeta.java

package Fatal1tyGC.BitofTuts.blocks;

import net.minecraft.block.Block;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;

public class ItemBlockMeta extends ItemBlock {

public ItemBlockMeta(Block block) {
	super(block);
	if(!(block instanceof IMetaBlockName)){
		throw new IllegalArgumentException(String.format("The given Block %s is not an instance of ItemMetaBlockName", block.getUnlocalizedName()));
	}

	this.setMaxDamage(0);
	this.setHasSubtypes(true);

}

public int getMetaData(int damage){
	return damage;
}

@Override
public String getUnlocalizedName(ItemStack stack) {
	return super.getUnlocalizedName(stack) + "." + ((IMetaBlockName)this.block).getSpecialName(stack);
}

}

 

IMetaBlockName.java

package Fatal1tyGC.BitofTuts.blocks;

import net.minecraft.item.ItemStack;

public interface IMetaBlockName {

String getSpecialName(ItemStack stack);

}

 

BlockBlockBreaker.java

package Fatal1tyGC.BitofTuts.blocks;

import java.util.List;

import Fatal1tyGC.BitofTuts.BitofTuts;
import Fatal1tyGC.BitofTuts.handlers.EnumHandler;
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.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.World;

public class BlockBlockBreaker extends Block implements IMetaBlockName{

public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumHandler.BlockBreakerTypes.class);

public BlockBlockBreaker(String unlocalizedName) {
	super(Material.ROCK);
	this.setUnlocalizedName(unlocalizedName);
	this.setCreativeTab(BitofTuts.blocks);
	this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.WOOD));
}

@Override
public void getSubBlocks(Item item, CreativeTabs tab, List<ItemStack> list) {
	list.add(new ItemStack(item,1,0));
	list.add(new ItemStack(item,1,1));
	list.add(new ItemStack(item,1,2));
	list.add(new ItemStack(item,1,3));
	list.add(new ItemStack(item,1,4));
	list.add(new ItemStack(item,1,5));
}

@Override
protected BlockStateContainer createBlockState() {
    return new BlockStateContainer(this, new IProperty[] { TYPE });
}

@Override
public IBlockState getStateFromMeta(int meta) {
	if(meta == 0){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.WOOD);
	}
	if(meta == 1){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.STONE);
	}
	if(meta == 2){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.IRON);
	}
	if(meta == 3){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.GOLD);
	}
	if(meta == 4){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.DIAMOND);
	}
	if(meta == 5){
		return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.COPPER);
	}
	return this.getDefaultState().withProperty(TYPE, EnumHandler.BlockBreakerTypes.WOOD);
}

@Override
public int getMetaFromState(IBlockState state) {
	EnumHandler.BlockBreakerTypes type = (EnumHandler.BlockBreakerTypes) state.getValue(TYPE);
	return type.getID();
}

@Override
public int damageDropped(IBlockState state) {
	return getMetaFromState(state);
}

@Override
public String getSpecialName(ItemStack stack) {
	if(stack.getItemDamage() == 0){
		return "wood";
	}
	if(stack.getItemDamage() == 1){
		return "stone";
	}
	if(stack.getItemDamage() == 2){
		return "iron";
	}
	if(stack.getItemDamage() == 3){
		return "gold";
	}
	if(stack.getItemDamage() == 4){
		return "diamond";
	}
	if(stack.getItemDamage() == 5){
		return "copper";
	}
	return "wood";
}

@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target,
		World world, BlockPos pos, EntityPlayer player) {

	return new ItemStack(Item.getItemFromBlock(this),1, this.getMetaFromState(world.getBlockState(pos)));

}

}


[/code]

Posted

Your model handles all textures and you don't register multiple models for metadata. This blockstate JSON is an example of the forge variant system that I made for BlockPlanks.

 

  Reveal hidden contents

 

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Posted

This is my block_breaker.json blockstates ->

 

 

{
    "variants" : {
        "TYPE=wood" : {"model" : "bot:wood_block_breaker"},
        "TYPE=stone" : {"model" : "bot:stone_block_breaker"},
        "TYPE=iron" : {"model" : "bot:iron_block_breaker"},
        "TYPE=gold" : {"model" : "bot:gold_block_breaker"},
        "TYPE=diamond" : {"model" : "bot:diamond_block_breaker"},
        "TYPE=copper" : {"model" : "bot:copper_block_breaker"}
    }
}

Posted
  On 8/4/2016 at 1:50 PM, diesieben07 said:

In code the name of your property is "type" but in the JSON you use "TYPE".

 

That fixed most of it, now i just have no texture in my inventory + only the  WOOD type is showing, when i place a golden block placer it still is wood

 

  Reveal hidden contents

 

Posted
  Quote
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MODID + ":" + fileName,"inventory"));

but the stone_block_breaker is in models/block ....

That "item", is an instance of Item. Of course it'll look for the model amongst the models/item.

 

If you have your model in models/block, create a new .json file in models/items with

{
"parent": "modid:block/block-you-want"
}

If the Block is "flat" when in an inventory, be sure that your models/block .json has this just above "textures":

"parent": "block/cube_all",

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted
  On 8/4/2016 at 1:55 PM, Matryoshika said:

  Quote
ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MODID + ":" + fileName,"inventory"));

but the stone_block_breaker is in models/block ....

That "item", is an instance of Item. Of course it'll look for the model amongst the models/item.

 

If you have your model in models/block, create a new .json file in models/items with

{
"parent": "modid:block/block-you-want"
}

If the Block is "flat" when in an inventory, be sure that your models/block .json has this just above "textures":

"parent": "block/cube_all",

 

for every type i have a

.json file

{
    "parent": "block/cube_all",
    "textures": {
        "all": "bot:blocks/gold_block_breaker"
    }
}

Posted
  On 8/4/2016 at 2:02 PM, Matryoshika said:

You still need an Item-Model for each block, in models/item

  Quote

{
"parent": "modid:block/block-you-want"
}

 

The textures are working now in my inventory,

 

but still when i try to place a different block it keeps the wood texture... NO ERRORS occuring this time

Posted
  On 8/4/2016 at 2:14 PM, diesieben07 said:

Please show your new registration code after updating to the new registry system.

 

I honestly... didnt change that yet...

 

Because i have no idea how to implement ItemBlockMeta.class, "block_breaker" in there...

 

Because this is my old one:

 

	GameRegistry.registerBlock(block_breaker,ItemBlockMeta.class, "block_breaker");

and well, the new one is

GameRegistry.register(item.setRegistryName("item"));

 

But i have to look how to get the "item"

Posted

This is my ClientProxy.java btw

 

	ModelBakery.registerItemVariants(Item.getItemFromBlock(ModBlocks.block_breaker),
			new ResourceLocation("bot:wood_block_breaker"),
			new ResourceLocation("bot:stone_block_breaker"), 
			new ResourceLocation("bot:iron_block_breaker"),
			new ResourceLocation("bot:gold_block_breaker"), 		
			new ResourceLocation("bot:diamond_block_breaker"),
			new ResourceLocation("bot:copper_block_breaker"));
}

Posted
  On 8/4/2016 at 2:27 PM, diesieben07 said:

That does not make sense,

getItemFromBlock

only works after you have registered your ItemBlock.

You are right, it crashes my launcher

Posted
  On 8/4/2016 at 2:32 PM, diesieben07 said:

So:

 

  Quote

You create it, using the

new

operator like you do with Blocks and any other item.

 

Im trying to, but when i lookat my registerBlock(Block block,String registryName){

i have this in it:

 

	GameRegistry.register(block.setRegistryName(registryName));
	GameRegistry.register(new ItemBlock(block).setRegistryName(registryName));

 

But this

	GameRegistry.register(item.setRegistryName("item"));

is being called directly inside of the register() function, which has no calls

 

 

I'm just not smart enough to work out your solution, :/

Posted

Yes, i am sorry that i dont understand what you mean, which means i am guessing ->

 

i made a own function for registering metablocks ->

 

public static void registerMetaBlock(Block block,String registryName){
	GameRegistry.register(block.setRegistryName(registryName));
	GameRegistry.register(new ItemBlockMeta(block).setRegistryName(registryName));
}

Being calledby:

 

	registerMetaBlock(block_breaker, "block_breaker");

 

Getting 0 errors but still all the blocks are default wood..

Posted

Yes i am;

 

This is my updated ModBlocks.java

package Fatal1tyGC.BitofTuts.init;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import Fatal1tyGC.BitofTuts.Reference;
import Fatal1tyGC.BitofTuts.blocks.BlockBlockBreaker;
import Fatal1tyGC.BitofTuts.blocks.ItemBlockMeta;
import Fatal1tyGC.BitofTuts.blocks.blockCopperBlock;
import Fatal1tyGC.BitofTuts.blocks.blockCopperOre;
import Fatal1tyGC.BitofTuts.handlers.EnumHandler;

public class ModBlocks {

public static Block copper_ore;
public static Block copper_block;

public static Block block_breaker;


public static void init(){
	copper_ore = new blockCopperOre("copper_ore");
	copper_block = new blockCopperBlock("copper_block");

	block_breaker = new BlockBlockBreaker("block_breaker");
}

public static void register(){
	registerBlock(copper_ore, "copper_ore");
	registerBlock(copper_block, "copper_block");

	//DEPRECATED BUT STILL WORKING
	//GameRegistry.registerBlock(block_breaker,ItemBlockMeta.class, "block_breaker");
	registerMetaBlock(block_breaker, "block_breaker");
	//Item item = new Item();
	//GameRegistry.register(item.setRegistryName("item"));	

}

public static void registerRenders(){
	registerRender(copper_ore);
	registerRender(copper_block);

	for(int i = 0; i< EnumHandler.BlockBreakerTypes.values().length; i++){
		registerRender(block_breaker, i, EnumHandler.BlockBreakerTypes.values()[i].getName() + "_block_breaker");
	}

}

public static void registerBlock(Block block,String registryName){
	//GameRegistry.register(block.setRegistryName("copper_ore"));

	/*
	GameRegistry.register(copper_ore.setRegistryName("copper_ore"));
	GameRegistry.register(new ItemBlock(copper_ore).setRegistryName(copper_ore.getRegistryName()));

	GameRegistry.register(copper_block.setRegistryName("copper_block"));
	GameRegistry.register(new ItemBlock(copper_block).setRegistryName(copper_block.getRegistryName()));
	*/

	/*
	GameRegistry.register(copper_ore.setRegistryName(Reference.MODID + ":" + "copper_ore"));
	GameRegistry.register(new ItemBlock(block));

	GameRegistry.register(copper_block.setRegistryName(Reference.MODID + ":" + "copper_block"));
	GameRegistry.register(new ItemBlock(block));
	*/

	GameRegistry.register(block.setRegistryName(registryName));
	GameRegistry.register(new ItemBlock(block).setRegistryName(registryName));


	System.out.println("Registered Block: " + block.getUnlocalizedName().substring(5));

}

public static void registerMetaBlock(Block block,String registryName){
	GameRegistry.register(block.setRegistryName(registryName));
	GameRegistry.register(new ItemBlockMeta(block).setRegistryName(registryName));
}

public static void registerRender(Block block){
	Item item = Item.getItemFromBlock(block);
	ModelLoader.setCustomModelResourceLocation(item, 0, new ModelResourceLocation(item.getRegistryName(),"inventory"));
}

public static void registerRender(Block block, int meta, String fileName){
	Item item = Item.getItemFromBlock(block);
	ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(Reference.MODID + ":" + fileName,"inventory"));
}

}

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.