• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Résolu Block "Trappe"

    1.7.x
    1.7.10
    4
    10
    1687
    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.
    • LavaPower
      LavaPower dernière édition par

      Salut,

      Après le marteau, j’aimerai aussi créer un bloc “trappe” qui “s’ouvre” quand on fait click droit. J’ai créé ceci :

      package com.mod.androria.blocks;
      
      import com.mod.androria.Reference;
      import com.trcgames.dbSynchronizer.DatabaseGetter;
      import com.trcgames.dbSynchronizer.database.DBFolder;
      import com.trcgames.dbSynchronizer.database.Database;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.init.Blocks;
      import net.minecraft.world.World;
      
      public class Tappe extends Block
      {
      
          public Tappe(Material mat)
          {
              super(mat);
              setHardness(2.0F);
              setResistance(5.0F);
              setBlockTextureName(Reference.MOD_ID + ":trappe");
              // TODO Auto-generated constructor stub
          }
      
          @Override
          public boolean isOpaqueCube()
          {
              return false;
          }
      
          @SideOnly(Side.CLIENT)
          public int getRenderBlockPass()
          {
              return 0;
          }
      
          /**
           * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
           */
          public boolean renderAsNormalBlock()
          {
              return false;
          }
      
          public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
          {
              if(!world.isRemote)
              {
                  if(this.getBlockBoundsMinX() == 0.1F)
                  {
                      setBlockTextureName(Reference.MOD_ID + ":trappe");
                      this.setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
                  }
                  else
                  {
                      setBlockTextureName(Reference.MOD_ID + ":Invisible_Block");
                      this.setBlockBounds(0.1F, 0.1F, 0.1F, 0.2F, 0.2F, 0.2F);
                  }
              }
              return true;
          }
      
      }
      

      Cependant, j’ai deux problèmes :

      • La texture ne se met à jour que si il y a une update (quand on casse un bloc à coté)
      • Quand on faire click droit sur un bloc pour réduire sa boite de collision pour passer, tous les autres bloc voient leur boite de collision réduite

      Merci beaucoup d’avance !

      Github : http://github.com/LavaPower

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

        Salut,
        Il faudrait plutôt un bloc avec deux metadatas, un metadata pour l’état ouvert et l’autre pour l’état fermé.
        Et ensuite dans ta fonction onBlockActivated change le metadata (avec un world.setBlock(x, y, z, this, metadata, 3) ; )

        1 réponse Dernière réponse Répondre Citer 0
        • LavaPower
          LavaPower dernière édition par

          Je vais essayer

          Edit :
          Mon code :

          public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
              {
                  if(this.getDamageValue(world, x, y, z) == 1)
                  {
                      world.setBlock(x, y, z, this, 0, 3);
                      setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F);
                  }
                  else
                  {
                      world.setBlock(x, y, z, this, 1, 3);
                      setBlockBounds(0.1F, 0F, 0.1F, 0.2F, 0.1F, 0.1F);
                  }
                  return true;
              }
          

          Les métadatas fonctionne mais dès que je trouche au BlockBounds c’est tous les blocs qui sont modifiés et pas que celui où j’ai fait click droit

          Github : http://github.com/LavaPower

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

            setBlockBounds ne permet pas de définir en fonction du metadata et s’applique sur l’instance du bloc qui est partagé entre tous les blocs.

            Tu devrais plutôt override la fonction getCollision (ou que chose comme ça) qui a world, x, y et z en argument, ce qui te permettra de retourner une collision différente en fonction de world.getMetadata(x, y, z).

            1 réponse Dernière réponse Répondre Citer 0
            • LavaPower
              LavaPower dernière édition par

              Y a que ces trois fonctions dans la classe Block :

              • addCollisionBoxesToList
              • getCollisionBoundingBoxFromPool
              • collisionRayTrace

              EDIT :
              J’ai fait ça :

              
              public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
                  {
                      if(world.getBlockMetadata(x, y, z) == 1)
                      {
                          return AxisAlignedBB.getBoundingBox(0.1, 0, 0.1, 0.2, 0.2, 0.2);
                      }
                      else
                      {
                          return AxisAlignedBB.getBoundingBox(0, 0, 0, 1, 1, 1);
                      }
              
                  }
              
              

              Mais quelque sois le metadata, je peux traverser le bloc 😕

              EDIT² : Je viens de me rendre compte avec un System.out.println que la fonction n’est jamais appelé 😕

              Github : http://github.com/LavaPower

              1 réponse Dernière réponse Répondre Citer 0
              • AymericRed
                AymericRed dernière édition par

                Alors ça veut dire que tu as mal renseigné ses paramètres.
                Esssayes de mettre un @Override dessus, si ça te met une erreur, supprimes celle là, commence à écrire son nom, fais ctrl+space et eclipse te la proposera.

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                1 réponse Dernière réponse Répondre Citer 0
                • LavaPower
                  LavaPower dernière édition par

                  Le @Override ne me signale pas d’erreur 😕
                  Et même avec, toujours aucune collisions avec le bloc

                  Github : http://github.com/LavaPower

                  1 réponse Dernière réponse Répondre Citer 0
                  • Yanis_
                    Yanis_ dernière édition par

                    extends juste BlockTrapdor non ?

                    1 réponse Dernière réponse Répondre Citer 1
                    • AymericRed
                      AymericRed dernière édition par

                      Tu as mis ton sysout où ? Bien au tout début de la fonction avant le if ?

                      Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                      AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                      Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                      Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                      1 réponse Dernière réponse Répondre Citer 0
                      • LavaPower
                        LavaPower dernière édition par

                        @Yanis : Faudrait que je m’intéresse à cette classe
                        @Aymeric : Oui 🙂

                        EDIT : MERCI ! Regarder la classe BlockTrapDoor m’a permis de faire mon truc !
                        Voici le code pour changer la boite de collision en fonction de la métadata :

                        
                        public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
                            {
                                this.setBlockBoundsBasedOnState(world, x, y, z);
                                return super.getCollisionBoundingBoxFromPool(world, x, y, z);
                            }
                        
                            public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
                            {
                                this.setBounds(world.getBlockMetadata(x, y, z));
                            }
                        
                            public void setBounds(int metadata)
                            {
                        
                                if (metadata == 1)
                                {
                                    this.setBlockBounds(0.1F, 0.0F, 0.1F, 0.2F,0.2F, 0.2F);
                                }
                                else
                                {
                                    this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
                                }
                            }
                        
                        

                        Github : http://github.com/LavaPower

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

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB