MFF

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

    DrawSelectionBoundingBox

    Planifier Épinglé Verrouillé Déplacé Résolu 1.11.x
    1.11.x
    5 Messages 3 Publieurs 952 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.
    • F Hors-ligne
      fabulacraft
      dernière édition par

      Salut,
      je voudrai faire un mod permettant de voir la hitbox d’une shulker meme lorsqu’on ne fait pas F3+B et qu’elle est derrière un mur.
      Voici mon code : 
      :::

      
      TileEntity shulker = null;
      for (TileEntity e : Minecraft.getMinecraft().world.loadedTileEntityList) {
           String name = e.getBlockType().getUnlocalizedName();
           if (name.contains("shulker")) {
                shulker = e;
            }
      }
      if (shulker != null) {
      //j'affiche
      GlStateManager.enableBlend();
      GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA,
      GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE,
      GlStateManager.DestFactor.ZERO);
      GlStateManager.glLineWidth(2.0F);
      GlStateManager.disableTexture2D();
      GlStateManager.depthMask(false);
      BlockPos blockpos = shulker.getPos();
      IBlockState iblockstate = Minecraft.getMinecraft().world.getBlockState(blockpos);
      
      EntityPlayer player = Minecraft.getMinecraft().player;
      
      float partialTicks = Minecraft.getMinecraft().getRenderPartialTicks();
      if (iblockstate.getMaterial() != Material.AIR
      && Minecraft.getMinecraft().world.getWorldBorder().contains(blockpos)) {
      double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * partialTicks;
      double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * partialTicks;
      double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * partialTicks;
      RenderGlobal
      .drawSelectionBoundingBox(
      iblockstate.getSelectedBoundingBox(Minecraft.getMinecraft().world, blockpos)
      .expandXyz(0.0020000000949949026D).offset(-d0, -d1, -d2),
      0.0F, 0.0F, 0.0F, 0.4F);
      }
      GlStateManager.depthMask(true);
      GlStateManager.enableTexture2D();
      GlStateManager.disableBlend();
      }
      
      

      :::
      Je mets ce code dans une fonction prenant en paramètre un

      WorldTickEvent
      

      appelé par le 5zigMod.
      J’ai récupéré ce code depuis la fonction RenderGlobal#drawSelectionBox.
      Le problème est que ça n’affiche absolu rien autour de ma shulker.
      Je suis en 1.11.2. J’ai mis des debugs pour être sur que ça entre bien dans le if et il se sont affichés.

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

        Salut, l’event que tu as utilisé n’est pas un event de rendu, donc tu ne peux rien dessiner quand il est appelé.
        Ensuite, ton code actuelle va dessiner les countours d’un seul shulker, le dernier qu’il trouve dans la liste.
        De plus, vérifier le nom du block comme tu le fais n’est pas du tout optimisé, compares plutôt avec Blocks.SHULKER_BOX (je connais pas le nom exact).

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

          Oui en fait je me suis mal exprimé effectivement je ne cherche à draw la hitbox que d’un seul shulker.
          Merci je vais essayer de faire comme ça pour le nom du block.

          Autrement c’est vraiment complètement impossible d’utiliser des méthodes du GLStateManager lorsque ce n’est pas dans un event de rendu ?

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwingB Hors-ligne
            BrokenSwing Moddeurs confirmés Rédacteurs
            dernière édition par

            Bonjour,

            Premièrement, WorldTickEvent est un évènement qui est appelé côté serveur et côté client, or tu ne fais en aucun cas la distinction ici donc tu essais aussi de dessiner quelque chose sur le serveur ce qui n’est pas possible. De plus tu utilises la classe Minecraft qui est aussi une classe côté client, cela te fait déjà 2 raisons pour lesquelles ton code fera crash ton serveur.

            Ensuite, comme l’a dit AymericRed, cet évènement n’est pas fait pour le rendu, cependant tu peux utiliser RenderWorldLastEvent qui est un évènement de rendu et comme tu n’utilises aucun champ et aucune méthode de l’évènement cela ne te changera rien.

            Par ce qui est d’ajouter la possibilité de voir la boite de collision même lorsque que celle-ci est derrière un mur il te suffit de désactiver le test de profondeur :

            
            GlStateManager.disableDepth();
            
            // Ici tu rend la boite de collision
            
            GLStateManager.enableDepth();
            
            

            N’oublie pas de la réactiver, bien sûr.

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

              En fait pour être plus précis comme je l’ai dit plus haut ce que je fais est un plugin pour le 5ZigMod. Je ne peux donc pas register des events normaux de forge car justement ce n’est pas un mod et ma classe n’est pas détectée par forge.
              Je ne peux donc qu’utiliser les events du 5ZigMod et des fonctions de forge.
              Et de plus j’avais bien précisé que la méthode worldTickEvent était appelée par le 5ZigMod et non pas par forge.

              Bon bah tant pis.

              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