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

    Résolu Activation de bloc + permission commande op

    1.7.x
    1.7.10
    3
    27
    3898
    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.
    • Benjamin Loison
      Benjamin Loison dernière édition par

      ​package fr.altiscraft.altiscraft.common;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import fr.altiscraft.altiscraft.proxy.ClientProxy;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.item.ItemStack;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.World;
      import net.minecraftforge.common.util.ForgeDirection;
      
      public class BlocBarriereFerme extends Block {
      protected BlocBarriereFerme() {
      super(Material.ground);
      }
      
      public boolean hasTileEntity(int metadata) {
      return true;
      }
      
      public TileEntity createTileEntity(World world, int metadata) {
      return new TileEntityBarriereFerme();
      }
      
      public boolean isOpaqueCube() {
      return false;
      }
      
      public boolean renderAsNormalBlock() {
      return false;
      }
      
      public boolean onBlockActivated(World world, int i, int j, int k, int l) {
      return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereOuverte, 0, 2);
      }
      
      @SideOnly(Side.CLIENT)
      public int getRenderType() {
      return ClientProxy.tesrRenderId;
      }
      
      public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) {
      if (stack.getItemDamage() == 0) {
      TileEntity tile = world.getTileEntity(x, y, z);
      if ((tile instanceof TileEntityBarriereFerme)) {
      int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 0x3;
      ((TileEntityBarriereFerme) tile).setDirection((byte) direction);
      }
      }
      }
      
      public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) {
      if (((axis == ForgeDirection.UP) || (axis == ForgeDirection.DOWN)) && (!world.isRemote)
      && (world.getBlockMetadata(x, y, z) == 0)) {
      TileEntity tile = world.getTileEntity(x, y, z);
      if ((tile instanceof TileEntityBarriereFerme)) {
      TileEntityBarriereFerme tileBarriere = (TileEntityBarriereFerme) tile;
      byte direction = tileBarriere.getDirection();
      direction = (byte) (direction + 1);
      if (direction > 3) {
      direction = 0;
      }
      tileBarriere.setDirection(direction);
      return true;
      }
      }
      return false;
      }
      
      public ForgeDirection[] getValidRotations(World world, int x, int y, int z) {
      return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] { ForgeDirection.UP, ForgeDirection.DOWN }
      : ForgeDirection.VALID_DIRECTIONS;
      }
      }
      

      Mais même avec le onBlockActivated lorsque je clique droit le bloc ne se change pas en autre bloc et comment faire éxécuter au joueur une commande avec la permission d’op ?

      >! Développeur de Altis-Life (Arma III) sur Minecraft !
      >! Site web     : https://lemnoslife.com
      TeamSpeak : ts.lemnoslife.com

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

        @'Benjamin:

        1. Mais même avec le onBlockActivated lorsque je clique droit le bloc ne se change pas en autre bloc
        2. et comment faire éxécuter au joueur une commande avec la permission d’op ?
        1. car la bonne méthode c’est :
        public boolean onBlockActivated(World world, int i, int j, int k, int l, float hitX, float hitY, float hitZ) {
        return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereOuverte, 0, 2);
        }
        
        1. ça dépend de la commande

        Par contre attention avec sur nombre demande d’aide, tu es en train d’abuser …

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

          Voici ma nouvelle classe :

          ​package fr.altiscraft.altiscraft.common;
          
          import cpw.mods.fml.relauncher.Side;
          import cpw.mods.fml.relauncher.SideOnly;
          import fr.altiscraft.altiscraft.proxy.ClientProxy;
          import net.minecraft.block.Block;
          import net.minecraft.block.material.Material;
          import net.minecraft.entity.EntityLivingBase;
          import net.minecraft.item.ItemStack;
          import net.minecraft.tileentity.TileEntity;
          import net.minecraft.util.MathHelper;
          import net.minecraft.world.World;
          import net.minecraftforge.common.util.ForgeDirection;
          
          public class BlocBarriereFerme extends Block {
          protected BlocBarriereFerme() {
          super(Material.ground);
          }
          
          public boolean hasTileEntity(int metadata) {
          return true;
          }
          
          public TileEntity createTileEntity(World world, int metadata) {
          return new TileEntityBarriereFerme();
          }
          
          public boolean isOpaqueCube() {
          return false;
          }
          
          public boolean renderAsNormalBlock() {
          return false;
          }
          
          public boolean onBlockActivated(World world, int i, int j, int k, int l, float hitX, float hitY, float hitZ) {
          return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereOuverte, 0, 2);
          }
          
          @SideOnly(Side.CLIENT)
          public int getRenderType() {
          return ClientProxy.tesrRenderId;
          }
          
          public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) {
          if (stack.getItemDamage() == 0) {
          TileEntity tile = world.getTileEntity(x, y, z);
          if ((tile instanceof TileEntityBarriereFerme)) {
          int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 0x3;
          ((TileEntityBarriereFerme) tile).setDirection((byte) direction);
          }
          }
          }
          
          public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) {
          if (((axis == ForgeDirection.UP) || (axis == ForgeDirection.DOWN)) && (!world.isRemote)
          && (world.getBlockMetadata(x, y, z) == 0)) {
          TileEntity tile = world.getTileEntity(x, y, z);
          if ((tile instanceof TileEntityBarriereFerme)) {
          TileEntityBarriereFerme tileBarriere = (TileEntityBarriereFerme) tile;
          byte direction = tileBarriere.getDirection();
          direction = (byte) (direction + 1);
          if (direction > 3) {
          direction = 0;
          }
          tileBarriere.setDirection(direction);
          return true;
          }
          }
          return false;
          }
          
          public ForgeDirection[] getValidRotations(World world, int x, int y, int z) {
          return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] { ForgeDirection.UP, ForgeDirection.DOWN }
          : ForgeDirection.VALID_DIRECTIONS;
          }
          }
          

          Mais toujours aucun changement lorsque je clique droit dessus strictement rien ne se passe…

          Et pour la commande en faite je voudrais faire un GUI avec deux boutons un qui redirige vers l’enderchest (et j’avais donc pensé à l’utilisation de la commande en op de /enderchest mais je viens de remarquer qu’on peut faire autrement du coup une fonction à me donner pour l’ouverture de l’enderchest ?) et un qui fait une commande joueur normal que je sais faire.

          Et désolé de vous demandez beaucoup de choses mais maintenant je me sens plus à l’aise dans le java grace à vous encore merci et je vais me calmer sur les sujets désolé…

          >! Développeur de Altis-Life (Arma III) sur Minecraft !
          >! Site web     : https://lemnoslife.com
          TeamSpeak : ts.lemnoslife.com

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

            ah autant pour moi, il manque encore l’argument EntityPlayer player.
            Le plus simple c’est de regarder dans la classe Block.java pour avoir les arguments exacts. Tu peux aussi mettre l’annotation @Override au dessus de la méthode, Eclipse mettra une erreur si la méthode n’existe pas dans la classe mère.

            Pour l’ouverture de l’enderchest en effet pas besoin de passer par une commande qui vient d’un plugin en plus (vive le gros bordel) tu peux utiliser directement player.displayEnderChest() ou un truc du genre.

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

              Balise résolu ?

              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
              • Benjamin Loison
                Benjamin Loison dernière édition par

                Non pas encore même pour mes autres posts… Et après on touche à ma réputation…

                >! Développeur de Altis-Life (Arma III) sur Minecraft !
                >! Site web     : https://lemnoslife.com
                TeamSpeak : ts.lemnoslife.com

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

                  C’est bon j’ai réussi :

                  ​    public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                      {
                      return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                      }
                  

                  mais j’aimerais faire qu’un autre bloc se mette 2 bloc en dessous de celui-ci et sinon j’aimerais faire que le setBlock respecte la direction du bloc initial comment faire ?

                  >! Développeur de Altis-Life (Arma III) sur Minecraft !
                  >! Site web     : https://lemnoslife.com
                  TeamSpeak : ts.lemnoslife.com

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

                    public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                    {
                    return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                    
                    return world.setBlock(i, j - 2, k, ModAltisCraft.BlocBarriereFerme, 0, 2); // deuxième bloc
                    }
                    

                    Et pour la direction ça dépend de si tu utilises le metadata ou un tile entity pour la direction.

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

                      TileEntity comment faire alors ? ps: Thanks pour ta réponse 😄

                      EDIT : J’ai un autre problème lorsque je met ça :

                      ​    public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                          {
                          return world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                      
                          return world.setBlock(i, j - 2, k, Blocks.air, 0, 2);
                          }
                      

                      Eclipse me dit : Unreachable code :S et en le lançant ça veut mais quand je clique droit sur le bloc en jeu ça plante voici le crash-report : http://pastebin.com/4AE141i2

                      >! Développeur de Altis-Life (Arma III) sur Minecraft !
                      >! Site web     : https://lemnoslife.com
                      TeamSpeak : ts.lemnoslife.com

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

                        Apprends le java : tu as 2 “return”.

                        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
                        • Benjamin Loison
                          Benjamin Loison dernière édition par

                          Oui je sais c’est robin qui m’a dit de faire ça je me disais bien que j’avais lu que c’était pas possible mais bon peut-être que FML aurait changé pour que ça marche ^^ des idées sinon ?

                          >! Développeur de Altis-Life (Arma III) sur Minecraft !
                          >! Site web     : https://lemnoslife.com
                          TeamSpeak : ts.lemnoslife.com

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

                            FML ne peut pas changer la java…

                            La méthode onBlockActivated te demande un booléen, si tu retourne true, il y aura une animation sur le bras du joueur et ce qui est dans la main du joueur de sera pas activé. Ton code plante car ton code ne peut pas être compilé, il faut mettre un seul return. Je te conseille personnellement de ne pas mettre le world.setBlock dans le block return.

                            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
                            • Benjamin Loison
                              Benjamin Loison dernière édition par

                              Oui mais c’est ce que je désire de faire que deux setBlock soit éxécuté :S

                              >! Développeur de Altis-Life (Arma III) sur Minecraft !
                              >! Site web     : https://lemnoslife.com
                              TeamSpeak : ts.lemnoslife.com

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

                                public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                                {
                                world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                                world.setBlock(i, j - 2, k, ModAltisCraft.BlocBarriereFerme, 0, 2); // deuxième bloc
                                return true;
                                }
                                

                                Une fois de plus je vais trop vite x)

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

                                  Ok merci ça marche mais comment faire respecter comme c’est un TileEntity la direction ? et aussi dans le setBlock ? 😕

                                  >! Développeur de Altis-Life (Arma III) sur Minecraft !
                                  >! Site web     : https://lemnoslife.com
                                  TeamSpeak : ts.lemnoslife.com

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

                                    Les paramètres te donnent accès aux coordonnées de ton block, le joueur qui a cliqué, le côté cliqué ainsi que l’endroit précis avec des float. Je vois pas ce qu’il te manque, si ta direction est gérée avec les metadatas tu peux le récupérer en faisant world.getBlockMetadata(x,y,z). Si çà passe par la TileEntity, il faudra faire world.getTileEntity(x,y,z) et récupérer ta variable.

                                    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
                                    • Benjamin Loison
                                      Benjamin Loison dernière édition par

                                      Mon bloc marche avec les TileEntity et je ne souhaite pas ça mais récupéré le sens de la barrière (ex: vers le nord) et pouvoir la mettre baissé toujours vers le nord 😕 mais je ne trouve vraiment pas…

                                      Et je ne comprends pas comment tu peux te servir de ça world.getTileEntity(x,y,z) pour résoudre mon problème :S

                                      >! Développeur de Altis-Life (Arma III) sur Minecraft !
                                      >! Site web     : https://lemnoslife.com
                                      TeamSpeak : ts.lemnoslife.com

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

                                        public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                                        {
                                        TileEntity tile = world.getTileEntity(i, j, k);
                                        if(tile instanceof TonTileEntity)
                                        {
                                        int direction = ((TonTileEntity)tile).getDirection();
                                        world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                                        TileEntity tile2 = world.getTileEntity(i, j, k);
                                        if(tile2 instanceof TonTileEntityAssociéAuBlockBlocBarriereFerme)
                                        {
                                        ((TonTileEntityAssociéAuBlockBlocBarriereFerme)tile2).setDirection(direction);
                                        }
                                        world.setBlock(i, j - 2, k, ModAltisCraft.BlocBarriereFerme, 0, 2); // deuxième bloc
                                        TileEntity tile3 = world.getTileEntity(i, j -2, k);
                                        if(tile3 instanceof TonTileEntityAssociéAuBlockBlocBarriereFerme)
                                        {
                                        ((TonTileEntityAssociéAuBlockBlocBarriereFerme)tile3).setDirection(direction);
                                        }
                                        }
                                        return true;
                                        }
                                        

                                        Franchement c’est pas compliqué …

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

                                          😕 mais maintenant j’ai plus dûr c’est que je veux qu’un setBlock soit en fonction de la direction et ça j’ai essayé pleins de trucs sans résulats :

                                          ​ public boolean onBlockActivated(World world, int i, int j, int k, EntityPlayer p_149727_5_, int p_149727_6_, float p_149727_7_, float p_149727_8_, float p_149727_9_)
                                              {
                                                  TileEntity tile = world.getTileEntity(i, j, k);
                                                  if(tile instanceof TileEntityBarriereOuverte)
                                                  {
                                                      byte direction = ((TileEntityBarriereOuverte)tile).getDirection();
                                                 world.setBlock(i, j, k, ModAltisCraft.BlocBarriereFerme, 0, 2);
                                                      TileEntity tile2 = world.getTileEntity(i, j, k);
                                                      if(tile2 instanceof TileEntityBarriereFerme)
                                                      {
                                                            ((TileEntityBarriereFerme)tile2).setDirection(direction);
                                                       world.setBlock(i, j + 1, k, ModAltisCraft.BlocI, 0, 2);
                                                      }
                                                 world.setBlock(i, j + 2, k, ModAltisCraft.BlocI, 0, 2);
                                                 world.setBlock(i, j, k + 1, ModAltisCraft.BlocI, 0, 2);
                                                  }
                                                  return true;
                                              }
                                          

                                          J’aimerais faire que ce soit le dernier setBlock qui se mette toujours un bloc devant tout en restant dans l’axe du bloc 🙂
                                          Merci d’avance,

                                          >! Développeur de Altis-Life (Arma III) sur Minecraft !
                                          >! Site web     : https://lemnoslife.com
                                          TeamSpeak : ts.lemnoslife.com

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

                                            Dans ce cas en fonction de la direction tu dois le placer à un endroit différent.

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB