MFF

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

    Les metadata de bloc

    Planifier Épinglé Verrouillé Déplacé Les blocs
    1.6.x
    56 Messages 11 Publieurs 19.8k 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par robin4002

      Vous avez sûrement remarqué que certains blocs ont des metadata, ce qui donne un id du genre 5:1, 5:2 etc… Dans ce tutoriel, vous allez apprendre à utiliser les metadata classiques, qui permettent d’avoir 16 metadata ( de :0 à :15).
      L’avantage des metadata est donc de pouvoir mettre 16 blocs sur le même id, cela permet donc d’économiser les ids.

      Dans la classe principale

      À la suite de vos déclarations de blocs déjà existants, ajoutez un nouveau bloc :

          public static Block BlockTutorial, TutorialMetadata;
      

      Ensuite, on crée le bloc de façon normale :

          TutorialMetadata = new BlockTutorialMetadata (2001).setHardness(2.0F).setResistance(10.0F)
          .setStepSound(Block.soundStoneFootstep).setUnlocalizedName("TutorialMetadata");
      

      La seule différence est que je l’ai pas la fonction pour la texture, elle sera déclarée dans la classe de notre bloc.
      Ensuite on enregistre le bloc :

          GameRegistry.registerBlock(TutorialMetadata, ItemBlockTutorialMetadata.class, "TutorialMetadata", "ModTutoriel");
      

      TutorialMetadata est le bloc, ItemBlockTutorialMetadata.class et une nouvelle classe que nous allons créer. Il faut savoir que quand vous créez un bloc, vous créez aussi un item qui va avec. Le bloc est ce qui est posé sur la map, et l’item est soit sous forme d’itemstack dans l’inventaire, soit sous forme d’entityItem si vous le jetez par terre. Quand on crée un bloc simple, l’itemblock utilisé est celui par défaut de minecraft, mais lorsqu’on crée un bloc avec des metadata, nous avons besoin de créer notre propre itemblock.
      “TutorielMetadata” est le nom du bloc, utilisé pour le système d’itemtracker de FML. “ModTutoriel” est mon modid, aussi utilisé par l’itemtracker de FML.

      Créez les deux classes “ItemBlockTutorielMetadata” et “BlockTutorielMetadata”

      La classe du bloc

      Tout comme un bloc basique, créez le constructeur et faites un extends Block :

      package tutoriel.common;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      
      public class BlockTutorialMetadata extends Block
      {
          public BlockTutorialMetadata(int id)
          {
              super(id, Material.rock);
              this.setCreativeTab(CreativeTabs.tabBlock);
          }
      }
      

      Ensuite ajoutez au-dessus du constructeur ceci :

          public static String[] type = new String[]{"block1", "block2", "block3", "block4", "block5", "block6", "block7", "block8"};
          private Icon[] IconArray;
      

      Ceci est un tableau de chaîne de caractère, je l’ai appelé type, vous pouvez le nommer comme vous voulez. Nous allons utiliser ce tableau pour l’enregistrement de textures, et pour les noms. block1, block2, etc… correspondent aux noms des futurs .png et aux noms non localisés, adaptez-les selon vos besoins.
      En dessous, j’ai fait un tableau d’icônes, il va servir pour les textures. (Importez net.minecraft.util.Icon)

      Maintenant nous allons ajouter la méthode d’enregistrement d’icône :

          public void registerIcons(IconRegister iconregister)
          {
              IconArray = new Icon[type.length];
              for(int i = 0; i < type.length; i++)
              {
                  IconArray[i] = iconregister.registerIcon("modtutoriel:" + type[i]);
              }
          }
      

      On commence par indiquer la longueur du tableau “IconArray”, elle va être la même que notre tableau type. Ensuite, c’est une petite boucle for, elle va permettre d’enregistrer tous les icônes en fonction de la taille du tableau type. Ainsi, si vous souhaitez ajouter un bloc de plus, il vous suffit de l’ajouter au tableau “type”.

      Maintenant il faut ajouter la fonction pour voir les blocs dans la table créative :

      @SideOnly(Side.CLIENT)
      public void getSubBlocks(int id, CreativeTabs creativeTabs, List list)
      {
          for(int metadata = 0; metadata < type.length; metadata++)
          {
              list.add(new ItemStack(id, 1, metadata));
          }
      }
      

      À nouveau la boucle for nous simplifie la vie, le principe est le même qu’au-dessus. Pour les erreurs, faites ctrl + shift + o pour organiser les importations, pour List, choisissez “java.util.List”

      Il ne nous reste plus qu’à finaliser la texture, car pour l’instant notre bloc utilise l’icône “blockIcon” comme il est extends Block. Nous allons donc ajouter la méthode getIcon dans notre bloc :

          @SideOnly(Side.CLIENT)
          public Icon getIcon(int side, int metadata)
          {
              return metadata < type.length && metadata >= 0 ? IconArray[metadata] : IconArray[0];
          }
      

      Pour ceux qui ont pas l’habitude des conditions ternaires , cela revient à faire ça :

          if(metadata < type.length && metadata >= 0)
              return IconArray[metadata];
          else
              return IconArray[0];
      

      La condition “if(metadata < type.length && metadata >= 0)” sert à vérifier que la metadata du bloc ne soit pas supérieure ou inférieure à la taille du tableau “IconArray” car si je crée un bloc qui n’a que 5 metadata par exemple et que le joueur s’amuse à se give le bloc de metadata 6 ou supérieur (avec /give <pseudo><id><quantité>6), l’icone sera IconArray[6], or comme le tableau n’a que 5 case, le jeu va crasher avec un java.lang.ArrayIndexOutOfBoundsException, ce code est donc une prévention contre un crash 🙂

      Une dernière méthode :

          public int damageDropped(int metadata)
          {
              return metadata;
          }
      

      Elle est assez importante, si vous ne la mettez pas tous vos blocs vont dropper le metadata 0, idem pour le “pickupBlock”

      La classe de l’item bloc

      La classe du bloc est fini, nous allons maintenant nous occuper de la classe de l’item bloc.
      Commencer par ajouter extends ItemBlock, puis importez net.minecraft.item.ItemBlock
      Ensuite, dans le constructeur, ajoutez this.setHasSubtypes(true);

      package tutoriel.common;
      
      import net.minecraft.item.ItemBlock;
      
      public class ItemBlockTutorialMetadata extends ItemBlock
      {
          public ItemBlockTutorialMetadata(int id)
          {
              super(id);
              this.setHasSubtypes(true);
          }
      }
      

      Ensuite, ajoutez cette méthode :

          public int getMetadata(int metadata)
          {
              return metadata;
          }
      

      Par défaut dans Item.java cette fonction renvoie sur 0, c’est pour ça qu’il est important de la mettre, sinon même avec un bloc d’id <quelque chose=“”>:1, lorsque vous le poserez, il deviendra un bloc de metadata 0. Donc si un jour vous avez ce problème, vous saurez que vous avez oublié de mettre cette fonction (je préviens, car ça m’est déjà arrivé)

      Il reste encore à faire la fonction pour le nom, vous allez donc ajouter :

          public String getUnlocalizedName(ItemStack stack)
          {
              int metadata = stack.getItemDamage();
              if(metadata > BlockTutorialMetadata.type.length || metadata < 0)
              {
                  metadata = 0;
              }
              return super.getUnlocalizedName() + "." + BlockTutorialMetadata.type[metadata];
          }
      

      Une fois de plus, if(metadata > BlockTutorialMetadata.type.length || metadata < 0) est une condition pour éviter un java.lang.ArrayIndexOutOfBoundsException.
      Le nom non localisé sera donc tile.<le nom dans setunlocalizedname(“”)>.<le nom dans le tableau type>.name

      Les ressources du bloc (texture + nom)

      Allez dans votre dossier forge/mcp/src/minecraft/assets/votre mod id/textures/block/
      Créez tout les fichiers .png correspondant aux noms que vous avez mis dans le tableau type.
      Retournez dans forge/mcp/src/minecraft/assets/votre mod id/lang, ouvrez le fichier en_US.lang, et ajoutez les noms :
      tile.<le nom dans setunlocalizedname(“”)>.<le nom dans le tableau type>.name=le nom localisé
      Exemple :

      tile.TutorialMetadata.block1.name=Metadata Tutorial 1
      tile.TutorialMetadata.block2.name=Metadata Tutorial 2
      tile.TutorialMetadata.block3.name=Metadata Tutorial 3
      tile.TutorialMetadata.block4.name=Metadata Tutorial 4
      tile.TutorialMetadata.block5.name=Metadata Tutorial 5
      tile.TutorialMetadata.block6.name=Metadata Tutorial 6
      tile.TutorialMetadata.block7.name=Metadata Tutorial 7
      tile.TutorialMetadata.block8.name=Metadata Tutorial 8
      

      Rendu final

      Voir les changements sur Github
      Bloc avec metadata

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

        Salut !
        J’ai eu un petit bug avec le block register, il me sort une nullPointerException. Je cite l’erreur :

        2013-07-22 23:16:42 [SEVERE] [ForgeModLoader] Caught an exception during block registration
        java.lang.NullPointerException
        at cpw.mods.fml.common.registry.ItemData.setName(ItemData.java:158)
        at cpw.mods.fml.common.registry.GameData.setName(GameData.java:255)
        at cpw.mods.fml.common.registry.GameRegistry.registerItem(GameRegistry.java:150)
        at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:227)
        

        Voici mon code :

        DoorBlock = new DoorBlock(605).setHardness(5.0F).setResistance(2000.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("DoorBlock");
        GameRegistry.registerBlock(DoorBlock, ItemBlockDoorBlock.class, "DoorBlock", "WirestoneCore");
        output("Bloc et sous-blocs 'DoorBlock' initialisés !");
        

        Sinon très bon tuto !

        P.S : Je ne sais pas trop où poster ça puisque ça va dans le support mais c’est lié à ce tutoriel donc bon 😕

        Travaille sur un super serveur, Wirestone.

        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

          Les portes utilise déjà les metadata pour la direction de la porte, tu ne peux pas mettre des portes en metadata.

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

            Non non, si je dis ça c’est que c’est pas une porte ^^. Ce sont des blocs.

            (Pour explication, ce sont des blocs avec des textures qui se suivent, cela permet de faire des portes à piston avec une texture uniforme)

            Travaille sur un super serveur, Wirestone.

            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

              Je peux avoir les logs complets et ta classe principale complète ?

              1 réponse Dernière réponse Répondre Citer 0
              • EclipseOnFireE Hors-ligne
                EclipseOnFire
                dernière édition par robin4002

                Bien sûr ! Je t’avertis ça crève un peu les yeux, j’ai pas suivi l’ordre précis de tes tutos, j’ai tout groupé en fait. Par exemple les register seront à côté de la déclaration du bloc.
                Tout est commenté donc tu devrais pouvoir t’y retrouver ^^
                Voici la classe principale : (j’ai enlevé le package et les import)
                :::

                @Mod(modid = "WiremodCore", name = "Wirestone Core", version = "1.0", useMetadata = true)
                @NetworkMod(clientSideRequired = true, serverSideRequired = true)
                public class WirestoneMain{
                
                //–--- Déclaration des blocs et items -----
                public static Block InvisibleBlock,Fan,Grid,Neon,WarningBlock,DoorBlock;
                public static Item AirFilter,
                GasMask,
                HermeticChestPlate,
                HermeticLeggings,
                HermeticBoots;
                static EnumArmorMaterial HermeticArmor = EnumHelper.addArmorMaterial("Hermetic", 241, new int[]{1, 3, 2, 1}, 9);
                
                //----- Configurations -----
                @SidedProxy(clientSide = "fr.wirestone.mainmod.WirestoneClientProxy", serverSide = "fr.wirestone.mainmod.WirestoneCommonProxy")
                public static WirestoneCommonProxy proxy;
                
                @Instance("WirestoneMain")
                public static WirestoneMain instance;
                public void output(String str){ //Log dans la console
                System.out.println("[WIRESTONE] "+str);
                }
                @EventHandler
                public void PreInit(FMLPreInitializationEvent event){
                System.out.println("–--------------------------\nWirestoneCore par Arthur340\n----------------------------\n\n--> Initialisation globale du mod en cours !\n");
                org.lwjgl.opengl.Display.setTitle("Minecraft Wirestone");
                //----- Configuration -----
                
                //Démarrage de l'anticheat
                AntiCheat anticheat = new Anticheat();
                anticheat.start();
                
                //----- Blocs -----
                output("Initialisation des blocs...");
                //Bloc invisible
                InvisibleBlock = new InvisibleBlock(600).setHardness(0.3F).setResistance(5.0F).setStepSound(Block.soundGlassFootstep).setUnlocalizedName("InvisibleBlock").func_111022_d("wiremodcore:InvisibleBlock");
                GameRegistry.registerBlock(InvisibleBlock, "InvisibleBlock");
                output("Bloc 'InvisibleBlock' initialisé !");
                //Ventilateur
                Fan = new Fan(601).setHardness(5.0F).setResistance(30.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Fan").func_111022_d("wiremodcore:Fan");
                GameRegistry.registerBlock(Fan, "Fan");
                output("Bloc 'Fan' initialisé !");
                //Grille d'aération
                Grid = new Grid(602).setHardness(5.0F).setResistance(30.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("Grid").func_111022_d("wiremodcore:Grid");
                GameRegistry.registerBlock(Grid, "Grid");
                output("Bloc 'Grid' initialisé !");
                //Néon
                Neon = new Neon(603).setHardness(2.5F).setResistance(30.0F).setStepSound(Block.soundMetalFootstep).setLightValue(1.0F).setUnlocalizedName("Neon").func_111022_d("wiremodcore:Neon");
                GameRegistry.registerBlock(Neon, "Neon");
                output("Bloc 'Neon' initialisé !");
                //Bloc attention
                WarningBlock = new WarningBlock(604).setHardness(0.8F).setStepSound(Block.soundClothFootstep).setUnlocalizedName("WarningBlock").func_111022_d("wiremodcore:WarningBlock");
                GameRegistry.registerBlock(WarningBlock, "WarningBlock");
                output("Bloc 'WarningBlock' initialisé !");
                //Bloc de porte
                DoorBlock = new DoorBlock(605).setHardness(5.0F).setResistance(2000.0F).setStepSound(Block.soundMetalFootstep).setUnlocalizedName("DoorBlock");
                GameRegistry.registerBlock(DoorBlock, ItemBlockDoorBlock.class, "DoorBlock", "WirestoneCore");
                output("Bloc et sous-blocs 'DoorBlock' initialisés !");
                
                output("Initialisation des blocs terminée !");
                //----- Items -----
                output("Initialisation des items...");
                //Filtre à air
                AirFilter = new AirFilter(3840).setUnlocalizedName("AirFilter").func_111206_d("wiremodcore:AirFilter");
                GameRegistry.registerItem(AirFilter, "AirFilter", "WiremodCore");
                output("Item 'AirFilter' initialisé !");
                //Armure hermétique
                GasMask = new ItemHermeticArmor(3841, HermeticArmor, 0,0).setUnlocalizedName("GasMask").func_111206_d("wiremodcore:gasmask");
                GameRegistry.registerItem(GasMask, "GasMask", "WiremodCore");
                output("Item 'AirMask' initialisé !");
                HermeticChestPlate = new ItemHermeticArmor(3842, HermeticArmor, 0, 1).setUnlocalizedName("HermeticChestPlate").func_111206_d("wiremodcore:hermeticchestplate");
                GameRegistry.registerItem(HermeticChestPlate, "HermeticChestPlate", "WiremodCore");
                output("Item 'HermeticChestPlate' initialisé !");
                HermeticLeggings = new ItemHermeticArmor(3843, HermeticArmor, 0, 2).setUnlocalizedName("HermeticLeggings").func_111206_d("wiremodcore:hermeticleggings");
                GameRegistry.registerItem(HermeticLeggings, "HermeticLeggings", "WiremodCore");
                output("Item 'HermeticLeggings' initialisé !");
                HermeticBoots = new ItemHermeticArmor(3844, HermeticArmor, 0, 3).setUnlocalizedName("HermeticBoots").func_111206_d("wiremodcore:hermeticboots");
                GameRegistry.registerItem(HermeticBoots, "HermeticBoots", "WiremodCore");
                output("Item 'HermeticBoots' initialisé !");
                output("Armure 'HermeticArmor' initialisée !");
                
                output("Initialisation des items terminée !");
                //----- Achievements -----
                
                output("Initialisation des textures !");
                output("Les erreurs qui suivent sont des erreurs qui peuvent être ignorées.");
                }
                @EventHandler
                public void Init(FMLInitializationEvent event){
                //----- Registry -----
                
                //----- Mobs -----
                
                //----- Render -----
                proxy.registerRender();
                
                //----- NetWork -----
                
                //----- Recipes -----
                //Déclarations des itemstack :
                output("Initialisation des textures terminée !");
                output("Initialisation des recettes...");
                ItemStack ironBars = new ItemStack(Block.fenceIron);
                ItemStack iron = new ItemStack(Item.ingotIron);
                ItemStack redStone = new ItemStack(Item.redstone);
                ItemStack glowStone = new ItemStack(Block.glowStone);
                ItemStack paper = new ItemStack(Item.paper);
                ItemStack woolYellow = new ItemStack(Block.cloth,1,4);
                ItemStack woolBlack = new ItemStack (Block.cloth,1,15);
                ItemStack glassPane = new ItemStack(Block.thinGlass);
                ItemStack airFilter = new ItemStack(fr.wirestone.mainmod.WirestoneMain.AirFilter);
                
                //Craft du filtre à air
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.AirFilter), " x ", "xyx",
                'x', iron, 'y', paper);
                output("Craft de 'AirFilter' initialisé !");
                
                //Craft du masque à gaz
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.GasMask), "xxx", "xzx"," z ",
                'x', woolYellow, 'y', airFilter, 'z', glassPane);
                output("Craft de 'GasMask' initialisé !");
                
                //Craft du plastron étanche
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.HermeticChestPlate), "x x", "xxx","xxx",
                'x', woolYellow);
                output("Craft de 'HermeticChestPlate' initialisé !");
                
                //Craft des jambières étanches
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.HermeticLeggings), "xxx", "x x","x x",
                'x', woolYellow);
                output("Craft de 'HermeticLeggings' initialisé !");
                
                //Craft des bottes étanches
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.HermeticBoots), "x x", "x x",
                'x', woolYellow);
                output("Craft de 'HermeticBoots' initialisé !");
                
                //Craft du ventilateur
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.Fan, 4), "xxx", "xrx","xxx",
                'x', iron, 'y', redStone);
                output("Craft de 'Fan' initialisé !");
                
                //Craft de la grille d'aération
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.Grid, 8), "xxx", "xyx","xxx",
                'x', iron, 'y', ironBars);
                output("Craft de 'Grid' initialisé !");
                
                //Craft du Néon
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.Neon, 2), "yyy", "xyx","yyy",
                'x', iron, 'y', glowStone);
                output("Craft de 'Neon' initialisé !");
                
                //Craft du bloc attention
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.WarningBlock, 4), "xy", "yx",
                'x', woolYellow, 'y', woolBlack);
                output("Craft de 'WarningBlock' initialisé !");
                GameRegistry.addRecipe(new ItemStack(fr.wirestone.mainmod.WirestoneMain.WarningBlock, 4), "yx", "xy",
                'x', woolYellow, 'y', woolBlack);
                output("Craft alternatif de 'WarningBlock' initialisé !");
                
                }
                @EventHandler
                public void PostInit(FMLPostInitializationEvent event){
                //Intégration avec les autres mods
                System.out.println("\n\n--> Initialisation globale du mod terminée avec succès !");
                }
                
                }
                

                :::
                Ma classe ItemBlockBlockDoor :

                package fr.wirestone.mainmod;
                
                import net.minecraft.item.ItemBlock;
                import net.minecraft.item.ItemBlock;
                import net.minecraft.item.ItemStack;
                
                public class ItemBlockDoorBlock extends ItemBlock{
                public ItemBlockDoorBlock(int id){
                super(id);
                this.setHasSubtypes(true);
                }
                public int getMetadata(int metadata){
                return metadata;
                }
                public String getUnlocalizedName(ItemStack stack){
                int metadata = stack.getItemDamage();
                if(metadata > DoorBlock.type.length || metadata < 0){
                metadata = 0;
                }
                return super.getUnlocalizedName() + "." + DoorBlock.type[metadata];
                }
                }
                

                Et voici la totalité du log :

                juil. 23, 2013 2:41:35 PM net.minecraft.launchwrapper.LogWrapper log
                INFO: Using tweak class name cpw.mods.fml.common.launcher.FMLTweaker
                2013-07-23 14:41:35 [INFO] [ForgeModLoader] Forge Mod Loader version 6.2.19.789 for Minecraft 1.6.2 loading
                2013-07-23 14:41:35 [INFO] [ForgeModLoader] Java is Java HotSpot(TM) Client VM, version 1.7.0_25, running on Windows 7:x86:6.1, installed at C:\Program Files\Java\jre7
                2013-07-23 14:41:35 [INFO] [ForgeModLoader] Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
                2013-07-23 14:41:35 [INFO] [STDOUT] Loaded 39 rules from AccessTransformer config file fml_at.cfg
                2013-07-23 14:41:35 [INFO] [STDOUT] Loaded 107 rules from AccessTransformer config file forge_at.cfg
                2013-07-23 14:41:36 [SEVERE] [ForgeModLoader] The binary patch set is missing. Things are probably about to go very wrong.
                2013-07-23 14:41:36 [INFO] [ForgeModLoader] Launching wrapped minecraft
                2013-07-23 14:41:39 [INFO] [Minecraft-Client] Setting user: Player946
                2013-07-23 14:41:39 [INFO] [Minecraft-Client] (Session ID is null)
                2013-07-23 14:41:43 [INFO] [Minecraft-Client] LWJGL Version: 2.9.0
                2013-07-23 14:41:45 [INFO] [Minecraft-Client] Reloading ResourceManager: Default
                2013-07-23 14:41:46 [INFO] [STDOUT]
                2013-07-23 14:41:46 [INFO] [STDOUT] Starting up SoundSystem…
                2013-07-23 14:41:46 [INFO] [STDOUT] Initializing LWJGL OpenAL
                2013-07-23 14:41:46 [INFO] [STDOUT] (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                2013-07-23 14:41:46 [INFO] [MinecraftForge] Attempting early MinecraftForge initialization
                2013-07-23 14:41:46 [INFO] [STDOUT] MinecraftForge v9.10.0.789 Initialized
                2013-07-23 14:41:46 [INFO] [ForgeModLoader] MinecraftForge v9.10.0.789 Initialized
                2013-07-23 14:41:47 [INFO] [STDOUT] Replaced 101 ore recipies
                2013-07-23 14:41:47 [INFO] [STDOUT] OpenAL initialized.
                2013-07-23 14:41:47 [INFO] [STDOUT]
                2013-07-23 14:41:47 [INFO] [MinecraftForge] Completed early MinecraftForge initialization
                2013-07-23 14:41:47 [INFO] [ForgeModLoader] Reading custom logging properties from C:\Users\Arthur\Documents\Dropbox\Programmation\Java\forge-9.10.0.789\mcp\jars\config\logging.properties
                2013-07-23 14:41:47 [OFF] [ForgeModLoader] Logging level for ForgeModLoader logging is set to ALL
                2013-07-23 14:41:48 [INFO] [ForgeModLoader] Searching C:\Users\Arthur\Documents\Dropbox\Programmation\Java\forge-9.10.0.789\mcp\jars\mods for mods
                2013-07-23 14:41:56 [INFO] [ForgeModLoader] Forge Mod Loader has identified 4 mods to load
                2013-07-23 14:41:56 [INFO] [mcp] Activating mod mcp
                2013-07-23 14:41:56 [INFO] [FML] Activating mod FML
                2013-07-23 14:41:56 [INFO] [Forge] Activating mod Forge
                2013-07-23 14:41:56 [INFO] [WiremodCore] Activating mod WiremodCore
                2013-07-23 14:41:56 [INFO] [ForgeModLoader] Registering Forge Packet Handler
                2013-07-23 14:41:56 [INFO] [ForgeModLoader] Succeeded registering Forge Packet Handler
                2013-07-23 14:41:56 [INFO] [ForgeModLoader] Configured a dormant chunk cache size of 0
                2013-07-23 14:41:56 [INFO] [STDOUT] –--------------------------
                2013-07-23 14:41:56 [INFO] [STDOUT] WirestoneCore par Arthur340
                2013-07-23 14:41:56 [INFO] [STDOUT] –--------------------------
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] –> Initialisation globale du mod en cours !
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Initialisation des blocs…
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Bloc 'InvisibleBlock' initialisé !
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Bloc 'Fan' initialisé !
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Bloc 'Grid' initialisé !
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Bloc 'Neon' initialisé !
                2013-07-23 14:41:56 [INFO] [STDOUT] [WIRESTONE] Bloc 'WarningBlock' initialisé !
                2013-07-23 14:41:56 [SEVERE] [ForgeModLoader] Caught an exception during block registration
                java.lang.NullPointerException
                at cpw.mods.fml.common.registry.ItemData.setName(ItemData.java:158)
                at cpw.mods.fml.common.registry.GameData.setName(GameData.java:255)
                at cpw.mods.fml.common.registry.GameRegistry.registerItem(GameRegistry.java:150)
                at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:227)
                at fr.wirestone.mainmod.WirestoneMain.PreInit(WirestoneMain.java:72)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:540)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:193)
                at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:173)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:104)
                at cpw.mods.fml.common.Loader.loadMods(Loader.java:521)
                at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:172)
                at net.minecraft.client.Minecraft.startGame(Minecraft.java:470)
                at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:796)
                at net.minecraft.client.main.Main.main(Main.java:93)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at net.minecraft.launchwrapper.Launch.launch(Launch.java:57)
                at net.minecraft.launchwrapper.Launch.main(Launch.java:18)
                2013-07-23 14:41:56 [SEVERE] [ForgeModLoader] Fatal errors were detected during the transition from PREINITIALIZATION to INITIALIZATION. Loading cannot continue
                2013-07-23 14:41:56 [SEVERE] [ForgeModLoader]
                mcp{8.04} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized
                FML{6.2.19.789} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized
                Forge{9.10.0.789} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized
                WiremodCore{1.0} [Wirestone Core] (bin) Unloaded->Constructed->Errored
                2013-07-23 14:41:56 [SEVERE] [ForgeModLoader] The following problems were captured during this phase
                2013-07-23 14:41:56 [SEVERE] [ForgeModLoader] Caught exception from WiremodCore
                cpw.mods.fml.common.LoaderException: java.lang.NullPointerException
                at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:232)
                at fr.wirestone.mainmod.WirestoneMain.PreInit(WirestoneMain.java:72)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:540)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:193)
                at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:173)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:104)
                at cpw.mods.fml.common.Loader.loadMods(Loader.java:521)
                at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:172)
                at net.minecraft.client.Minecraft.startGame(Minecraft.java:470)
                at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:796)
                at net.minecraft.client.main.Main.main(Main.java:93)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                at java.lang.reflect.Method.invoke(Unknown Source)
                at net.minecraft.launchwrapper.Launch.launch(Launch.java:57)
                at net.minecraft.launchwrapper.Launch.main(Launch.java:18)
                Caused by: java.lang.NullPointerException
                at cpw.mods.fml.common.registry.ItemData.setName(ItemData.java:158)
                at cpw.mods.fml.common.registry.GameData.setName(GameData.java:255)
                at cpw.mods.fml.common.registry.GameRegistry.registerItem(GameRegistry.java:150)
                at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:227)
                … 38 more
                2013-07-23 14:41:56 [INFO] [STDOUT] –-- Minecraft Crash Report ----
                2013-07-23 14:41:56 [INFO] [STDOUT] // I blame Dinnerbone.
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] Time: 23/07/13 14:41
                2013-07-23 14:41:56 [INFO] [STDOUT] Description: There was a severe problem during mod loading that has caused the game to fail
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] cpw.mods.fml.common.LoaderException: java.lang.NullPointerException
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:232)
                2013-07-23 14:41:56 [INFO] [STDOUT] at fr.wirestone.mainmod.WirestoneMain.PreInit(WirestoneMain.java:72)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at java.lang.reflect.Method.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:540)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at java.lang.reflect.Method.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:193)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:173)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at java.lang.reflect.Method.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:313)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296)
                2013-07-23 14:41:56 [INFO] [STDOUT] at com.google.common.eventbus.EventBus.post(EventBus.java:267)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:104)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.Loader.loadMods(Loader.java:521)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:172)
                2013-07-23 14:41:56 [INFO] [STDOUT] at net.minecraft.client.Minecraft.startGame(Minecraft.java:470)
                2013-07-23 14:41:56 [INFO] [STDOUT] at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:796)
                2013-07-23 14:41:56 [INFO] [STDOUT] at net.minecraft.client.main.Main.main(Main.java:93)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at java.lang.reflect.Method.invoke(Unknown Source)
                2013-07-23 14:41:56 [INFO] [STDOUT] at net.minecraft.launchwrapper.Launch.launch(Launch.java:57)
                2013-07-23 14:41:56 [INFO] [STDOUT] at net.minecraft.launchwrapper.Launch.main(Launch.java:18)
                2013-07-23 14:41:56 [INFO] [STDOUT] Caused by: java.lang.NullPointerException
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.registry.ItemData.setName(ItemData.java:158)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.registry.GameData.setName(GameData.java:255)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.registry.GameRegistry.registerItem(GameRegistry.java:150)
                2013-07-23 14:41:56 [INFO] [STDOUT] at cpw.mods.fml.common.registry.GameRegistry.registerBlock(GameRegistry.java:227)
                2013-07-23 14:41:56 [INFO] [STDOUT] … 38 more
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] A detailed walkthrough of the error, its code path and all known details is as follows:
                2013-07-23 14:41:56 [INFO] [STDOUT] –-------------------------------------------------------------------------------------
                2013-07-23 14:41:56 [INFO] [STDOUT]
                2013-07-23 14:41:56 [INFO] [STDOUT] – System Details --
                2013-07-23 14:41:56 [INFO] [STDOUT] Details:
                2013-07-23 14:41:56 [INFO] [STDOUT] Minecraft Version: 1.6.2
                2013-07-23 14:41:56 [INFO] [STDOUT] Operating System: Windows 7 (x86) version 6.1
                2013-07-23 14:41:56 [INFO] [STDOUT] Java Version: 1.7.0_25, Oracle Corporation
                2013-07-23 14:41:56 [INFO] [STDOUT] Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
                2013-07-23 14:41:56 [INFO] [STDOUT] Memory: 930898024 bytes (887 MB) / 1060372480 bytes (1011 MB) up to 1060372480 bytes (1011 MB)
                2013-07-23 14:41:56 [INFO] [STDOUT] JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
                2013-07-23 14:41:56 [INFO] [STDOUT] AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
                2013-07-23 14:41:56 [INFO] [STDOUT] Suspicious classes: FML and Forge are installed
                2013-07-23 14:41:56 [INFO] [STDOUT] IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
                2013-07-23 14:41:56 [INFO] [STDOUT] FML: MCP v8.04 FML v6.2.19.789 Minecraft Forge 9.10.0.789 4 mods loaded, 4 mods active
                2013-07-23 14:41:56 [INFO] [STDOUT] mcp{8.04} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized
                2013-07-23 14:41:56 [INFO] [STDOUT] FML{6.2.19.789} [Forge Mod Loader] (coremods) Unloaded->Constructed->Pre-initialized
                2013-07-23 14:41:56 [INFO] [STDOUT] Forge{9.10.0.789} [Minecraft Forge] (coremods) Unloaded->Constructed->Pre-initialized
                2013-07-23 14:41:56 [INFO] [STDOUT] WiremodCore{1.0} [Wirestone Core] (bin) Unloaded->Constructed->Errored
                2013-07-23 14:41:56 [INFO] [STDOUT] #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Arthur\Documents\Dropbox\Programmation\Java\forge-9.10.0.789\mcp\jars\.\crash-reports\crash-2013-07-23_14.41.56-client.txt
                AL lib: (EE) alc_cleanup: 1 device not closed
                
                

                Travaille sur un super serveur, Wirestone.

                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

                  Les balises code sont plus lisible que quote.
                  @Mod(modid = “WiremodCore” ….
                  GameRegistry.registerBlock(DoorBlock, ItemBlockDoorBlock.class, “DoorBlock”, “WirestoneCore”);
                  Heureusement que j’ai précisé qu’il faut mettre le modid ^^

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

                    Je le crois pas !! :honte: :s

                    Merci beaucoup ! Heu du coup tu peux supprimer mes messages nan ? Ca fait un peu désordre dans le topic du tutoriel ^^

                    Quand j’y pense… L’erreur la plus idiote du monde et en plus j’ai re-vérifié 5 fois avant de poster ce message 😮

                    Travaille sur un super serveur, Wirestone.

                    1 réponse Dernière réponse Répondre Citer 0
                    • kevin_68K Hors-ligne
                      kevin_68 Moddeurs confirmés
                      dernière édition par

                      Les balises code sont plus lisible que quote.

                      Les balise code_java sont plus lisible que code


                      Mettez à jours vers la dernière version stable (1.8.9 voir même…

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

                        Heu tu les utilises comment ?

                        Travaille sur un super serveur, Wirestone.

                        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

                          (code_java) mais avec des crochets. Mais il faudrait encore l’améliorer, car il déforme le forum si le code est trop long.

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

                            ha oui en effet le code java est beaucoup mieux, je vais le mettre sur mon tuto.

                            Travaille sur un super serveur, Wirestone.

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

                              Salut,

                              Voila je me sent plus a l’aise avec le “modding” et java en general.

                              Aussi en tant que développeur il y a une chose qui me chiffonne dans ton code. c’est la répétition des lignes de code . Aussi je propose un code alternatif qui apporte deux chose:

                              • une classe unique pour tout les block
                              • toute les variables sont initialisé dans la classe principal du mod

                              Voici la classe MyBlock pour tout les block

                              
                              public class MyBlock extends Block
                              {
                              private String dossierResource = null;
                              public String[] type; //Important "type" n'est plus static.
                              private Icon[] IconArray;
                              
                              public UlBlock(String pNom, int pId, Material pMaterial,float pDureté ,float pRésistance,StepSound Son, String pDossierResource,String[] pType)
                              {
                              super(pId, pMaterial);
                              this.dossierResource =pDossierResource;
                              this.setCreativeTab(CreativeTabs.tabBlock);
                              this.setHardness(pDureté).setResistance(pRésistance).setStepSound(Son).setUnlocalizedName(pNom);
                              this.type = pType;
                              }
                              
                              public void registerIcons(IconRegister iconregister)
                              {
                              IconArray = new Icon[type.length];
                              for(int i = 0; i < type.length; i++)
                              {
                              IconArray* = iconregister.registerIcon(dossierResource.toLowerCase()+":" + type*);
                              }
                              }
                              
                              @SideOnly(Side.CLIENT)
                              public void getSubBlocks(int id, CreativeTabs creativeTabs, List list)
                              {
                              for(int metadata = 0; metadata < type.length; metadata++)
                              {
                              list.add(new ItemStack(id, 1, metadata));
                              }
                              }
                              
                              @SideOnly(Side.CLIENT)
                              public Icon getIcon(int side, int metadata)
                              {
                              if(metadata < type.length && metadata >= 0)
                              return IconArray[metadata];
                              else
                              return IconArray[0];
                              }
                              
                              }
                              
                              

                              Voici les classe ItemBlock
                              Remplacer

                              
                              public String getUnlocalizedName(ItemStack stack)
                              {
                              int metadata = stack.getItemDamage();
                              
                              if(metadata > UlMetal.type.length || metadata < 0)
                              {
                              metadata = 0;
                              }
                              
                              return super.getUnlocalizedName() + "." + UlMetal.type[metadata];
                              }
                              
                              
                              
                              public class ModTutoriel
                              {
                              […]
                              
                              public static String[] typePierre = new String[]{"block1", "block2", "block3", "block4", "block5", "block6", "block7", "block8"};
                              
                              //Blocks
                              public static Block UlPierre;
                              
                              […]
                              
                              @EventHandler
                              public void PreInit(FMLPreInitializationEvent event)
                              // place des configurations et achievements, compléter et enregistrer nos blocs et items.
                              {
                              //Configuration
                              
                              //Son
                              
                              //Onglet créative
                              
                              //Blocks
                              TutorialMetadata= new TutorialMetadata("TutorialMetadata", 2001,Material.rock,2.0F,10.0F,Block.soundStoneFootstep,"ModTutoriel","alMetadata",typePierre);
                              
                              //Enregistrement des blocs - Blocks registry
                              GameRegistry.registerBlock(TutorialMetadata, UlItemMetadata.class, "UlItemMetadata", "ModTutoriel");;
                              
                              //Items
                              
                              //Enregistrement des Items - Items registry
                              
                              //Achievements
                              }
                              
                              @EventHandler
                              public void Init(FMLInitializationEvent event)
                              //enregistrement des tileEntity, des Entity, des rendu, etc
                              {
                              ///////////////////////////////////////////////////////////////////////////////
                              
                              //Registry
                              
                              //Mobs
                              
                              //Render
                              proxy.registerRender();
                              
                              //NetWork
                              
                              //Recipe
                              //GameRegistry.addRecipe(new ItemStack(BlockTutorial), new Object[]{"XXX", "ZYZ", "XXX", 'X', Block.blockLapis, 'Y', new ItemStack(Item.dyePowder, 1, 15), 'Z', new ItemStack(Item.dyePowder, 1, 6)});
                              //GameRegistry.addRecipe(new ItemStack(UlPierre, 4, 2), new Object[]{"XXX", "XXX", " ", 'X', Block.stone});
                              //GameRegistry.addRecipe(new ItemStack(UlSable, 4, 1), new Object[]{"XXX", "XXX", 'X', Block.dirt});
                              
                              for(int i = 0; i < 16; i++)
                              {
                              GameRegistry.addShapelessRecipe(new ItemStack(UlPierre, 1, i), new Object[]{ Block.stone, new ItemStack(UlColorant, 1, i)});
                              GameRegistry.addShapelessRecipe(new ItemStack(UlMetal, 1, i), new Object[]{ Block.blockIron , new ItemStack(UlColorant, 1, i)});
                              GameRegistry.addShapelessRecipe(new ItemStack(UlSable, 1, i), new Object[]{ Block.sand , new ItemStack(UlColorant, 1, i)});
                              GameRegistry.addShapelessRecipe(new ItemStack(UlVerre, 1, i), new Object[]{ Block.glass , new ItemStack(UlColorant, 1, i)});
                              
                              }
                              
                              }
                              
                              @EventHandler
                              public void PostInit(FMLPostInitializationEvent event)
                              //enregistrements de langages ou de recettes
                              {
                              //Intégration avec les autres mods
                              
                              }
                              
                              

                              ma vie de minecraftien: Ulyssecraft

                              1 réponse Dernière réponse Répondre Citer 0
                              • U Hors-ligne
                                ulysse1976
                                dernière édition par robin4002

                                Salut,

                                Voila je me sent plus a l’aise avec le “modding” et java en general.

                                Aussi en tant que développeur il y a une chose qui me chiffonne dans ton code. c’est la répétition des lignes de code . Aussi je propose un code alternatif qui apporte deux chose:

                                • une classe unique pour tout les block
                                • toute les variables sont initialisé dans la classe principal du mod

                                Voici la classe MyBlock pour tout les block

                                public class MyBlock extends Block
                                {
                                    private String dossierResource = null;
                                    public String[] type; // Important "type" n'est plus static.
                                    private Icon[] IconArray;
                                
                                    public MyBlock(String pNom, int pId, Material pMaterial, float pDureté, float pRésistance, StepSound Son, String pDossierResource, String[] pType)
                                    {
                                        super(pId, pMaterial);
                                        this.dossierResource = pDossierResource;
                                        this.setCreativeTab(CreativeTabs.tabBlock);
                                        this.setHardness(pDureté).setResistance(pRésistance).setStepSound(Son).setUnlocalizedName(pNom);
                                        this.type = pType;
                                    }
                                
                                    public void registerIcons(IconRegister iconregister)
                                    {
                                        IconArray = new Icon[type.length];
                                        for(int i = 0; i < type.length; i++)
                                        {
                                            IconArray[i] = iconregister.registerIcon(dossierResource.toLowerCase() + ":" + type[i]);
                                        }
                                    }
                                
                                    @SideOnly(Side.CLIENT)
                                    public void getSubBlocks(int id, CreativeTabs creativeTabs, List list)
                                    {
                                        for(int metadata = 0; metadata < type.length; metadata++)
                                        {
                                            list.add(new ItemStack(id, 1, metadata));
                                        }
                                    }
                                
                                    @SideOnly(Side.CLIENT)
                                    public Icon getIcon(int side, int metadata)
                                    {
                                        if(metadata < type.length && metadata >= 0)
                                            return IconArray[metadata];
                                        else
                                            return IconArray[0];
                                    }
                                
                                }
                                

                                Pour les classe ItemBlock, remplacer:

                                    public String getUnlocalizedName(ItemStack stack)
                                    {
                                        int metadata = stack.getItemDamage();
                                        if(metadata > BlockTutorialMetadata.type.length || metadata < 0)
                                        {
                                            metadata = 0;
                                        }
                                        return super.getUnlocalizedName() + "." + BlockTutorialMetadata.type[metadata];
                                    }
                                

                                par :

                                    public String getUnlocalizedName(ItemStack stack)
                                    {
                                        int metadata = stack.getItemDamage();
                                        if(metadata > BlockTutorialMetadata.type.length || metadata < 0)
                                        {
                                            metadata = 0;
                                        }
                                        return super.getUnlocalizedName() + "." + ModTutoriel.type[metadata];
                                    }
                                

                                En faite je deplace le tableau “Type” dans la classe du mod

                                voici la classe du mod

                                public class ModTutoriel
                                {
                                […]
                                
                                public static String[] typeBlock = new String[]{"block1", "block2", "block3", "block4", "block5", "block6", "block7", "block8"};
                                
                                //Blocks
                                public static Block UlPierre;
                                
                                […]
                                
                                @EventHandler
                                public void PreInit(FMLPreInitializationEvent event)
                                // place des configurations et achievements, compléter et enregistrer nos blocs et items.
                                {
                                //Configuration
                                
                                //Son
                                
                                //Onglet créative
                                
                                //Blocks
                                TutorialMetadata= new MyBlock("TutorialMetadata", 2001,Material.rock,2.0F,10.0F,Block.soundStoneFootstep,"ModTutoriel","alMetadata",typeBlock );
                                
                                //Enregistrement des blocs - Blocks registry
                                GameRegistry.registerBlock(TutorialMetadata, ItemBlockTutorialMetadata.class, "TutorialMetadata", "ModTutoriel");;
                                
                                […]
                                

                                On pourrait pousser le vis en faisant une seul classe pour les block simples et les block metadata en détectant si le tableau “Type” est null ou vide par exemple

                                J’avais penser faire la même chose avec les classe “ItemBlock” mais c’est un tit peut plus difficile puisque apparemment elles sont instancier a la volé .

                                voila voila voila , je sais pas si ca va être utile mais je suis plutôt contant de moi 😛

                                ps: j’espere pas avoir fait d’erreur en transposant mon code avec les nom des variables et classes du tuto d’origine.

                                ma vie de minecraftien: Ulyssecraft

                                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

                                  J’ai mis des code_java pour une meilleur lisibilité (il faudrait que je vois avec Woryk pour les améliorer encore aussi, barre défilante sur le codé et éviter les déformations avec les codes trop long)

                                  Par contre tu as dû te fail avec l’ItemBlock, car je ne vois pas de différence (et du fait que type n’est plus static il me semble que ça peut pas marcher avec le code actuelle)

                                  Ton code pourra être utile pour de nombreuse personne, je le laisse donc. En revanche, je préfère avoir une classe par bloc pour les autres fonctions que nous verrons plus tard pour rendre le bloc plus complexe.

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

                                    ulysse je comprend tout à fait ton point de vue mais je pense que si les développeurs de Mojang ont choisi de faire une classe/bloc c’est pas pour rien. Ce ne sont pourtant pas des débutants en programmation.
                                    Je ne comprend pas pourquoi moi non plus mais il doit bien y avoir une raison 🙂

                                    Travaille sur un super serveur, Wirestone.

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • kevin_68K Hors-ligne
                                      kevin_68 Moddeurs confirmés
                                      dernière édition par

                                      Je ne comprend pas pourquoi moi non plus mais il doit bien y avoir une raison

                                      Sans doute s’ils veulent faire une modification sur un bloc qui nécessite un changement de l’extension


                                      Mettez à jours vers la dernière version stable (1.8.9 voir même…

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

                                        Peut être… Ou alors pour mieux s’y retrouver, je sais pas.

                                        Travaille sur un super serveur, Wirestone.

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

                                          @‘robin4002’:

                                          J’ai mis des code_java pour une meilleur lisibilité (il faudrait que je vois avec Woryk pour les améliorer encore aussi, barre défilante sur le codé et éviter les déformations avec les codes trop long)

                                          Tu parle de balises pour écrire le code dans les post ?

                                          @‘robin4002’:

                                          Par contre tu as dû te fail avec l’ItemBlock, car je ne vois pas de différence (et du fait que type n’est plus static il me semble que ça peut pas marcher avec le code actuelle)

                                          effectivement c’est pas TutorialMetedata (la classe du block) mais ModTutoriel ( classe du mod ) . J’ai rectifier dans le post . Et apparemment ca marche chez moi aussi non je ne me serait pas permis d’avoir publié ce code.

                                          Pas évident de faire un post comme ca , je suis encore loin de pouvoir rédiger des tutu comme toi , mais ca viendra .

                                          ma vie de minecraftien: Ulyssecraft

                                          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

                                            Oui les balises dans le postes.
                                            Et pour le code, comme ça oui ça fonctionne, mais sans la avant que tu rectifie la modification de l’ItemBlock ça pouvait pas fonctionner

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB