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

    SetItemInUse custom

    Sans suite
    1.7.10
    2
    5
    1266
    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.
    • SCAREX
      SCAREX dernière édition par

      Bonjour, aujourd’hui je reviens avec un problème encore plus complexe : la fonction setItemInUse. J’ai voulu utiliser cette méthode avec une touche malheureusement il s’avère que Minecraft n’aime pas lorsque l’on utiliser setItemInUse en dehors de la méthode onItemRightClick. Je me suis dit que c’était un problème de synchronisation client / serveur (même si çà fait partie du côté client normalement, mais bon, j’ai essayé), sauf que même un paquet ne résout pas le problème :

      @SubscribeEvent
      public void onInputEvent(InputEvent event) {
      if (ClientProxy.keyBindAim.isPressed()) {
      EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
      if (player.getHeldItem() != null && player.getHeldItem().getItem() == HiliumItems.ITEM_GUN) {
      player.setItemInUse(player.getHeldItem(), 100); // j'utilise une constante pour verifier que le problème ne vient pas de là
      Hilium.network.sendToServer(new PacketItemInUse(100));
      }
      }
      }
      

      La fonction est appelée, le paquet est envoyé, mais lorsque j’applique le rendu :

      @SubscribeEvent
      public void onRenderHand(RenderHandEvent event) {
      EntityPlayer player = Minecraft.getMinecraft().thePlayer;
      if (player.getHeldItem() != null && player.getHeldItem().getItemUseAction() == ItemGun.aim) {
      if (player.getItemInUseCount() > 0) {
      Hilium.LOGGER.info("rendering");
      GL11.glPushMatrix(); // Useless openGL (tests)
      GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
      GL11.glPopMatrix();
      } else {
      Hilium.LOGGER.info(player.getItemInUseCount()); // debug
      }
      }
      }
      

      je vois “rendering” apparaître seulement lorsque j’utilise la méthode setItemInUse dans la méthode onItemRightClick sinon çà m’affiche 0.

      Classe du paquet (au cas où) :

      public class PacketItemInUse implements IMessage
      {
      private int duration;
      
      public PacketItemInUse() {}
      
      public PacketItemInUse(int duration) {
      this.duration = duration;
      }
      
      @Override
      public void fromBytes(ByteBuf buf) {
      this.duration = buf.readInt();
      }
      
      @Override
      public void toBytes(ByteBuf buf) {
      buf.writeInt(this.duration);
      }
      
      public static class ServerHandler implements IMessageHandler <packetiteminuse, imessage="">{
      @Override
      public IMessage onMessage(PacketItemInUse message, MessageContext ctx) {
      ctx.getServerHandler().playerEntity.setItemInUse(ctx.getServerHandler().playerEntity.getHeldItem(), message.duration);
      Hilium.LOGGER.info("received packet : " + ctx.getServerHandler().playerEntity.getItemInUseCount());
      return null;
      }
      }
      }
      ```</packetiteminuse,>

      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
      • SCAREX
        SCAREX dernière édition par

        J’ai trouvé d’où venait le problème, après avoir utilisé un Throwable dans l’event PlayerUseItem.Stop, voici d’où vient le problème :
        Minecraft.class:2006

        if (this.thePlayer.isUsingItem()) // Si le joueur utilise l'item (c'est le cas)
        {
        if (!this.gameSettings.keyBindUseItem.getIsKeyPressed()) // On regarde si le bouton d'utilisation des items est pressée (dans ce cas elle ne l'est pas car j'utilise une touche du clavier custom)
        {
        this.playerController.onStoppedUsingItem(this.thePlayer);
        }
        
        label391:
        
        while (true)
        {
        if (!this.gameSettings.keyBindAttack.isPressed())
        {
        while (this.gameSettings.keyBindUseItem.isPressed())
        {
        ;
        }
        
        while (true)
        {
        if (this.gameSettings.keyBindPickBlock.isPressed())
        {
        continue;
        }
        
        break label391;
        }
        }
        }
        }
        

        Donc le seul moyen d’empêcher çà serai de modifier le code de Minecraft, je vais voir pour trouver un moyen de le contourner ou je posterai un commit sur le git de forge pour le corriger.

        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
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

          En fait pourquoi tu veux passer par une touche custom pour lancer l’utilisation de l’item ? Le clic droit ne convient pas ?

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

            Je fait une arme, donc il me faut une touche de la souris pour tirer, je voulais utiliser le clique gauche à la base et utiliser le clique droit pour viser mais il n’y a aucun event pour le clique gauche (il n’y en a que lorsque l’on clique sur une entité) donc j’ai voulut garder le clique droit pour tirer et donc créer une touche pour viser mais je crois que je vais devoir faire l’inverse.

            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
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

              Faut regarder du côté de flan’s mod sinon.

              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