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

      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
                                • U Hors-ligne
                                  ulysse1976
                                  dernière édition par

                                  @‘EclipseOnFire’:

                                  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 🙂

                                  Non mais la se sont des classes qui sont écrites par nous même il n’est pas question de changer la classe Block de Majong.

                                  ma vie de minecraftien: Ulyssecraft

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

                                    Petity fail:

                                    Majong

                                    c’est un jeu, c’est pas la même chose que Mojang


                                    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
                                    • U Hors-ligne
                                      ulysse1976
                                      dernière édition par

                                      oups fourchage de doigts 😛

                                      ma vie de minecraftien: Ulyssecraft

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

                                        Non je ne parle pas de modifier. Je parle de suivre l’exemple initial. Je voulais dire que si les développeurs de Mojang ont décidé de faire un bloc/classe c’est pour une bonne raison, et je pense que l’on devrait suivre cette démarche 🙂 (Attention, je ne dis pas que ton code est nul/mauvais/inutile !)

                                        Travaille sur un super serveur, Wirestone.

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

                                          Quelque questions … Comment on ajoute des propriété a nos blocs dans les metadata ?

                                          du genre :

                                          
                                          public int quantityDropped(Random par1Random)
                                          {
                                          return 0;
                                          }
                                          
                                          public int getRenderBlockPass()
                                          {
                                          return 0;
                                          }
                                          
                                          public boolean isOpaqueCube()
                                          {
                                          return false;
                                          }
                                          
                                          public boolean renderAsNormalBlock()
                                          {
                                          return false;
                                          }
                                          
                                          

                                          Ou tout les propriété lister ici : Customiser votre bloc ?

                                          Merci de vos réponse !

                                          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 fontions qui n’ont pas “int metadata”, “World world, int x, int y, int z” ou “BlockAccess blockaccess, int x, int y, int z” ne peuvent pas être utilisées en metadata.
                                            Pour le drop:

                                            
                                            public ArrayList <itemstack>getBlockDropped(World world, int x, int y, int z, int metadata, int fortune)
                                            {
                                            ArrayList <itemstack>ret = new ArrayList<itemstack>();
                                            
                                            int count = quantityDropped(metadata, fortune, world.rand);
                                            for(int i = 0; i < count; i++)
                                            {
                                            int id = idDropped(metadata, world.rand, fortune);
                                            if (id > 0)
                                            {
                                            ret.add(new ItemStack(id, 1, damageDropped(metadata)));
                                            }
                                            }
                                            return ret;
                                            }
                                            

                                            Pour le rendu, c’est dans la classe du render qu’il faut check le metadata et faire la différence.</itemstack></itemstack></itemstack>


                                            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
                                            • 1
                                            • 2
                                            • 3
                                            • 1 / 3
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB