MFF

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

    Grief et setblocktoair

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    14 Messages 4 Publieurs 2.5k 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.
    • GabsG Hors-ligne
      Gabs
      dernière édition par

      Bonjour,
      Alors je vous explique j’ai fais que quand on tape une entity elle soit enfermé dans une cage en bloc de verre mais le problème et que si l’entity se situe a côté d’un bloc se bloc et remplacer par celui en verre et donc grief la map…
      Possibilité de faire en sorte que sa ne le remplace pas? (pas de grief).

      Autre chose aussi:
      Je cherche a faire par exemple une fois l’entity enfermé après 10 secondes les bloc de verre sont remplacer par des blocs d’air.
      Je connais le code pour remplacer les bloc de verre par des bloc d’air mais le soucis c’est que le faire disparaître au bout de 10s je sais pas faire. (Avec un onUpdate j’ai essayer ça marche pas!)

      CODE:

      
      public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker)
         {
      
      if(stack.getTagCompound().getInteger("timer2") >= 20 * 20){
      
      // Orientation: EST
      attacker.worldObj.setBlock((int)target.posX, (int)target.posY, (int)target.posZ, Blocks.glass); //devant
      attacker.worldObj.setBlock((int)target.posX - 1, (int)target.posY, (int)target.posZ - 1, Blocks.glass); //gauche
      attacker.worldObj.setBlock((int)target.posX - 2, (int)target.posY, (int)target.posZ, Blocks.glass); // droite
      attacker.worldObj.setBlock((int)target.posX - 1, (int)target.posY, (int)target.posZ + 1, Blocks.glass); // dérrière
      attacker.worldObj.setBlock((int)target.posX - 1, (int)target.posY + 2, (int)target.posZ, Blocks.glass); //haut
      stack.getTagCompound().setInteger("timer2", 0);
      
      //Ici j'ai essayer de mettre un second timer mais ça marcher pas.
      
      // attacker.worldObj.setBlockToAir((int)target.posX, (int)target.posY, (int)target.posZ); //devant
      // attacker.worldObj.setBlockToAir((int)target.posX - 1, (int)target.posY, (int)target.posZ - 1); //gauche
      // attacker.worldObj.setBlockToAir((int)target.posX - 2, (int)target.posY, (int)target.posZ); // droite
      // attacker.worldObj.setBlockToAir((int)target.posX - 1, (int)target.posY, (int)target.posZ + 1); // dérrière
      // attacker.worldObj.setBlockToAir((int)target.posX - 1, (int)target.posY + 2, (int)target.posZ); //haut
      
        }
      return true;
          }
      
      

      Merci d’avance!

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

        Je crois qu’il y a un event pour la pose de block, suffit juste de check si le block posé correspond à ton block de verre, et si d’autres aux alentours ont été posés, et si ton entity se trouve à côté. Si tout cela renvoit true, alors tu peux enregistrer un timer (un short suffira), dans les tags de l’entity qui s’incrémentera dans l’event LivingUpdateEvent, et si ce timer est arrivé à 10*20, toujours dans l’event LivingUpdateEvent, alors tu setBlockToAir tous tes blocks de verre. Compris ?

        Pour ton premier problème, si un block existant de la map est transformé par ton block de verre et que tu trouves ça gênant, suffit juste de check si il n’y a aucun block (en gro, si c’est de l’air), aux coords du futur block à poser. C’est juste une toute petite condition à rajouter, en te servant de World#getBlock(int coordX, int coordY, int coordZ)

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

          Ok d’acc pour le second , mais le premier je vais essayer si je coince je reviens vers vous merci 🙂
          edit:
          j’ai réussis pour le grief merci!
          Par contre l’event que quand on pose un bloc j’ai pas trouvé.

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

            @‘floriangabet’:

            Ok d’acc pour le second , mais le premier je vais essayer si je coince je reviens vers vous merci 🙂
            edit:
            j’ai réussis pour le grief merci!
            Par contre l’event que quand on pose un bloc j’ai pas trouvé.

            BlockEvent.PlaceEvent

            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
            • GabsG Hors-ligne
              Gabs
              dernière édition par

              Merci,

              Alors j’ai fais ça j’ai oublier pas mal de chose je sais pas comment savoir si mon entity est a côté et faire le timer dans la class event.
              J’ai un problème aussi avec le setblocktoair pour les coords je fais comment je serrai dans le onplaceblock j’aurai fait event.x , event.y … mais dans living je procède comment merci.

              
              @SubscribeEvent
              public void onPlaceBlock(BlockEvent.PlaceEvent event){
              EntityLivingBase target = event.player.getAITarget();
              World world = event.world;
              if(event.placedBlock == Blocks.glass && ?)//entity à côté comment faire ?? && [font=Ubuntu, sans-serifd'autres aux alentours ont été posés ? -> je vois pas trop comment peut-etre avec le boundsblock]
              {
              System.out.println("bloc de verre placer");
              
              }
              }
              
              @SubscribeEvent
              public void onLiving(LivingUpdateEvent event){
              EntityLivingBase target = event.entityLiving;
              
              World world = target.worldObj;
              if(timer) // ??
              world.setBlockToAir(p_147468_1_, p_147468_2_, p_147468_3_);
              }
              
              

              En tout cas merci 🙂

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

                J’ai pas compris ce que tu voulais faire

                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
                • BrokenSwingB Hors-ligne
                  BrokenSwing Moddeurs confirmés Rédacteurs
                  dernière édition par

                  Pour le timer il faut pas faire comme ça, regarde par ici : https://github.com/MFFbrokenSwing/FactionMod/blob/master/src/main/java/fr/mff/facmod/core/Homes.java#L110
                  Tu ne peux pas faire de copier/coller, essai de comprendre

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

                    Ah oui mais je viens d’y penser, je pense qu’utiliser l’event BlockEvent.PlaceEvent ne conviendra pas car il est fired uniquement lorsqu’il s’agit d’un joueur qui place le block. Seulement là on place les blocks grâce à du World#setBlock pas grâce au clic droit qu’aurait fait un joueur. Donc essaie de voir mais je pense que l’event n’est pas déclenché…
                    Ensuite pour get ton entity à partir des coord’s de ta “prison de blocks de verre”, t’aurais pu te servir des AABB avec la méthode World#getEntitiesWithinAABB, qui t’aurais retourné une liste des entity se trouvant dans ta prison, mais comme logiquement il n’y en aurait qu’une seule, une boucle for ne t’aurait pas servi (un simple taList.get(0) aurait suffi).
                    Sinon encore une autre alternative aurait été de parcourir la liste World#loadedEntityList, afin de voir si à chaque tour l’entity a pour même coords que celle de ta prison.

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

                      Non il se déclenche pas… pas bien grave j’ai une idée c’est possible de faire en sorte que l’osque le monde “serveur” démarre tout les bloc de vitre du la map soit remplacer par des blocs d’air ?
                      Logiquement oui mais pour get tout les blocs en verre je fais comment ?

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

                        @‘floriangabet’:

                        démarre** tout les bloc de vitre** du la map

                        Sa c’est juste impossible à faire. Le seul moyen aurait été d’avoir accès au constructeur de la classe du block de vitre, et qu’à chaque nouvelle instance, on l’ajoute à une liste, qu’on aurait ensuite parcouru pour ce que tu souhaites faire, mais comme on peut pas modif les .class…

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

                          @‘Plaigon’:

                          @‘floriangabet’:

                          démarre** tout les bloc de vitre** du la map

                          Sa c’est juste impossible à faire. Le seul moyen aurait été d’avoir accès au constructeur de la classe du block de vitre, et qu’à chaque nouvelle instance, on l’ajoute à une liste, qu’on aurait ensuite parcouru pour ce que tu souhaites faire, mais comme on peut pas modif les .class…

                          Je me suis tromper je voulais dire block d’air c’est quand même impossible ?

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

                            Sa ne change pas grand chose, même problème.
                            Après je n’ai pas pris le temps de chercher dans ma workspace 1.7x, mais de toutes manières je pense que c’est difficilement réalisable sans utiliser la réflexion, ou sans avoir à portée de main un PC gamer à 2000 balles 😉

                            1 réponse Dernière réponse Répondre Citer 0
                            • BrokenSwingB Hors-ligne
                              BrokenSwing Moddeurs confirmés Rédacteurs
                              dernière édition par

                              Et en les changeant au fûr et à mesure du chargement des chunks, ça ne le ferai pas ?
                              Avec l’event ChunkEvent.Load (je crois) tu parcours les blocs du chunk (16 x 16 x 256) et si un bloc est une vitre, on le remplace par le l’air

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

                                @‘BrokenSwing’:

                                Et en les changeant au fûr et à mesure du chargement des chunks, ça ne le ferai pas ?
                                Avec l’event ChunkEvent.Load (je crois) tu parcours les blocs du chunk (16 x 16 x 256) et si un bloc est une vitre, on le remplace par le l’air

                                Au pire c’est bon vous inquiétez pas je vais changer de sort pour mon mod merci en tout cas les copains 🙂

                                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