MFF

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

    Le gamemode d'un joueur + 2 problèmes

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.x
    7 Messages 3 Publieurs 3.3k 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.
    • VayperV Hors-ligne
      Vayper
      dernière édition par robin4002

      Salut à tous,
      mon problème est tout bête, j’aimerais détecter le gamemode du joueur pour que s’il n’est pas en créatif et que s’il n’a pas la bonne pioche lorsqu’il casse mon minerai, un message est envoyé dans le chat et la destruction du bloc est annulée. Mais j’ai 3 problèmes.

      1 - Lorsque je détruit le bloc, je me prends un NPE si je n’ai rien dans la main. J’ai pourtant mis des vérifications que l’item n’est pas null partout…

      2 - Le message s’affiche dans tous les cas, alors qu’il ne devrait s’afficher que si le joueur ne tient pas dans sa main 1 des 6 pioches requises.

      3 - Je ne trouve pas comment vérifier que le joueur n’est pas en créatif.

      Voila ou j’en suis :

      
      @SubscribeEvent
      public void onBlockDestroyed(BlockEvent.BreakEvent event)
      {
      if(event.block instanceof MysticShadowOre)
      {
      // Vérification du mode créatif manquante
      if(event.getPlayer().getHeldItem().getItem() != null && event.getPlayer().getHeldItem().getItem() != net.minecraft.init.Items.diamond_pickaxe && event.getPlayer().getHeldItem().getItem() != null &&
      event.getPlayer().getHeldItem().getItem() != MorePowerCraft.mysticPickaxe && event.getPlayer().getHeldItem().getItem() != null && event.getPlayer().getHeldItem().getItem() != MorePowerCraft.shadowPickaxe &&
      event.getPlayer().getHeldItem().getItem() != null && event.getPlayer().getHeldItem().getItem() != MorePowerCraft.divinePickaxe &&event.getPlayer().getHeldItem().getItem() != null &&
      event.getPlayer().getHeldItem().getItem() != MorePowerCraft.fallenPickaxe && event.getPlayer().getHeldItem().getItem() != null && event.getPlayer().getHeldItem().getItem() != MorePowerCraft.futurUltimate)
      {
      }
      event.getPlayer().addChatMessage(new ChatComponentText("§o" + "Votre pioche n'est pas assez puissante pour récupérer le minerai."));
      event.setCanceled(true);
      }
      }
      
      

      Tout le mod est dispo ici : https://github.com/Vayper/MorePowerCraft

      Merci d’avance pour vos solutions ! 🙂

      PS : - Existe-t-il un event qui s’active quand on commence a détruire un bloc ?

      • Comment faire pour qu’un bloc émette de la lumière ? J’ai inspecté le code de la lampe redstone et de la torche,
        mais c’est truffé de field et de func…
      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

        Comme ça :

        @SubscribeEvent
        public void onBlockDestroyed(BlockEvent.BreakEvent event)
        {
        if(event.block instanceof MysticShadowOre)
        {
        // Vérification du mode créatif manquante
        if(!event.getPlayer().capabilities.isCreativeMode && event.getPlayer().getHeldItem() != null && (event.getPlayer().getHeldItem().getItem() == net.minecraft.init.Items.diamond_pickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.mysticPickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.shadowPickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.divinePickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.fallenPickaxe || event.getPlayer().getHeldItem().getItem()== MorePowerCraft.futurUltimate))
        {
        event.getPlayer().addChatMessage(new ChatComponentText("§o" + "Votre pioche n'est pas assez puissante pour récupérer le minerai."));
        event.setCanceled(true);
        }
        }
        }
        

        Le null check, il doit être event.getPlayer().getHeldItem() et pas sur event.getPlayer().getHeldItem().getItem()
        player.capabilities.isCreativeMode pour le créative.

        Pour les deux autres questions, PlayerEvent.HarvestCheck et PlayerEvent.BreakSpeed
        et la lumière, setLightValue(1F) dans le constructeur.

        1 réponse Dernière réponse Répondre Citer 1
        • VayperV Hors-ligne
          Vayper
          dernière édition par

          @‘robin4002’:

          Comme ça :

          @SubscribeEvent
          public void onBlockDestroyed(BlockEvent.BreakEvent event)
          {
          if(event.block instanceof MysticShadowOre)
          {
          // Vérification du mode créatif manquante
          if(!event.getPlayer().capabilities.isCreativeMode && event.getPlayer().getHeldItem() != null && (event.getPlayer().getHeldItem().getItem() == net.minecraft.init.Items.diamond_pickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.mysticPickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.shadowPickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.divinePickaxe || event.getPlayer().getHeldItem().getItem() == MorePowerCraft.fallenPickaxe || event.getPlayer().getHeldItem().getItem()== MorePowerCraft.futurUltimate))
          {
          event.getPlayer().addChatMessage(new ChatComponentText("§o" + "Votre pioche n'est pas assez puissante pour récupérer le minerai."));
          event.setCanceled(true);
          }
          }
          }
          

          Le null check, il doit être event.getPlayer().getHeldItem() et pas sur event.getPlayer().getHeldItem().getItem()
          player.capabilities.isCreativeMode pour le créative.

          Pour les deux autres questions, PlayerEvent.HarvestCheck et PlayerEvent.BreakSpeed
          et la lumière, setLightValue(1F) dans le constructeur.

          Merci d’avoir répondu rapidement 🙂

          J’ai fais plusieurs tests :

          • En mode créatif, je peux casser le bloc a la main, le message ne s’affiche pas et ne crash pas – Problème 1 résolu
          • En mode créatif, quand je détruis le bloc, le message ne s’affiche jamais – Problème 2 a moitié résolu
          • En mode survie, c’est l’inverse de ce que je veux qui se produit. Quand je détruis le bloc avec une des 6 pioches “exceptées”, le message s’affiche et je ne peux pas détruire le bloc, alors que si je prends une pioche en fer, le bloc se casse correctement.

          *EDIT : Tous les problèmes résolus, j’ai remplacé les || par des && et les == par des != . *

          Merci beaucoup !!! 🙂

          Dernière petit question, comment je pourrais faire pour afficher proprement la pioche utilisée dans le message au lieu de mettre “Votre pioche” ?
          J’ai essayé de mettre event.getPlayer().getHeldItem().getItem() mais ca me met “net.minecraft.item.ItemPickaxe@2de6f1bc” ^^

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

            Je pense qu’il faut juste que tu inverses les conditions. à la place des == des items, mets !=

            1 réponse Dernière réponse Répondre Citer 1
            • VayperV Hors-ligne
              Vayper
              dernière édition par

              @‘gagoi’:

              Je pense qu’il faut juste que tu inverses les conditions. à la place des == des items, mets !=

              Tu devrais écrire ton message quand j’éditais le mien ^^

              Merci quand même 🙂

              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

                event.getPlayer().getHeldItem().getItem().getItemStackDisplayName(event.getPlayer().getHeldItem())

                1 réponse Dernière réponse Répondre Citer 1
                • VayperV Hors-ligne
                  Vayper
                  dernière édition par

                  @‘robin4002’:

                  event.getPlayer().getHeldItem().getItem().getItemStackDisplayName(event.getPlayer().getHeldItem())

                  MERCI BEAUCOUP ! 🙂

                  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