Comment faire un ItemBlock
-
@‘TheRedColossus’:
Salut !
Pile quand je reviens sur le forum je tombe sur ça
. Je suis donc très heureux de te proposer mon tutoriel qui doit aussi fonctionner pour la 1.11 : https://www.minecraftforgefrance.fr/showthread.php?tid=3718 .
J’espère qu’il te sera utile
!Merci, mais il me reste quelques petits problèmes
déjà pourrais-tu me valider si j’ai bien refait ma classe BlocksMod s’il te plait ?package fr.jules552.mod.init; import net.minecraft.block.Block; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import Blocks.AdamantiumMinerai; import Blocks.AluminiumMinerai; import Blocks.BlockSilver; import Blocks.BlockXray; import Blocks.LumineuxBlock; import Blocks.PadBounceBlue; import Blocks.PadBounceGreen; import Blocks.PadBounceRed; import Blocks.SilverMinerai; import fr.jules552.mod.Reference; public class BlocksMod { public static final Block ADAMANTIUM_BLOCK = new AdamantiumMinerai(Material.IRON).setRegistryName("adamantium_block").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block ADAMANTIUM_ORE = new AdamantiumMinerai(Material.ROCK).setRegistryName("adamantium_ore").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block SILVER_BLOCK = new SilverMinerai(Material.IRON).setRegistryName("silver_block").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block SILVER_ORE = new SilverMinerai(Material.ROCK).setRegistryName("silver_ore").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block ALUMINIUM_BLOCK = new AluminiumMinerai(Material.ROCK).setRegistryName("aluminium_block").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block ALUMINIUM_ORE = new AluminiumMinerai(Material.ROCK).setRegistryName("aluminium_ore").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block LIGHT_BLOCK = new LumineuxBlock(Material.BARRIER).setRegistryName("light_block").setCreativeTab(ItemsMod.tabCustomTab).setBlockUnbreakable().setLightLevel(1.0F); public static final Block XRAY_BLOCK = new LumineuxBlock(Material.GLASS).setRegistryName("xray_block").setCreativeTab(ItemsMod.tabCustomTab).setHardness(5.0F); public static final Block BOUNCE_PAD_RED = new LumineuxBlock(Material.ROCK).setRegistryName("bounce_pad_red").setCreativeTab(ItemsMod.tabCustomTab).setHardness(0.0F); public static final Block BOUNCE_PAD_BLUE = new LumineuxBlock(Material.ROCK).setRegistryName("bounce_pad_blue").setCreativeTab(ItemsMod.tabCustomTab).setHardness(0.0F); public static final Block BOUNCE_PAD_GREEN = new LumineuxBlock(Material.ROCK).setRegistryName("bounce_pad_green").setCreativeTab(ItemsMod.tabCustomTab).setHardness(0.0F); public static void registerBlocks (){ GameRegistry.register (ADAMANTIUM_BLOCK); GameRegistry.register (ADAMANTIUM_ORE); GameRegistry.register (SILVER_BLOCK); GameRegistry.register (SILVER_ORE); GameRegistry.register (ALUMINIUM_BLOCK); GameRegistry.register (ALUMINIUM_ORE); GameRegistry.register (LIGHT_BLOCK); GameRegistry.register (XRAY_BLOCK); GameRegistry.register (BOUNCE_PAD_RED); GameRegistry.register (BOUNCE_PAD_BLUE); GameRegistry.register (BOUNCE_PAD_GREEN); } public static void register() { //Les Crafts //Crafts pour Adamantium GameRegistry.addSmelting(BlocksMod.ADAMANTIUM_ORE, new ItemStack(ItemsMod.adamantium_ingot), 1.8F); GameRegistry.addRecipe(new ItemStack(BlocksMod.ADAMANTIUM_BLOCK, 1), new Object[] {"###", "###","###", '#', ItemsMod.adamantium_ingot}); GameRegistry.addShapelessRecipe(new ItemStack(ItemsMod.adamantium_ingot,9), new ItemStack(BlocksMod.ADAMANTIUM_BLOCK)); //Crafts pour Silver GameRegistry.addSmelting(BlocksMod.SILVER_ORE, new ItemStack(ItemsMod.silver_ingot), 0.8F); GameRegistry.addRecipe(new ItemStack(BlocksMod.SILVER_BLOCK, 1), new Object[] {"###", "###","###", '#', ItemsMod.silver_ingot}); GameRegistry.addShapelessRecipe(new ItemStack(ItemsMod.silver_ingot,9), new ItemStack(BlocksMod.SILVER_BLOCK)); //Crafts pour Aluminium GameRegistry.addSmelting(BlocksMod.ALUMINIUM_ORE, new ItemStack(ItemsMod.aluminium_ingot), 0.7F); GameRegistry.addRecipe(new ItemStack(BlocksMod.ALUMINIUM_BLOCK, 1), new Object[] {"###", "###","###", '#', ItemsMod.aluminium_ingot}); GameRegistry.addShapelessRecipe(new ItemStack(ItemsMod.aluminium_ingot,9), new ItemStack(BlocksMod.ALUMINIUM_BLOCK)); //Crafts pour SpecialBlocks GameRegistry.addRecipe(new ItemStack(BlocksMod.XRAY_BLOCK, 1), new Object[] {"###", "#/#","###", '/', BlocksMod.ADAMANTIUM_BLOCK, '#', Blocks.GLASS}); } @SideOnly (Side.CLIENT) public static void registerItemBlockModels (){ ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (ADAMANTIUM_BLOCK), 0, new ModelResourceLocation (Reference.MOD_ID+":adamantium_block", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (ADAMANTIUM_ORE), 0, new ModelResourceLocation (Reference.MOD_ID+":adamantium_ore", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (SILVER_BLOCK), 0, new ModelResourceLocation (Reference.MOD_ID+":silver_block", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (SILVER_ORE), 0, new ModelResourceLocation (Reference.MOD_ID+":silver_ore", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (ALUMINIUM_BLOCK), 0, new ModelResourceLocation (Reference.MOD_ID+":aluminium_block", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (ALUMINIUM_ORE), 0, new ModelResourceLocation (Reference.MOD_ID+":aluminium_ore", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (LIGHT_BLOCK), 0, new ModelResourceLocation (Reference.MOD_ID+":light_block", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (XRAY_BLOCK), 0, new ModelResourceLocation (Reference.MOD_ID+":xray_block", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (BOUNCE_PAD_RED), 0, new ModelResourceLocation (Reference.MOD_ID+":bounce_pad_red", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (BOUNCE_PAD_BLUE), 0, new ModelResourceLocation (Reference.MOD_ID+":bounce_pad_blue", "inventory")); ModelLoader.setCustomModelResourceLocation (Item.getItemFromBlock (BOUNCE_PAD_GREEN), 0, new ModelResourceLocation (Reference.MOD_ID+":bounce_pad_green", "inventory")); } private static void registerItemBlock (Block block){ ItemBlock adamantium_ItemBlock = new ItemBlock (ADAMANTIUM_BLOCK); adamantium_ItemBlock.setRegistryName (ADAMANTIUM_BLOCK.getRegistryName()); GameRegistry.register (adamantium_ItemBlock); ItemBlock adamantium_ItemOre = new ItemBlock (ADAMANTIUM_ORE); adamantium_ItemOre.setRegistryName (ADAMANTIUM_ORE.getRegistryName()); GameRegistry.register (adamantium_ItemOre); ItemBlock silver_ItemBlock = new ItemBlock (SILVER_BLOCK); silver_ItemBlock.setRegistryName (SILVER_BLOCK.getRegistryName()); GameRegistry.register (silver_ItemBlock); ItemBlock silver_ItemOre = new ItemBlock (SILVER_ORE); silver_ItemOre.setRegistryName (SILVER_ORE.getRegistryName()); GameRegistry.register (silver_ItemOre); ItemBlock aluminium_ItemBlock = new ItemBlock (ALUMINIUM_BLOCK); aluminium_ItemBlock.setRegistryName (ALUMINIUM_BLOCK.getRegistryName()); GameRegistry.register (aluminium_ItemBlock); ItemBlock aluminium_ItemOre = new ItemBlock (ALUMINIUM_ORE); aluminium_ItemOre.setRegistryName (ALUMINIUM_ORE.getRegistryName()); GameRegistry.register (aluminium_ItemOre); ItemBlock light_ItemBlock = new ItemBlock (LIGHT_BLOCK); light_ItemBlock.setRegistryName (LIGHT_BLOCK.getRegistryName()); GameRegistry.register (light_ItemBlock); ItemBlock xray_ItemBlock = new ItemBlock (XRAY_BLOCK); xray_ItemBlock.setRegistryName (XRAY_BLOCK.getRegistryName()); GameRegistry.register (xray_ItemBlock); ItemBlock bounce_pad_ItemBlockRed = new ItemBlock (BOUNCE_PAD_RED); bounce_pad_ItemBlockRed.setRegistryName (BOUNCE_PAD_RED.getRegistryName()); GameRegistry.register (bounce_pad_ItemBlockRed); ItemBlock bounce_pad_ItemBlockBlue = new ItemBlock (BOUNCE_PAD_BLUE); bounce_pad_ItemBlockBlue.setRegistryName (BOUNCE_PAD_BLUE.getRegistryName()); GameRegistry.register (bounce_pad_ItemBlockBlue); ItemBlock bounce_pad_ItemBlockGreen = new ItemBlock (BOUNCE_PAD_GREEN); bounce_pad_ItemBlockGreen.setRegistryName (BOUNCE_PAD_GREEN.getRegistryName()); GameRegistry.register (bounce_pad_ItemBlockGreen); } }Seconde question, je met quoi du coup dans ma classe ClientProxy?
package fr.jules552.mod.proxy; import fr.jules552.mod.init.ItemsMod; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.item.Item; import fr.jules552.mod.init.BlocksMod; public class ClientProxy extends CommonProxy { @Override public void registerRenders() { ItemsMod.registerRenders(); BlocksMod.register(); } }De même pour ma class Adamantium ? :
package fr.jules552.mod; import fr.jules552.mod.WorldGeneration.GenerationHelper; import fr.jules552.mod.init.BlocksMod; import fr.jules552.mod.init.ItemsMod; import fr.jules552.mod.proxy.CommonProxy; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.oredict.OreDictionary; @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION) public class Adamantium { @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS) public static CommonProxy proxy; @EventHandler public void preInit(FMLPreInitializationEvent event) { ItemsMod.init(); ItemsMod.register(); BlocksMod.register(); // Système de Générération OreDictionary.registerOre("AdamantiumOre", new ItemStack(BlocksMod.ADAMANTIUM_ORE)); OreDictionary.registerOre("SilverOre", new ItemStack(BlocksMod.SILVER_ORE)); OreDictionary.registerOre("AluminiumOre", new ItemStack(BlocksMod.ALUMINIUM_ORE)); GameRegistry.registerWorldGenerator(new GenerationHelper(), 2); } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRenders(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }Merci encore pour ton tutoriel très complet ^^
-
GameRegistry.register(new ItemBlock(tonBlock), tonBlock.getRegistryName());
-
@‘robin4002’:
GameRegistry.register(new ItemBlock(tonBlock), tonBlock.getRegistryName());
Merci, cette fois-ci les items sont bien générés mais reste 2 problèmes, les items s’appellent tous “till.null.name” (même si l’ID est bon avec adamantium:…) et aucune texture en conséquent n’est appliqué, de où pourrai venir le problème ?
-
Tes proxis sont mal gérés j’ai l’impression. Toutes les preinit, init et postinit doivent être gérés dans les proxis. La classe du mod redirige juste vers le bon proxi. Essaye de revoir les tutos de mff.
-
@‘TheRedColossus’:
Tes proxis sont mal gérés j’ai l’impression. Toutes les preinit, init et postinit doivent être gérés dans les proxis. La classe du mod redirige juste vers le bon proxi. Essaye de revoir les tutos de mff.
Surement, Ils fonctionnaient très bien avant mais bon avec cette update… le problème c’est que j’utilise absolument pas les même méthode de rangement etc dans le code et du coup je suis un peu perdu avec les tutoriels… et j’ai franchement pas envie de tout réécrir, je pense qu’il y a un problème à fixé dans tous ce qui est preInit, init et postinit effectivement mais le problème c’est de savoir où…
tu n’aurais pas un exemple à me montrer de la classe ou tu gères tout ça? pour m’en inspirer

-
Le proxi commun enregistre un peu tous sauf les textures et les modèles.
Le proxi server hérite du commun donc il fait la même chose.
Pareil que le proxi client : il hérite du commun donc il fait la même chose que le commun mais en plus il va gérer les textures et les modèles. Ce qui est logique parceque le client s’occupe de l’affichage.
-
@‘TheRedColossus’:
Le proxi commun enregistre un peu tous sauf les textures et les modèles.
Le proxi server hérite du commun donc il fait la même chose.
Pareil que le proxi client : il hérite du commun donc il fait la même chose que le commun mais en plus il va gérer les textures et les modèles. Ce qui est logique parceque le client s’occupe de l’affichage.
Sans être méchant ça m’aide pas beaucoup, quand je regarde le tutoriel que tu m’as envoyé quasiment tout est différent et mis à des places différents ou ne ressemblant pas vraiment à ce que j’ai. Je suis un peu bloqué là…

-
Bien sûr que j’ai un exemple à te montrer je t’envoie ça demain 18h ou 7h si j’ai le temps parceque là je suis sur mon téléphone. C’est super galère :@ .
-
Si tu veux tu m’envoie ton skype par mail ou MP et demain soir je me ferai un plaisir de tous t’expliquer.
-
@‘TheRedColossus’:
Bien sûr que j’ai un exemple à te montrer je t’envoie ça demain 18h ou 7h si j’ai le temps parceque là je suis sur mon téléphone. C’est super galère :@ .
Je comprend, c’est quand même sympa de ta part de m’avoir aider, ne t’inquiète pas après ça presse pas ^^ , tant que ça m’évite de devoir réecrir le mod en entier

J’ai juste une question, pourquoi LexManos a modifié le fonctionnement en faites ? Il y a un vrai intérêt technique derrière ou ? Si quelqu’un pouvait me répondre la dessus ça serait sympa aussi

Et bien alors à demain TheRedColossus et Merci encore de ton aide

-
Le registre a été réécrit avec un code plus efficace.
Lorsqu’il y a changement dans forge c’est toujours pour améliorer, pas juste pour casser les pieds des moddeurs.