-
Posts
265 -
Joined
-
Last visited
-
Days Won
2
Everything posted by blinky000
-
@SideOnly(Side.CLIENT) public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) { System.out.println("getSubBlocks"); // item , amount, meta list.add(new ItemStack(itemIn,1,3)); list.add(new ItemStack(itemIn, 1, 7)); list.add(new ItemStack(itemIn, 1, 11)); list.add(new ItemStack(itemIn, 1, 15)); } _registerBlockItemModelForMeta(tudorSet, 3, "facing=east,style=s0b0"); _registerBlockItemModelForMeta(tudorSet, 7, "facing=east,style=s0b1"); _registerBlockItemModelForMeta(tudorSet, 11, "facing=east,style=s0b2"); _registerBlockItemModelForMeta(tudorSet, 15, "facing=east,style=s0b3"); made them match, all looks good except unlocalized names, which i should take care of by creating my own itemBlock
-
The meta data i used when hard coding 0,4,8,12 and the state strings, do not match the meta and states in the block. In the tudor block, meta 0 gives a state of "facing=south,style=s0b0". If i hard code the meta and state from the block, i get the missing "texture" texture in the inventory. If i change the hard coded metadata to any other numbers beside 0,4,8,12 , i get the missing "texture". I don't understand why using the metadata and block states that match the block don't work. "Name: you need to override the getUnlocalizedName method in your item in order to supply a name that can be localized. " I don't have an "item" block, do you mean in the "block" , and return an unlocalized name according to the state? i'm probably not explaining very well
-
Now im really confused. 1) I found out the getsubBlocks() in the block is never called, so i am not sure how then inventory knows it will be using 4 blocks. 2) when i hard coded (which does place the correct blocks with meta, all tho all have the same name) _registerBlockItemModelForMeta(tudorSet, 0, "facing=east,style=s0b0"); _registerBlockItemModelForMeta(tudorSet, 4, "facing=east,style=s0b1"); _registerBlockItemModelForMeta(tudorSet, 8, "facing=east,style=s0b2"); _registerBlockItemModelForMeta(tudorSet, 12, "facing=east,style=s0b3"); the metas' do not match the state from the block , meta 0 is not "facing=east,style=s0b0" , in the block it is "facing=south,style=s0b0." If i use any other meta values , i get the missing texture block in the inventory.What are these metas' ? 3) the facing seems to mean the facing on the block in the inventory panel, east is the left face , north is the right face i'm beginning to miss 1.7
-
Thanks, i need to clean up all of my init, too hard coded atm. Generic is always best
-
When i did that, the 4 inventory blocks end up showing the blank side of the block, and all with the same name. But they do place the correct block, with the correct name. Why do i want to register ALL valid states as an item, when i only need the 4?
-
Resolved: ModBlockTudorSet.class @SideOnly(Side.CLIENT) public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) { // item , amount, meta list.add(new ItemStack(itemIn)); list.add(new ItemStack(itemIn, 1, 4)); list.add(new ItemStack(itemIn, 1, 8)); list.add(new ItemStack(itemIn, 1, 12)); } ModBlocksInit.class // ModBlockTudorSet ************************************ tudorSet = new ModBlockTudorSet(); GameRegistry.register(tudorSet); item = new ItemMultiTexture(tudorSet, tudorSet, ModBlockTudorSet.subTypes; item.setRegistryName(tudorSet.getRegistryName()); GameRegistry.register(item); _registerBlockItemModelForMeta(tudorSet, 0, "facing=east,style=s0b0"); _registerBlockItemModelForMeta(tudorSet, 4, "facing=east,style=s0b1"); _registerBlockItemModelForMeta(tudorSet, 8, "facing=east,style=s0b2"); _registerBlockItemModelForMeta(tudorSet, 12, "facing=east,style=s0b3"); i'm sure there is a cleaner way to get the meta strings
-
public class ModBlocksInit { public static ArrayList<Block> blockList = new ArrayList<Block>(); public static ModBlockPlanksEW planksEW; public static ModBlockWainsCorner wainsCorner; public static ModBlockTudorSet tudorSet; public static IBlockState plankStair; static Block block0; public static void init(){ block0 = new ModBlock("brick_ew",Material.ROCK,"brick_ew",Main.CREATIVE_TAB); //blockList.add(new ModBlock("brick_ew",Material.ROCK,"brick_ew",Main.CREATIVE_TAB)); blockList.add(block0); blockList.add(new ModBlock("blue_marble",Material.ROCK,"blue_marble",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blocktudor1",Material.CLAY,"BlockTudor1",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blue_cobble_stone",Material.ROCK,"blue_cobble_stone",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blue_rug",Material.CARPET,"blue_rug",Main.CREATIVE_TAB)); blockList.add(new ModBlockTudorSet1()); blockList.add(new ModBlockWains()); //new BlockStairs(block0.getDefaultState())).setUnlocalizedName("stairsStone")); Iterator<Block> it = blockList.iterator(); while(it.hasNext()){ Block block = it.next(); GameRegistry.register(block);// registers the block // creates item from the block and registers it ItemBlock item = new ItemBlock(block); item.setRegistryName(block.getRegistryName()); GameRegistry.register(item); // creates the item view for inventory ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(),"inventory")); } // for the variants ***************************** // ModBlockPlanksEW planksEW = new ModBlockPlanksEW(); GameRegistry.register(planksEW); ItemMultiTexture item = new ItemMultiTexture(planksEW, planksEW, ModBlockPlanksEW.subTypes); item.setRegistryName(planksEW.getRegistryName()); GameRegistry.register(item); StateMapperBase b = new DefaultStateMapper(); BlockStateContainer bsc = planksEW.getBlockState(); ImmutableList<IBlockState> values = bsc.getValidStates(); for(IBlockState state : values) { String str = b.getPropertyString(state.getProperties()); _registerBlockItemModelForMeta(planksEW, planksEW.getMetaFromState(state), str); } // ModBlockWainsCorner *********************************** wainsCorner = new ModBlockWainsCorner(); GameRegistry.register(wainsCorner); // using item , b , bsc, values from above fix this item = new ItemMultiTexture(wainsCorner, wainsCorner, ModBlockWainsCorner.subTypes); item.setRegistryName(wainsCorner.getRegistryName()); GameRegistry.register(item); b = new DefaultStateMapper(); bsc = wainsCorner.getBlockState(); values = bsc.getValidStates(); for(IBlockState state : values) { String str = b.getPropertyString(state.getProperties()); _registerBlockItemModelForMeta(wainsCorner, wainsCorner.getMetaFromState(state), str); } // ModBlockTudorSet ************************************ tudorSet = new ModBlockTudorSet(); GameRegistry.register(tudorSet); // using item , b , bsc, values from above fix this item = new ItemMultiTexture(tudorSet, tudorSet, new String[] {"s0b0", "s0b1", "s0b2", "s0b3"}); item.setRegistryName(tudorSet.getRegistryName()); GameRegistry.register(item); b = new DefaultStateMapper(); bsc = tudorSet.getBlockState(); values = bsc.getValidStates(); //System.out.println("##############################"); for(IBlockState state : values) { String str = b.getPropertyString(state.getProperties()); //System.out.println(tudorSet.getMetaFromState(state)+" : "+ str); _registerBlockItemModelForMeta(tudorSet, tudorSet.getMetaFromState(state), str); } //System.out.println("##############################"); } // from Draco18s Minecraft Forge forum private static void _registerBlockItemModelForMeta(Block block, int metadata, String variant) { final Item item = Item.getItemFromBlock(block); if (item != null) { _registerItemModelForMeta(item, metadata, variant); } } private static void _registerItemModelForMeta(Item item, int metadata, String variant) { ModelResourceLocation res = new ModelResourceLocation(item.getRegistryName(), variant); _registerItemModelForMeta(item, metadata, res); } private static void _registerItemModelForMeta(Item item, int metadata, ModelResourceLocation modelResourceLocation) { ModelLoader.setCustomModelResourceLocation(item, metadata, modelResourceLocation); } } For ModBlockTudorSet; it has to properties "facing" and a custom "style". In the inventory i get four blocks, wrong models , correct names from the string when creating the ItemMultiTexture . There is only one Blockstate ModBlockTudorSet.json, that seems to be fine for the block (i tested it with a hammer that runs through all 16 metas) When the block is placed, it faces the player, but it is always style "s0b0" no matter which block i pick in the inventory. It have watched registers all the states, but only the four show up in inventory, why not all 16? dosn't matter how many entries in the MultiTexture string. What i am envisioning is four blocks in the inventory, 1 for each "style" the placement takes care of setting the facing. Thanks in advance
-
[1.10.2] trying to use ModelLoader instead of the model mesher
blinky000 replied to blinky000's topic in Modder Support
Changed the ItemBlock to ItemMultiTexture item = new ItemMultiTexture(planksEW, planksEW, ModBlockPlanksEW.subTypes); added the subTypes string array to the ModBlockPlanksEW And now all is good , thank you. -
[1.10.2] trying to use ModelLoader instead of the model mesher
blinky000 replied to blinky000's topic in Modder Support
package com.steveT.yabm.init; import java.util.ArrayList; import java.util.Iterator; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.DefaultStateMapper; import net.minecraft.client.renderer.block.statemap.StateMapperBase; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.client.model.ModelLoader; import com.google.common.collect.ImmutableList; import com.steveT.yabm.Main; import com.steveT.yabm.blocks.ModBlock; import com.steveT.yabm.blocks.ModBlockPlanksEW; import com.steveT.yabm.blocks.ModBlockTudorSet1; public class ModBlocksInit { public static ArrayList<Block> blockList = new ArrayList<Block>(); public static ModBlockPlanksEW planksEW; public static void init(){ blockList.add(new ModBlock("brick_ew",Material.ROCK,"ModBlockBrick_ew",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blueMarble",Material.ROCK,"ModBlockBlueMarble",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blocktudor1",Material.CLAY,"BlockTudor1",Main.CREATIVE_TAB)); blockList.add(new ModBlockTudorSet1()); } public static void register(){ Iterator<Block> it = blockList.iterator(); while(it.hasNext()){ Block block = it.next(); GameRegistry.register(block);// registers the block // creates item from the block and registers it ItemBlock item = new ItemBlock(block); item.setRegistryName(block.getRegistryName()); GameRegistry.register(item); } planksEW = new ModBlockPlanksEW(); //GameRegistry.register(planksEW); ItemBlock item = new ItemBlock(planksEW); item.setRegistryName(planksEW.getRegistryName()); GameRegistry.register(item); GameRegistry.register(planksEW); StateMapperBase b = new DefaultStateMapper(); BlockStateContainer bsc = planksEW.getBlockState(); ImmutableList<IBlockState> values = bsc.getValidStates(); for(IBlockState state : values) { String str = b.getPropertyString(state.getProperties()); _registerBlockItemModelForMeta(planksEW, planksEW.getMetaFromState(state), str); } } private static void _registerBlockItemModelForMeta(Block block, int metadata, String variant) { final Item item = Item.getItemFromBlock(block); if (item != null) { _registerItemModelForMeta(item, metadata, variant); } } private static void _registerItemModelForMeta(Item item, int metadata, String variant) { ModelResourceLocation res = new ModelResourceLocation(item.getRegistryName(), variant); _registerItemModelForMeta(item, metadata, res); } private static void _registerItemModelForMeta(Item item, int metadata, ModelResourceLocation modelResourceLocation) { ModelLoader.setCustomModelResourceLocation(item, metadata, modelResourceLocation); } public static void registerRenders(){ Iterator<Block> it = blockList.iterator(); while(it.hasNext()){ Block block = it.next(); //Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block),0,new ModelResourceLocation(block.getRegistryName(),"inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(),"inventory")); } } } using your code(hope that's ok) i was able to get all the different states in the inventory, but the all have the same name , and only place the meta 0 block. I must not be registering my block (planksEW) correctly ( i remember in a different post of yours ; 1 block 1 item) and i only have one block -
[1.10.2] trying to use ModelLoader instead of the model mesher
blinky000 replied to blinky000's topic in Modder Support
in preInit() i put all ModItemsInit.init(); ModItemsInit.register(); ModBlocksInit.init(); ModBlocksInit.register(); ModBlocksInit.registerRenders(); everything is now working, after you strong reminder, i was prompted to READ THE DAMN CRASH LOG! it was crashing in the item render, so left that call out till i fix it. Now on to registering a block with varients. Thank you for your help. -
[1.10.2] trying to use ModelLoader instead of the model mesher
blinky000 replied to blinky000's topic in Modder Support
The registerRenders is being called in init public class CommonProxy { public void preInit(FMLPreInitializationEvent e) { ModItemsInit.init(); ModItemsInit.register(); ModBlocksInit.init(); ModBlocksInit.register(); //System.out.println("++++++++++++++++++++++++++++++++++++++++++++++pre-init()"); } public void init(FMLInitializationEvent e) { ModItemsInit.registerRenders(); } public void postInit(FMLPostInitializationEvent e) { } } Putting it in preInit() crashes. So am i using ModelLoder in the wrong method ? Everything i read, said render is in Init(). -
This code works fine public class ModBlocksInit { public static ArrayList<Block> blockList = new ArrayList<Block>(); public static ModBlockPlanksEW planksEW; public static ItemBlock planksEWItem; public static void init(){ blockList.add(new ModBlock("brick_ew",Material.ROCK,"ModBlockBrick_ew",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blueMarble",Material.ROCK,"ModBlockBlueMarble",Main.CREATIVE_TAB)); blockList.add(new ModBlock("blocktudor1",Material.CLAY,"BlockTudor1",Main.CREATIVE_TAB)); blockList.add(new ModBlockTudorSet1()); } public static void register(){ Iterator<Block> it = blockList.iterator(); while(it.hasNext()){ Block block = it.next(); GameRegistry.register(block);// registers the block // creates item from the block and registers it ItemBlock item = new ItemBlock(block); item.setRegistryName(block.getRegistryName()); GameRegistry.register(item); } } public static void registerRenders(){ Iterator<Block> it = blockList.iterator(); while(it.hasNext()){ Block block = it.next(); Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block),0,new ModelResourceLocation(block.getRegistryName(),"inventory")); //ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(),"inventory")); } } } but when i try to use the ModelLoader line, i get no textures in the inventory
-
Problem with 1.7.10 setBlockBoundsBasedOnState
blinky000 replied to blinky000's topic in Modder Support
Thanks Muchly that did the trick. -
I created a simple block ,and a hammer item to change metadata. When standing on the tall block (default case), and just look at the smaller block(case 0-3), the player falls through the tall block down to the lower block level (looks like i,m standing in quicksand) , but the taller block still has it's full block bound @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { switch(world.getBlockMetadata(x, y, z)){ case 0: case 1: case 2: case 3: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); break; default: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); break; } }