MFF

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

    Changer de pseudo in-game

    Planifier Épinglé Verrouillé Déplacé Résolu 1.9.x et 1.10.x
    1.10.x
    2 Messages 1 Publieurs 1.1k 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.
    • N Hors-ligne
      nargacu83
      dernière édition par robin4002

      Bonsoir,
      En recherchant un peu j’ai trouvé sur Minecraft Forge France (ici pour le coup) ce sujet et celui-ci qui étaient sur le même principe donc je les ai suivis et utilisé les informations disponibles afin d’arriver à faire fonctionner le système.
      Ahah comme le sujet le témoigne ça n’as pas très bien fonctionné !

      Donc j’aimerai changer les pseudos in-game et mon problème c’est que j’ai bien les pseudos changés dans le chat, mais pas au dessus de la tête des joueurs.
      Et pour ça j’ai fais exactement comme ce sujet, tout fonctionne bien, les clients sont bien synchronisés, le problème c’est juste l’affichage et je ne comprends vraiment pas pourquoi, voilà la raison pour laquelle je fais un nouveau sujet sur ça !

      Voici la partie du code (j’ai rajouté des commentaires pour que vous compreniez un peu plus) :

      
      @SubscribeEvent
          public void playerLoggedInEvent(PlayerLoggedInEvent e) {
              EntityPlayer player = e.player;
      
              if(player.hasCapability(MS_Main.CHARACTER_CAP, null)) {
                  CharacterCapabilities character = player.getCapability(MS_Main.CHARACTER_CAP, null);
                  if(character.getCharacterName() == null || character.getCharacterName().isEmpty()) {
                      character.setCharacterName(MS_Main.instance.playerData.character.getCharacterName());
                      character.sync();
                  } else {
                      character.sync();
                  }
              }
          }
      
          public void onJoinWorld(EntityJoinWorldEvent e) {
              if(e.getWorld().isRemote && e.getEntity() instanceof EntityPlayer)
              {
                  EntityPlayer player = (EntityPlayer) e.getEntity();
                  player.refreshDisplayName();
                  MS_Main.network.sendToServer(new MS_PacketRequestCharacter(player.getGameProfile().getId().toString()));
      
                  NetworkPlayerInfo pInfo = Minecraft.getMinecraft().getConnection().getPlayerInfo(Minecraft.getMinecraft().getSession().getProfile().getId());
      
                  if(pInfo != null) {
                      System.out.println("Pas null ");
                  }
              }
          }
      
          @SubscribeEvent
          public void onPlayerNameFormat(NameFormat e) {
              EntityPlayer player = e.getEntityPlayer();
      
              //e.setDisplayname("PseudoUltraStyle"); <– celui là marche très bien, pourquoi pas l'autre ?
      
              if(player.hasCapability(MS_Main.CHARACTER_CAP, null)) {
                  CharacterCapabilities character = player.getCapability(MS_Main.CHARACTER_CAP, null);
      
                  if(character.getCharacterName() != null && !character.getCharacterName().isEmpty()) {
                      /**
                       * Ici ça donne bien le nom que je veux afficher pour le bon joueur donc tout est ok à partir d'ici
                       */
                      System.out.println("Character name for " + player.getName() + " : " +  character.characterName);
                      e.setDisplayname(character.characterName);
                  } else {
                      System.out.println("Character name not set for " + player.getName());
                  }
              }
          }
      
          @SubscribeEvent
          public void onPlayerCloned(PlayerEvent.Clone event) {
              if(event.isWasDeath()) {
                  if(event.getOriginal().hasCapability(MS_Main.CHARACTER_CAP, null)) {
                      CharacterCapabilities cap = event.getOriginal().getCapability(MS_Main.CHARACTER_CAP, null);
                      CharacterCapabilities newCap = event.getEntityPlayer().getCapability(MS_Main.CHARACTER_CAP, null);
                      newCap.setCharacterName(cap.getCharacterName());
                  }
              }
          }
      
          @SideOnly(Side.CLIENT)
          @SubscribeEvent
          public void onRenderLabel(RenderLivingEvent.Specials.Pre event)
          {
              if(event.getEntity() instanceof EntityPlayer)
              {
                  EntityPlayer player = (EntityPlayer)event.getEntity();
      
                  if(Minecraft.getMinecraft().thePlayer.getPosition().distanceSq(player.posX, player.posY, player.posZ) > 12)
                  {
                     event.setCanceled(true);
                     RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
                     CharacterCapabilities cap = player.getCapability(MS_Main.CHARACTER_CAP, null);
      
                     boolean flag = player.isSneaking();
                     float f = renderManager.playerViewY;
                     float f1 = renderManager.playerViewX;
                     boolean flag1 = renderManager.options.thirdPersonView == 2;
                     float f2 = player.height + 0.5F - (flag ? 0.25F : 0.0F);
                     int i = "deadmau5".equals(cap.getCharacterName()) ? -10 : 0;
                     EntityRenderer.drawNameplate(renderManager.getFontRenderer(), cap.getCharacterName(), (float)player.posX, (float)player.posY + f2, (float)player.posZ, i, f, f1, flag1, flag);
                  }
              }
          }
      
          @SubscribeEvent
          public void onPlayerRespawn(PlayerRespawnEvent event) {
              if(!event.player.worldObj.isRemote) {
                  event.player.getCapability(MS_Main.CHARACTER_CAP, null).sync();
              }
          }
      
          @SubscribeEvent
          public void onAttachCapability(AttachCapabilitiesEvent.Entity event) {
              if(event.getEntity() instanceof EntityPlayer) {
                  event.addCapability(new ResourceLocation(MS_Main.ID + ":CHARACTER_CAP"), new CharacterCapabilities((EntityPlayer) event.getEntity()));
              }
          }
      
      

      J’ai vraiment hésité à faire un nouveau sujet car j’ai pas mal vu sur le web que c’était très recherché.
      Merci de votre attention 🙂

      [EDIT]
      Oh je viens de remarquer que “onJoinWorld” n’avait pas été marqué “@SubscribeEvent” du coup ça ne synchronisait jamais mon problème est règlé de ce côté là.

      Maintenant j’essaie de le changer dès la connexion du joueur et pour ça je vais essayer de refresh comme je peux le displayname du joueur pour éviter la déco-réco obligatoire.
      [/EDIT]

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

        Ok apparemment le packet pour synchroniser tous les joueurs n’est pas envoyé, aucuns debug ne ressorts.
        Je vous tiens au jus.

        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