MFF

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

    Problème onBlockDestroyed

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    19 Messages 5 Publieurs 4.6k 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.
    • SCAREXS Hors-ligne
      SCAREX
      dernière édition par

      J’ai supposé que ce que tu voulais faire c’était créer une hache qui détruit tous les blocs autour du bloc détruit, voici ce à quoi je suis arrivé :

      
      public class SuperAxe extends ItemAxe
      {
      private static final String name = "superAxe";
      
      protected SuperAxe() {
      super(ToolMaterial.EMERALD);
      GameRegistry.registerItem(this, name);
      setUnlocalizedName(ST18.MODID + "_" + name);
      setCreativeTab(CreativeTabs.tabTools);
      }
      
      public static String getName() {
      return name;
      }
      
      @Override
      public boolean onBlockDestroyed(ItemStack stack, World worldIn, Block blockIn, BlockPos pos, EntityLivingBase playerIn) {
      if (!worldIn.isRemote && playerIn instanceof EntityPlayer) {
      worldIn.destroyBlock(pos, true);
      destroyNearWood(worldIn, pos, stack, playerIn, stack.getMaxDamage() - stack.getItemDamage());
      stack.damageItem(1, playerIn);
      if (stack.stackSize <= 0 || stack.getItemDamage() >= stack.getMaxDamage()) ((EntityPlayer) playerIn).destroyCurrentEquippedItem();
      }
      return true;
      }
      
      public int destroyNearWood(World world, BlockPos pos, ItemStack stack, EntityLivingBase player, int maxBlocks) {
      if (world.getBlockState(pos.up()).getBlock().isWood(world, pos.up())) {
      if (–maxBlocks > 0) {
      world.destroyBlock(pos.up(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.up(), stack, player, maxBlocks);
      }
      }
      if (world.getBlockState(pos.down()).getBlock().isWood(world, pos.down())) {
      if (--maxBlocks > 0) {
      world.destroyBlock(pos.down(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.down(), stack, player, maxBlocks);
      }
      }
      if (world.getBlockState(pos.east()).getBlock().isWood(world, pos.east())) {
      if (--maxBlocks > 0) {
      world.destroyBlock(pos.east(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.east(), stack, player, maxBlocks);
      }
      }
      if (world.getBlockState(pos.west()).getBlock().isWood(world, pos.west())) {
      if (--maxBlocks > 0) {
      world.destroyBlock(pos.west(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.west(), stack, player, maxBlocks);
      }
      }
      if (world.getBlockState(pos.north()).getBlock().isWood(world, pos.north())) {
      if (--maxBlocks > 0) {
      world.destroyBlock(pos.north(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.north(), stack, player, maxBlocks);
      }
      }
      if (world.getBlockState(pos.south()).getBlock().isWood(world, pos.south())) {
      if (--maxBlocks > 0) {
      world.destroyBlock(pos.south(), true);
      stack.damageItem(1, player);
      maxBlocks = destroyNearWood(world, pos.south(), stack, player, maxBlocks);
      }
      }
      return maxBlocks;
      }
      }
      
      

      NOTE : ce code est pour la 1.8 mais si tu es en 1.7 tu pourras tout de même l’utiliser en changeant quelques valeus.

      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
      • 2 Hors-ligne
        20cents34
        dernière édition par

        Merci, tu supposais bien c’était mon intention 🙂 Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code.

        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

          up -> y + 1
          down -> y - 1
          south -> x + 1
          north -> x - 1
          est -> z + 1
          west -> z - 1
          (de tête, pas sûr).

          1 réponse Dernière réponse Répondre Citer 0
          • 2 Hors-ligne
            20cents34
            dernière édition par

            J’ai essayé le code de Robin4002 mais j’ai une erreur sur

            this.dropBlockAsItem(world, x, y - 1, z, new ItemStack(Item.getItemFromBlock(b), 1, meta));
            

            Eclipse me dis que dropBlockAsItem est indéfinie pour ma classe.
            Et Eclipse ne trouve pas non plus player ici

            this.cutWood(world, x, y, z, player.inventory.getCurrentItem(), player);
            
            
            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

              ​
              private void dropBlockAsItem(World world, int x, int y, int z, ItemStack stack)
              {
              if(!world.isRemote && world.getGameRules().getGameRuleBooleanValue("doTileDrops"))
              {
              float f = 0.7F;
              double d0 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
              double d1 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
              double d2 = world.rand.nextFloat() * f + (1.0F - f) * 0.5D;
              EntityItem entityitem = new EntityItem(world, x + d0, y + d1, z + d2, stack);
              entityitem.delayBeforeCanPickup = 10;
              world.spawnEntityInWorld(entityitem);
              }
              }
              

              Il manquant cette fonction.

              1 réponse Dernière réponse Répondre Citer 0
              • 2 Hors-ligne
                20cents34
                dernière édition par

                Merci mais j’ai toujours le problème du player. En gros il me le trouve pas et me propose de créer une variable.

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

                  Ajoutes cette variable dans ta méthode
                  EntityPlayer entityplayer = (EntityPlayer)player;

                  1 réponse Dernière réponse Répondre Citer 0
                  • 2 Hors-ligne
                    20cents34
                    dernière édition par

                    J’ai une erreur sur le cast : (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

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

                      @‘20cents34’:

                      Merci, tu supposais bien c’était mon intention 🙂 Sinon l’équivalent de BlockPos en 1.7.10 est x,y,z mais je vois pas trop comment faire pour adapter ton code . Surtout les fonctions pos.south() etc… A moins que pos.up() ) soit égale à y+1 , pos.down() à y -1 mais alors je vois pas se que peut représenter pos.north() et pos.south(). Bref si tu as une idée donne la moi sinon je mettrais mon mod à jour. Et encore merci pour le code.

                      BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                      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
                      • 2 Hors-ligne
                        20cents34
                        dernière édition par

                        Euh non eclipse le trouve nul part et je suis en 1.7.10

                        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

                          @‘20cents34’:

                          J’ai une erreur sur le cast :  (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

                          C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.

                          @‘SCAREX’:

                          BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                          Non, elle n’existe pas en 1.7.10

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

                            @‘robin4002’:

                            @‘20cents34’:

                            J’ai une erreur sur le cast :  (EntityPlayer)player et onBlockDestroyed me demande un return non présent dans le code de robin4002.

                            C’est de ma faute, j’ai édité mon message, maintenant ça devrait être bon.

                            @‘SCAREX’:

                            BlockPos est une classe qui existait déjà avant la 1.8, il te suffit donc de faire BlockPos pos = new BlockPos(x,y,z); et le reste sera adapté, dont le pos.south() etc.

                            Non, elle n’existe pas en 1.7.10

                            Effectivement mais le principe est le même que ce que robin disait, tu fait x + 1 (east) puis x - 1 (west) puis z + 1 (south) puis z - 1 (north) puis y + 1 (up) (puis y - 1 (down) si tu veux aller vers le bas)

                            Je peux vite fait adapter le code si tu veux pour la 1.7 ?

                            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
                            • 2 Hors-ligne
                              20cents34
                              dernière édition par

                              Merci a tous et surtout à robin4002 ça marche parfaitement maintenant  🙂

                              Ça ira merci SCAREX j’utiliserai ton code quand je passerai en 1.8.

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

                              MINECRAFT FORGE FRANCE © 2024

                              Powered by NodeBB