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

    Résolu PlayerInteractEvent appelé que en client ?!

    1.7.x
    1.7.x
    2
    4
    863
    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.
    • RedRelay
      RedRelay Moddeurs confirmés dernière édition par

      Hey 🙂

      Mon event PlayerInteractEvent ne s’éxécute que dans la partie client, c’est assez étrange, je vous envoie le code en question :

      public abstract class Handler {
      public Handler() {
      registerEvent();
      }
      
      public abstract void registerEvent();
      }
      
      
      public class CommonSettlementHandler extends Handler{
      
      @Override
      public void registerEvent() {
      MinecraftForge.EVENT_BUS.register(this);
      }
      
      …
      
      @SubscribeEvent
      public void onPlayerInterract(PlayerInteractEvent event) {
      if(event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) {
      if(event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().getItem() == Item.getItemFromBlock(SettlementsModBlocks.settlementBlock)) {
      event.setCanceled(!playerUseSettlementBlock(event));
      }
      }
      }
      
      protected boolean playerUseSettlementBlock(PlayerInteractEvent event) {
      SettlementZone zone = settlementsManager.getSettlementZone(event.world.provider.dimensionId, event.x/16, event.z/16);
      
      if(zone == null) return false;
      
      Settlement s = settlementsManager.getSettlement(zone);
      
      if(s.isOutflow() && s.isLeader(event.entityPlayer)) {
      s.setOutflow(false);
      return true;
      }
      
      event.entityPlayer.addChatMessage(new ChatComponentText(StatCollector.translateToLocal("chat.player.event.createSettlement.tooNear")));
      return false;
      }
      }
      
      public class ClientSettlementHandler extends CommonSettlementHandler {
      
      @Override
      protected boolean playerUseSettlementBlock(PlayerInteractEvent event) {
      if(event.world.isRemote) {
      System.out.println("[CLIENT] : playerUseSettlementBlock");
      return false;
      }else {
      System.out.println("[SERVER] : playerUseSettlementBlock");
      return super.playerUseSettlementBlock(event);
      }
      }
      }
      

      Voila ça ne m’affiche que “[CLIENT] : playerUseSettlementBlock” alors que normalement ça devrait aussi m’afficher “[SERVER] : playerUseSettlementBlock”. Avez vous une idée du pourquoi du comment ? Merci 🙂

      J’ai essayé de mettre le moins de code possible, si il en faut plus pas de soucis.

      –------------------------------------------------------------------------------------
      Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

        Je n’ai pas vraiment d’explication, mais essaye peut-être de séparer ta condition finale en deux, histoire de voir si ton isRemote raconte pas de la merde. Et essaye aussi de mettre un log hors de la condition pour être sûr que le serveur passe bien par playerUseSettlementBlock.


        Über Networking Antennas

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

          j’ai placer un syso(event.world.isRemote) juste après :
          if(event.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK)

          Pareil, il n’y a que true qui s’affiche 😕

          –------------------------------------------------------------------------------------
          Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

            J’ai du nouveau :
            Lorsqu’on fait un event.setCancelled(true), les syso (même précédents) ne s’affichent pas coté serveur. En revanche les packets sont bel et bien envoyés. Etrange …

            –------------------------------------------------------------------------------------
            Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

            MINECRAFT FORGE FRANCE © 2018

            Powered by NodeBB