MFF

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

    Ajouter un rendu avancé à votre bloc via TESR

    Planifier Épinglé Verrouillé Déplacé Les blocs
    1.7.x
    109 Messages 23 Publieurs 38.6k Vues 3 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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Je ne sais pas si tu es en 1.8 et que je parle en vain mais dans ta classe normalement tu peux déclarer tes items à la suite comme les blocs.

      Exemple:

      public static Item truc, bidule, machine, chose, autre, trololo, voila, fini;
      

      Si tu veux les trier tu as juste à sauter une ligne après une virgule et continuer à déclarer.

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

        @‘Toutoune1008’:

        Je ne sais pas si tu es en 1.8 et que je parle en vain mais dans ta classe normalement tu peux déclarer tes items à la suite comme les blocs.

        Exemple:

        public static Item truc, bidule, machine, chose, autre, trololo, voila, fini;
        

        Si tu veux les trier tu as juste à sauter une ligne après une virgule et continuer à déclarer.

        Je suis en 1.7.2,  je sais que l’on peut les déclarer avec des virgule mais je mis retrouve mieux comme sa XD ^^ , merci quand même 😉

        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 viens de comprendre pourquoi j’arrivais pas à voir la première balise sur mon téléphone et que Firefox me disait que le script de formatage était long à exécuter. J’ai carrément le même problème sur pc …
          Je viens de modifier ton message, j’ai copier ton code sur eclipse, mit un gris coup de formatage puis recollé le code.
          Sérieusement ton code était illisible avec ces espaces de partout. Et même maintenant encore, ta classe a trop de chose, faudrait que tu divises le code pour être plus lisible et mieux organisé.

          Du-coup je viens de vérifier ta classe principale, il manque la ligne proxy.registerRenderInformation(); dans la fonction init. Sans cette ligne ta fonction registerRenderInformation n’est jamais appelé …

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

            @‘robin4002’:

            Je viens de comprendre pourquoi j’arrivais pas à voir la première balise sur mon téléphone et que Firefox me disait que le script de formatage était long à exécuter. J’ai carrément le même problème sur pc …
            Je viens de modifier ton message, j’ai copier ton code sur eclipse, mit un gris coup de formatage puis recollé le code.
            Sérieusement ton code était illisible avec ces espaces de partout. Et même maintenant encore, ta classe a trop de chose, faudrait que tu divises le code pour être plus lisible et mieux organisé.

            Du-coup je viens de vérifier ta classe principale, il manque la ligne proxy.registerRenderInformation(); dans la fonction init. Sans cette ligne ta fonction registerRenderInformation n’est jamais appelé …

            Ha Oui X), Merci sa marche Beaucoup Mieux :), par contre dans l’inventaire sa me met un carrer noir et violet tu sais d’ou sa vient ^^ ?

            1 réponse Dernière réponse Répondre Citer 0
            • FolganskyF Hors-ligne
              Folgansky Correcteurs
              dernière édition par

              C’est tout simplement qu’il y a un problème avec la texture qui n’est pas trouvé et donc c’est celle par défaut que tu vois (carré tout moche mais significatif).
               Dans la classe TESR du bloc en question tu dois avoir:

              public static ModelTonModel model = new ModelTonModel();
              
              public static ResourceLocation texture = new ResourceLocation("ModTonMod:textures/models/blocks/NomDelaTexture.png");
              
              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

                Non, si ça fonctionne dans le monde ce n’est pas la texture le problème … Et si c’était la texture le problème ça ne serait pas un carré noir et rose mais son modèle en noir et rose.

                Tu as bien suivis cette partie du tutoriel ? http://minecraftforgefrance.fr/showthread.php?tid=1509#classe4

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

                  @‘robin4002’:

                  Non, si ça fonctionne dans le monde ce n’est pas la texture le problème … Et si c’était la texture le problème ça ne serait pas un carré noir et rose mais son modèle en noir et rose.

                  Tu as bien suivis cette partie du tutoriel ? http://minecraftforgefrance.fr/showthread.php?tid=1509#classe4

                  Je Pensait que oui, mais en faite en vérifiant mes class je me suis apperçus que j’avais pas remplacer 0 par ProxyClient.tesrRenderId dans la class TESRinvRender dans la fonction getRenderId ^^ donc voila tout est régler merci de ton aide 😉

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

                    Salut robin, super bon tuto, mais mon bloc fait plus d’un bloc de haut, et je ne peux le sélectionner que quand je regarde vers le bas (donc comme si c’était un bloc normal)… pourtant ma méthode setBlockBoundsBasedOnState comporter en 5e valeur 1.6F

                    EDIT :

                    Enfaite j’ai l’impression qu’il n’y a que la texture qui fait 2 blocs, quand je pose un bloc dessus (d’ailleurs je ne peux pas directement il faut que je pose des blocs adjacents), c’est comme si mon bloc faisait 1 de haut

                    Mes tutos :

                    >! Un item mangeable
                    [url=http://www.minecraftforgefranc…

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

                      Il y a un autre bloc dans Minecraft qui fait 2 blocs de haut : la porte.

                      Regarde le code dans la classe BlockDoor, tu y trouvera surement la réponse.

                      >! Bonjour/Bonsoir,
                      >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

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

                        @‘UnknowOrigin’:

                        Il y a un autre bloc dans Minecraft qui fait 2 blocs de haut : la porte.

                        Regarde le code dans la classe BlockDoor, tu y trouvera surement la réponse.

                        Déjà essayé, j’ai fini même pas copier-coller le contenus de la classe BlockDoor, rien ne marche
                        par contre on peut remarquer que la porte est enfaîte deux blocs posés l’un sur l’autre, il faut surement que je m’oriente vers ceci

                        Mes tutos :

                        >! Un item mangeable
                        [url=http://www.minecraftforgefranc…

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

                          C’est exactement ce qu’a dit UnknownOrigin, tu ne peux aps copier le code de la porte car il est très brouillon et incompréhensible. Tout ce que tu as à faire c’est créer un block avec 2 metadatas, le premier aura le rendu du model, l’autre ne fera que créer une hibtox. Lorsque le premier block est posé, tu poses un autre block comme pour le lit juste au-dessus avec le 2ème métadata.

                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                          Pas de demandes de support par MP ni par skype SVP.
                          Je n'accepte sur skype que l…

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

                            @‘SCAREX’:

                            C’est exactement ce qu’a dit UnknownOrigin, tu ne peux aps copier le code de la porte car il est très brouillon et incompréhensible. Tout ce que tu as à faire c’est créer un block avec 2 metadatas, le premier aura le rendu du model, l’autre ne fera que créer une hibtox. Lorsque le premier block est posé, tu poses un autre block comme pour le lit juste au-dessus avec le 2ème métadata.

                            Merci je vais essayer

                            Mes tutos :

                            >! Un item mangeable
                            [url=http://www.minecraftforgefranc…

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

                              Si tu n’y arrives pas, je pourrais t’envoyer un code demain

                              Site web contenant mes scripts : http://SCAREXgaming.github.io

                              Pas de demandes de support par MP ni par skype SVP.
                              Je n'accepte sur skype que l…

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

                                @‘SCAREX’:

                                Si tu n’y arrives pas, je pourrais t’envoyer un code demain

                                En effet je veux bien, car là je suis complètement perdu avec tous ces func je ne comprends rien

                                Mes tutos :

                                >! Un item mangeable
                                [url=http://www.minecraftforgefranc…

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

                                  Je te l’envoi demain car là je suis un peu occupé

                                  Site web contenant mes scripts : http://SCAREXgaming.github.io

                                  Pas de demandes de support par MP ni par skype SVP.
                                  Je n'accepte sur skype que l…

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

                                    @‘SCAREX’:

                                    Je te l’envoi demain car là je suis un peu occupé

                                    Pas de problème merci

                                    Mes tutos :

                                    >! Un item mangeable
                                    [url=http://www.minecraftforgefranc…

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

                                      Je suis curieux de voir ça ! Car je suis comme toi MrCup… Je n’ai jamais trouvé… Tout ce que je savais, c’est que c’était lié au bloc de porte.

                                      >! Bonjour/Bonsoir,
                                      >! Vous désirez un Modèle ou une Texture pour votre Mod ? Vous pouvez faire un…

                                      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 l’ai déjà dit plusieurs fois sur le forum. Minecraft n’est pas fait pour gérer des blocs plus grand que 1x1x1. Il peut gérer des blocs plus petit mais pas plus grand.
                                        Imaginons que votre bloc fait 2 en hauteur et qu’il se trouve aux coordonnées x, y, z = 0,64,0
                                        Lorsque vous allez placer le curseur sur le bloc qui se trouve aux coordonnées x, y, z = 0,64,0 c’est la fonction world.getBlock(0, 64, 0).getCollisionBoundingBox(world, 0, 64, 0) qui va être appelé, ce qui revient à votreBlock.getCollisionBoundingBox(world, 0, 64, 0) et donc une collision de 1x2x1 va être affiché.
                                        En revanche, quand vous allez placer le curseur sur le bloc qui se trouve aux coordonnées x, y, z = 0, 65, 0 c’est la fonction world.getBlock(0, 65, 0).getCollisionBoundingBox(world, 0, 65, 0) qui va être appelé (même fonction mais pas avec les même arguments), ce qui sera l’équivalent de Blocks.air.getCollisionBoundingBox(world, 0, 65, 0) et ce qui va donc renvoyer une boite de collision null (et donc rien ne va être affiché)

                                        Ce comportement est tout à fait normal, pour gérer des blocs plus grand que 1x1x1 il aurait fallut faire des boucle for et vérifier tous les blocs autours (la boucle doit être aussi grande que la taille maximum d’un bloc). Je vous laisse imaginer l’impacte que cela aurait sur les performances du jeu (déjà que Java est un vrai bouffe CPU, Minecraft lui-même l’est aussi et gère mal le multicore alors avec ça en plus …).

                                        La solution est (comme SCAREX l’a dit), de faire comme la porte.
                                        En gros le principe de la porte est le suivant :
                                        Lorsque le joueur pose la porte, un bloc de metadata de 0 à 7 est posé. Les 4 premiers (0,1,2,3) sont utilisés pour la direction de la porte simple ou de la première porte. Les 4 suivants (4,5,6,7) sont utilisés  pour la direction d’une seconde porte placé à côté. Ensuite un bloc de metadata 8 est placé au dessus du premier bloc.
                                        Il y a donc deux blocs qui ont chacun une collision de 1x1x1.
                                        Si le bloc de metadata 8 est détruit, on ne drop rien et on détruit en même temps le bloc qui se trouve en dessous.
                                        Si un bloc de metadata 0 à 7 est détruit, on drop une porte et on détruit le bloc au dessus.

                                        Il suffit de reprendre le même principe mais avec seulement deux metadatas (le bloc du bas et le bloc du haut).
                                        Après on peut améliorer ça. En effet les portes ont un box de 1x1x1. Si vous passer la souris sur le bloc du haut celui du bas n’est pas sélectionné et l’inverse est aussi vrai. On peut faire que dans le code qui gère la collision que si le bloc du bas est sélectionné alors on affiche une box de collision de 1x2x1 (dépassant de 1 vers le haut) et afficher une box de 1x2x1 (dépassant de 1 vers le bas) si le bloc du haut est sélectionné.

                                        Démonstration :
                                        https://github.com/FFMT/Privatizer/blob/master/privatizer_src/fr/mcnanotech/privatizer/common/BlockPrivateDoor.java
                                        metadata 0 : private door du bas
                                        metadata 1 : private door du haut
                                        metadata 2 : pas encore utilisé, prévu pour une autre porte
                                        metadata 3 : pas encore utilisé, prévu pour une autre porte
                                        metadata 4 : password door du bas
                                        metadata 5 : password door du haut
                                        (contrairement à mc j’utilise une entité de bloc sur le bloc 0, 2 et 4 pour sauvegarder la direction et si elle est double ou non, c’est pour ça que je peux mettre plusieurs portes sur le même bloc).

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

                                          Voici un exemple possible :

                                          public class BlockShower extends Block
                                          {
                                          protected BlockShower() {
                                          super(Material.glass);
                                          this.setHardness(0.5F);
                                          this.setResistance(2.0F);
                                          
                                          this.register();
                                          }
                                          
                                          @Override
                                          public boolean canPlaceBlockAt(World world, int x, int y, int z) {
                                          return super.canPlaceBlockAt(world, x, y, z) && world.isAirBlock(x, y + 1, z); // On verifie que le block du dessus est libre pour placer notre deuxième block
                                          }
                                          
                                          @Override
                                          public TileEntity createTileEntity(World world, int metadata) {
                                          return taTilEntity; // pour le rendu
                                          }
                                          
                                          @Override
                                          public int getRenderType() {
                                          return ClientProxy.RENDER_ID; // Pour le rendu
                                          }
                                          
                                          @Override
                                          public boolean hasTileEntity(int metadata) {
                                          return true; // Pour le rendu
                                          }
                                          
                                          @Override
                                          public boolean isOpaqueCube() {
                                          return false; // Pour le rendu
                                          }
                                          
                                          @Override
                                          public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) {
                                          if (meta != 4) { // Si c'est le block du dessous
                                          if (world.getBlock(x, y + 1, z) == this) world.setBlockToAir(x, y + 1, z); // On casse le block du dessus
                                          } else {
                                          if (world.getBlock(x, y - 1, z) == this) world.setBlockToAir(x, y - 1, z); // Sinon on casse celui du dessous
                                          }
                                          }
                                          
                                          @Override
                                          public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
                                          int direction = MathHelper.floor_double(entity.rotationYaw * 4.0F / 360.0F + 2.5D) & 3;
                                          world.setBlockMetadataWithNotify(x, y, z, direction, 2); // (Mon block avait une direction)
                                          world.setBlock(x, y + 1, z, tonBlock, 4, 2); // On place le deuxième block
                                          }
                                          
                                          @Override
                                          public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
                                          int meta = world.getBlockMetadata(x, y, z);
                                          if (world.getBlock(x, y + (meta == 4 ? -1 : 1), z) != this) this.onBlockHarvested(world, x, y, z, meta, null); // Lors de la mise à jour, si le block du dessus ou du dessous n'est pas le notre, on casse le block
                                          }
                                          
                                          @Override
                                          public boolean renderAsNormalBlock() {
                                          return false; // Pour le rendu
                                          }
                                          }
                                          

                                          Si tu veux créer un cadre noir (les traits noirs autour du block que l’on pointe et non la hitbox) de plus d’un block, tu peux utiliser la méthode getSelectedBoundingBoxFromPool ou setBlockBoundsBasedOnState

                                          Pour la hitbox, il faut utiliser addCollisionBoxesToList ou setBlockBoundsBasedOnState

                                          Site web contenant mes scripts : http://SCAREXgaming.github.io

                                          Pas de demandes de support par MP ni par skype SVP.
                                          Je n'accepte sur skype que l…

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

                                            Merci de vos réponses Robin et Scarex, malheureusement ce soir les études sont passés devant, j’essayerai demain 😉

                                            Envoyé de mon SM-G900F en utilisant Tapatalk

                                            Mes tutos :

                                            >! Un item mangeable
                                            [url=http://www.minecraftforgefranc…

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

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB