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

    Solved Le gamemode d'un joueur + 2 problèmes

    1.7.x
    1.7.x
    3
    7
    2992
    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.
    • Vayper
      Vayper last edited by 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 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

        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 Reply Last reply Reply Quote 1
        • Vayper
          Vayper last edited by

          @‘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 Reply Last reply Reply Quote 0
          • gagoi
            gagoi last edited by

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

            1 Reply Last reply Reply Quote 1
            • Vayper
              Vayper last edited by

              @‘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 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

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

                1 Reply Last reply Reply Quote 1
                • Vayper
                  Vayper last edited by

                  @‘robin4002’:

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

                  MERCI BEAUCOUP ! 🙂

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

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB