Navigation

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    SOLVED Ghost block et item drop

    1.7.x
    1.7.10
    2
    12
    779
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • vl20100
      vl20100 last edited by

      Bonjour,

      Je crée un mod qui, lorsque je clic droit avec une cisaille sur un de mes blocs, fait dropper un autre bloc que celui sur lequel j’ai cliqué. Pour l’exemple (ça ne se passe pas avec les mêmes blocs dans mon mod) quand je clic droit avec des shears en main sur un bloc de sable, le bloc de sable disparaît et drop 8 bedrocks.

      J’ai 2 petits problèmes qui se posent à moi :

      • Quand le bloc de sable disparaît, j’utilise
      myWorld.setBlock(x, y, z, Blocks.air);
      

      Mais un ghost block est créé. C’est un peu problématique…  😉

      • Quand je drop 8 bedrocks avec le code
      EntityItem item = new EntityItem(myWorld, Double.parseDouble(x + ""), Double.parseDouble(y + ""), Double.parseDouble(z + ""), new ItemStack(Blocks.bedrock, 8));
      myWorld.spawnEntityInWorld(item);
      

      Les blocs de bedrock sont bien droppés mais je ne peux pas les ramasser.

      Avez-vous une idée sur au moins un de mes deux problèmes ?

      Pour catcher l’événement des cisailles, j’utilise le PlayerInteractEvent côté client que je cancel si c’est bien un clic droit avec des cisailles en main. C’est peut-être pas la bonne solution. Je connais bien les événements en Java mais c’est la première fois que j’expérimente pour un mod.

      Merci d’avance pour votre aide  😉

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

        Salut,
        @vl20100:

        j’utilise le PlayerInteractEvent côté client

        Le problème est là, le drop d’item et le retrait de bloc doivent être fait côté serveur, pas côté client (et heureusement, sinon il serait très facile de faire un mod de cheat pour se give pleins d’item et détruire n’importe quel bloc).

        1 Reply Last reply Reply Quote 0
        • vl20100
          vl20100 last edited by

          @‘robin4002’:

          Salut,
          @‘vl20100’:

          j’utilise le PlayerInteractEvent côté client

          Le problème est là, le drop d’item et le retrait de bloc doivent être fait côté serveur, pas côté client (et heureusement, sinon il serait très facile de faire un mod de cheat pour se give pleins d’item et détruire n’importe quel bloc).

          Salut,

          Merci pour cette réponse. J’ai fait quelques modifications et quelques tests mais aucun n’a été concluant.
          J’ai essayé de déclarer mon événement côté serveur mais il n’était pas déclenché.
          J’ai supprimé la distinction server/client à la déclaration de mon événement mais j’ai toujours les mêmes problèmes que dans mon premier post.  :s

          Y a-t-il quelque chose que je puisse faire pour obtenir une aide “personnalisée” qui me permettrait de résoudre ce problème une bonne fois pour toutes ?  🙂

          En attendant, voici ma fonction d’init (si c’est bien ici que se situe mon problème) :

          @EventHandler
          public void init(FMLInitializationEvent event)
          {
          proxy.registerRender();
          
          // Utilisation de la cisaille
          MinecraftForge.EVENT_BUS.register(new UserShearsEvent());
          
          }
          

          Merci pour votre aide.

          1 Reply Last reply Reply Quote 0
          • robin4002
            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

            Peut-être que cette event n’est pas déclenché côté serveur.
            PlayerInteractEvent.RightClickBlock existe en 1.7.10 ? Si oui il faudrait plutôt utiliser celui-ci.

            1 Reply Last reply Reply Quote 0
            • vl20100
              vl20100 last edited by

              @‘robin4002’:

              Peut-être que cette event n’est pas déclenché côté serveur.
              PlayerInteractEvent.RightClickBlock existe en 1.7.10 ? Si oui il faudrait plutôt utiliser celui-ci.

              Oui, c’est déjà ce que j’utilise.

              @SubscribeEvent
              public void onPlayerUse(PlayerInteractEvent event)
              {
              System.out.println("action");
              if(event.action == Action.RIGHT_CLICK_BLOCK)
              {
              System.out.println("clic droit sur un bloc");
              if(event.entityPlayer.getCurrentEquippedItem().getItem() == Items.shears)
              {
              System.out.println("shears");
              wld = event.world;
              blc = wld.getBlock(event.x, event.y, event.z);
              
              event.setCanceled(true);
              
              onPlayerUseShears(blc.getUnlocalizedName(), event.x, event.y, event.z);
              }
              }
              }
              
              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Que donnes un System.out.println(event.entityPlayer.worldObj.isRemote); ?

                1 Reply Last reply Reply Quote 0
                • vl20100
                  vl20100 last edited by

                  @‘robin4002’:

                  Que donnes un System.out.println(event.entityPlayer.worldObj.isRemote); ?

                  ça retourne “true”

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                    Aucun false qui s’affiche dans la console ?
                    Dans ce cas la fonction s’exécute que sur le client, je trouve ça étrange.

                    1 Reply Last reply Reply Quote 0
                    • vl20100
                      vl20100 last edited by

                      @‘robin4002’:

                      Aucun false qui s’affiche dans la console ?
                      Dans ce cas la fonction s’exécute que sur le client, je trouve ça étrange.

                      ça ne serait pas à cause du

                      event.setCanceled(true);
                      

                      que j’ai mis au-dessus ?

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                        Ah possible, le fait de cancel cette event évites l’envoie du paquet au serveur qui le déclenche ensuite.
                        Essais sans.

                        1 Reply Last reply Reply Quote 0
                        • vl20100
                          vl20100 last edited by

                          @‘robin4002’:

                          Ah possible, le fait de cancel cette event évites l’envoie du paquet au serveur qui le déclenche ensuite.
                          Essais sans.

                          Le code s’exécute bien côté client et côté serveur !  🙂

                          Maintenant, il faut que je fasse une condition avec le

                          event.entityPlayer.worldObj.isRemote
                          

                          pour que mon code ne s’exécute que côté serveur.
                          Merci beaucoup !!!

                          1 Reply Last reply Reply Quote 0
                          • robin4002
                            robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                            @vl20100:

                            Maintenant, il faut que je fasse une condition avec le

                            event.entityPlayer.worldObj.isRemote
                            

                            C’est ça, un petit ! devant pour s’assurer d’être sur le serveur.

                            De rien !

                            1 Reply Last reply Reply Quote 0
                            • 1 / 1
                            • First post
                              Last post
                            Design by Woryk
                            Contact / Mentions Légales / Faire un don

                            MINECRAFT FORGE FRANCE © 2018

                            Powered by NodeBB