MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Comment faire un ItemBlock

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    13 Messages 3 Publieurs 3.3k Vues 1 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • jules552J Hors-ligne
      jules552
      dernière édition par

      @‘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 ^^

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        GameRegistry.register(new ItemBlock(tonBlock), tonBlock.getRegistryName());

        1 réponse Dernière réponse Répondre Citer 0
        • jules552J Hors-ligne
          jules552
          dernière édition par

          @‘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 ?

          1 réponse Dernière réponse Répondre Citer 0
          • Cl00e9mentC Hors-ligne
            Cl00e9ment
            dernière édition par

            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.

            1 réponse Dernière réponse Répondre Citer 0
            • jules552J Hors-ligne
              jules552
              dernière édition par

              @‘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 🙂

              1 réponse Dernière réponse Répondre Citer 0
              • Cl00e9mentC Hors-ligne
                Cl00e9ment
                dernière édition par

                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.

                1 réponse Dernière réponse Répondre Citer 0
                • jules552J Hors-ligne
                  jules552
                  dernière édition par

                  @‘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à…  😢

                  1 réponse Dernière réponse Répondre Citer 0
                  • Cl00e9mentC Hors-ligne
                    Cl00e9ment
                    dernière édition par

                    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 :@ .

                    1 réponse Dernière réponse Répondre Citer 0
                    • Cl00e9mentC Hors-ligne
                      Cl00e9ment
                      dernière édition par

                      Si tu veux tu m’envoie ton skype par mail ou MP et demain soir je me ferai un plaisir de tous t’expliquer.

                      1 réponse Dernière réponse Répondre Citer 0
                      • jules552J Hors-ligne
                        jules552
                        dernière édition par

                        @‘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 🙂

                        1 réponse Dernière réponse Répondre Citer 0
                        • robin4002R Hors-ligne
                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
                          dernière édition par

                          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.

                          1 réponse Dernière réponse Répondre Citer 0
                          • 1 / 1
                          • Premier message
                            Dernier message
                          Design by Woryk
                          ContactMentions Légales

                          MINECRAFT FORGE FRANCE © 2024

                          Powered by NodeBB