MFF

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

    Problème de son

    Planifier Épinglé Verrouillé Déplacé Résolu Anciennes versions
    1.6.4
    6 Messages 2 Publieurs 2.4k 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.
    • MugiwaxarM Hors-ligne
      Mugiwaxar
      dernière édition par

      Bonjours à tous !

      Depuis un moment, j’essaye de faire un bloc qui téléporte le joueur à un étage au dessus (en quelque sorte), mais le problème, c’est que ça marche de façon très aléatoire :s
      Quelque fois la téléportation se fait, quelque fois non, défois la téléportation se fait mais le son n’est pas jouer, d’autre fois non, c’est très hasardeux 😞

      Voici mon code:

      
      package com.yvelis.mtpblocks.blocks;
      
      import cpw.mods.fml.common.network.Player;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.util.ChatMessageComponent;
      import net.minecraft.world.World;
      
      public class TpUpBlock extends Block
      {
      
      public TpUpBlock(int id)
      {
      super(id, Material.glass);
      }
      
      public void onEntityWalking(World world, int X, int Y, int Z, Entity entity)
      {
      
      if(!(entity instanceof EntityPlayer))
      return;
      
      EntityPlayer player = (EntityPlayer) entity;
      
      double posY = player.posY;
      boolean locationFound = false;
      
      for (int i = (int) posY; i < 1000 ; i++)
      {
      
      if( world.getBlockId(X, i, Z) != 0 && world.getBlockId(X, i + 1, Z) == 0 && world.getBlockId(X, i + 2, Z) == 0 && world.getBlockId(X, i + 3, Z) == 0)
      {
      player.setPosition(X, i + 3, Z);
      if(!world.isRemote)
      player.worldObj.playSoundAtEntity(player, "mtpblocks:teleport", 1.0F, 1.0F);
      return;
      }
      }
      if(!world.isRemote)
      player.sendChatToPlayer( ChatMessageComponent.createFromText("Aucune destination trouvé pour la téléportation") );
      
      }
      
      }
      
      

      Merci de votre futur aide 🙂

      Mugiwaxar

      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

        Ouch, la boucle for c’est pas une bonne idée du tout. De plus, world.isAirBlock(x, y, z) est à privilégier.

        J’aurai plutôt fait ça :

        package com.yvelis.mtpblocks.blocks;
        
        import cpw.mods.fml.common.network.Player;
        import net.minecraft.block.Block;
        import net.minecraft.block.material.Material;
        import net.minecraft.entity.Entity;
        import net.minecraft.entity.player.EntityPlayer;
        import net.minecraft.util.ChatMessageComponent;
        import net.minecraft.world.World;
        
        public class TpUpBlock extends Block
        {
        
        public TpUpBlock(int id)
        {
        super(id, Material.glass);
        }
        
        public void onEntityWalking(World world, int x, int y, int z, Entity entity)
        {
        if(!(entity instanceof EntityPlayer))
        return;
        
        EntityPlayer player = (EntityPlayer) entity;
        boolean locationFound = false;
        
        int targetY = y;
        while(!world.isAirBlock(x, targetY, z) && targetY < 254)
        {
        targetY++;
        }
        
        if(targetY < 254)
        {
        player.setPosition(x, targetY, y);
        if(!world.isRemote)
        player.worldObj.playSoundAtEntity(player, "mtpblocks:teleport", 1.0F, 1.0F);
        }
        else
        {
        player.sendChatToPlayer( ChatMessageComponent.createFromText("Aucune destination trouvé pour la téléportation") );
        }
        }
        }
        
        1 réponse Dernière réponse Répondre Citer 0
        • MugiwaxarM Hors-ligne
          Mugiwaxar
          dernière édition par

          Le problème avec ce code, c’est que si au dessus il y a plusieurs bloc de suite, le joueur ne serra pas téléporter

          Pourquoi pas de boucle for ?

          Ps: J’ai pris ton code, le problème reste le même 😞

          Ps2: J’ai l’avertissement: “[Avertissement [Minecraft-Server] Player984 moved wrongly!]” qui s’affiche à chaque fois

          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

            @‘Mugiwaxar’:

            Le problème avec ce code, c’est que si au dessus il y a plusieurs bloc de suite, le joueur ne serra pas téléporter

            Comment ça ?

            @‘Mugiwaxar’:

            Pourquoi pas de boucle for ?

            Ps: J’ai pris ton code, le problème reste le même 😞

            Car une boucle for n’est pas approprié pour ça, tu fais beaucoup plus de test que nécessaire (surtout que 1000 c’est plus que les 256 maximum).

            Essaye avec le OnEntityColled et réduit la collision du bloc (regarde le code de la sandStone) il me semble que la fonction onEntityWalking ne fonctionne pas super bien.

            @‘Mugiwaxar’:

            Ps2: J’ai l’avertissement: “[Avertissement [Minecraft-Server] Player984 moved wrongly!]” qui s’affiche à chaque fois

            Il doit pas aimer le setPosition, regarde la fonction pour téléporter, il me semble qu’il y a d’autre code pour prévenir la téléportation.

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

              @‘robin4002’:

              @‘Mugiwaxar’:

              Le problème avec ce code, c’est que si au dessus il y a plusieurs bloc de suite, le joueur ne serra pas téléporter

              Comment ça ?

              Avec ce code, le joueur va se téléporter au premier bloc trouvée, et va essayer de se TP dessu, si ya pas la place, la téléportation va s’annuler, d’ou mon test si il y a des bloc au dessu

              @‘robin4002’:

              @‘Mugiwaxar’:

              Pourquoi pas de boucle for ?

              Ps: J’ai pris ton code, le problème reste le même 😞

              Car une boucle for n’est pas approprié pour ça, tu fais beaucoup plus de test que nécessaire (surtout que 1000 c’est plus que les 256 maximum).

              Au final j’ai mis world.getHeight()

              @‘robin4002’:

              @‘Mugiwaxar’:

              Ps2: J’ai l’avertissement: “[Avertissement [Minecraft-Server] Player984 moved wrongly!]” qui s’affiche à chaque fois

              Il doit pas aimer le setPosition, regarde la fonction pour téléporter, il me semble qu’il y a d’autre code pour prévenir la téléportation.

              Malheuresement j’ai chercher pendant un moment, j’ai rien trouvé 😞

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

                Bon, mon problème a l’air d’être résolut 🙂

                Je fait encore quelque teste et je confirme

                Merci pour ton aide 😉

                Voici mon code source pour ceux que sa interesse:

                
                package com.yvelis.mtpblocks.blocks;
                
                import cpw.mods.fml.common.network.Player;
                import net.minecraft.block.Block;
                import net.minecraft.block.material.Material;
                import net.minecraft.entity.Entity;
                import net.minecraft.entity.player.EntityPlayer;
                import net.minecraft.entity.player.EntityPlayerMP;
                import net.minecraft.util.AxisAlignedBB;
                import net.minecraft.util.ChatMessageComponent;
                import net.minecraft.world.World;
                
                public class TpUpBlock extends Block
                {
                
                public TpUpBlock(int id)
                {
                super(id, Material.glass);
                }
                
                public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k)
                {
                float f = 0.0625F;
                return AxisAlignedBB.getAABBPool().getAABB((float)i + f, j, (float)k + f, (float)(i + 1) - f, (float)(j + 1) - f, (float)(k + 1) - f);
                }
                
                @Override
                public void onEntityCollidedWithBlock(World world, int X, int Y, int Z, Entity entity)
                {
                
                if(!(entity instanceof EntityPlayer))
                return;
                
                if(world.isRemote)
                return;
                
                EntityPlayer player = (EntityPlayer) entity;
                
                int posY = (int) player.posY + 1;
                boolean locationFound = false;
                
                while ( posY < world.getHeight() )
                {
                posY++;
                
                if( !world.isAirBlock(X, posY, Z) && world.isAirBlock(X, posY + 1, Z) && world.isAirBlock(X, posY + 2, Z) && world.isAirBlock(X, posY + 3, Z))
                {
                locationFound = true;
                break;
                }
                }
                
                if(locationFound)
                {
                player.setPositionAndUpdate(X, posY + 1, Z);
                player.worldObj.playSoundAtEntity(player, "mtpblocks:teleport", 1.0F, 1.0F);
                }
                else
                player.sendChatToPlayer( ChatMessageComponent.createFromText("Aucune destination pour la teleportation") );
                
                super.onEntityCollidedWithBlock(world, X, Y, Z, entity);
                }
                
                }
                
                

                Edit: Tout a l’air d’être fonctionnel !
                Résolut

                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