MFF

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

    RenderGameOverlay juste pour un joueur.

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.8.9
    22 Messages 2 Publieurs 4.4k 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.
    • GabsG Hors-ligne
      Gabs
      dernière édition par

      @‘robin4002’:

      Oui forcement, quand tu relances ton jeu la valeur des variables est perdu.

      Normalement il faudrait plutôt faire une boucle for qui parcours le contenu de ta map.

      Ok super c’est bon!

      Dernière petit problème:

      C’est au niveau du if(date.getTime() == 0) ceci ne s’exécute jamais.

      
       @SubscribeEvent
          public void onTimerPrison(TickEvent.WorldTickEvent event)
          {
              //if(base instanceof EntityPlayer)
      
          for(int i = 0; i < ServerProxy.map2.size(); i++)
                      if(ServerProxy.map2.containsKey(batonP.base.getUniqueID()))
                      {
                      Date date = ServerProxy.map2.get(batonP.base.getUniqueID());
                          System.out.println((date.getTime() - new Date().getTime()) / 1000);
      
                          if(date.getTime() == 0) // ici
                          {
                              System.out.println("stop");
      
                             // entityIn.addChatMessage(new ChatComponentText("test " +a u.getDisplayName()));
                              batonP.base.addChatMessage(new ChatComponentText("Votre temps de prison est fini."));
                              Main.network.sendToServer(new PacketMapPrison(1));
                      }
                  }
          }
      
      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

        Non ce n’est pas bon.
        batonP.base ne devrait plus être là, ta boucle est actuellement inutile, tu ne sais visiblement pas comment faire une boucle sur une map.

        for (Map.Entry <uuid, time="">entry : ServerProxy.map2.entrySet())
        {
           System.out.println(entry.getKey() + "/" + entry.getValue());
        }
        

        entry.getKey()  -> l’uuid
        entry.getValue() -> le temp.

        Et dans ta classe batonP la variable base ne devrait plus exister, pour ajouter quelqu’un dans la prison il faut faire ServerProxy.map2.add(uuid, time);

        Il faut que tu revoies les base de Java car tu manque visiblement de compétence.</uuid,>

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

          @‘robin4002’:

          Non ce n’est pas bon.
          batonP.base ne devrait plus être là, ta boucle est actuellement inutile, tu ne sais visiblement pas comment faire une boucle sur une map.

          for (Map.Entry <uuid, time="">entry : ServerProxy.map2.entrySet())
          {
             System.out.println(entry.getKey() + "/" + entry.getValue());
          }
          

          entry.getKey()  -> l’uuid
          entry.getValue() -> le temp.

          Et dans ta classe batonP la variable base ne devrait plus exister, pour ajouter quelqu’un dans la prison il faut faire ServerProxy.map2.add(uuid, time);

          Il faut que tu revoies les base de Java car tu manque visiblement de compétence.</uuid,>

          pour se qui de ajouter quelqu’un je sais comment faire, je fais ça côté serveur car si plusieurs personne sont en prison ça risque de causé soucis non ?

          Tien j’ai fais ça:

          
          package com.CSC.net.packet;
          
          import java.util.Date;
          
          import com.CSC.net.item.batonP;
          import com.CSC.net.proxy.ServerProxy;
          
          import io.netty.buffer.ByteBuf;
          import net.minecraft.client.Minecraft;
          import net.minecraft.entity.EntityLivingBase;
          import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
          import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
          import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
          import net.minecraftforge.fml.relauncher.Side;
          import net.minecraftforge.fml.relauncher.SideOnly;
          
          public class PacketMapPrison implements IMessage{
          
          private int i;
          
          public PacketMapPrison(Integer integer)
          {
          this.i = integer;
          }
          
          public PacketMapPrison()
          {
          
          }
          
          @Override
          public void fromBytes(ByteBuf buf) {
          this.i = buf.readInt();
          }
          
          @Override
          public void toBytes(ByteBuf buf) {
          buf.writeInt(this.i);
          }
          
          public static class Handler implements IMessageHandler <packetmapprison, imessage="">{
                 @Override
                 public IMessage onMessage(PacketMapPrison message, MessageContext ctx)
                 {
                  switch(message.i)
                  {
                  case 0:
                  ServerProxy.map2.put(batonP.base.getUniqueID(), setDate(300));
                  System.out.println("");
                  break;
                  case 1:
                  ServerProxy.map2.remove(batonP.base.getUniqueID());
                  System.out.println("");
                  break;
                  case 2:
                  ServerProxy.map2.put(batonP.base.getUniqueID(), setDate(600));
                  System.out.println("");
                  break;
                  case 3:
                  ServerProxy.map2.put(batonP.base.getUniqueID(), setDate(900));
                  System.out.println("");
                  break;
                  case 4:
                  ServerProxy.map2.put(batonP.base.getUniqueID(), setDate(1200));
                  System.out.println("");
                  break;
                  case 5:
                  ServerProxy.map2.put(batonP.base.getUniqueID(), setDate(1500));
                  System.out.println("");
                  break;
                  default:
                  break;
                  }
          return null;
          
                 }
             }
          
          private static Date setDate(int delay)
             {
                 Date date = new Date();
                 date.setSeconds(date.getSeconds() + delay);
                 return date;
             }
          
          }
          
          

          Je savais pas du tout pour la boucle for.

          Faut que je reprennes les bases tu as raison mais cet ainsi c’est chaud j’ai pas vraiment le temps…

          J’essaye la boucle ce soir je te dis le résultat.

          Merci.</packetmapprison,>

          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

            Où l’ajout doit se faire côté serveur, mais je ne vois pas l’intérêt d’utiliser un paquet sachant que itemInteractionForEntity est appelé dans les deux side (suffit de faire un !world.isRemote) pour le faire directement côté serveur, pas besoin de paquet du-coup.

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

              @‘robin4002’:

              Où l’ajout doit se faire côté serveur, mais je ne vois pas l’intérêt d’utiliser un paquet sachant que itemInteractionForEntity est appelé dans les deux side (suffit de faire un !world.isRemote) pour le faire directement côté serveur, pas besoin de paquet du-coup.

              Ah je savais pas qu’il était appelé des deux côtes.

              Je supprime donc le Packet puis le EntityLivingBase dans la classe batonP, juste un question pour récuperé le joueur pointé du coup je peux faire comment sans l’EntityLivingBase

              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

                Ah, attend, j’avais pas vu que tu avais un gui : player.openGui(player.openGui(Main.instance, 6, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ)
                si la validation passe par le gui il te faut quand même un paquet.

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

                  @‘robin4002’:

                  Ah, attend, j’avais pas vu que tu avais un gui : player.openGui(player.openGui(Main.instance, 6, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ)
                  si la validation passe par le gui il te faut quand même un paquet.

                  D’acc j’ai laisser le packet du coup

                  J’ai ça du coup:

                  
                   @SubscribeEvent
                      public void onTimerPrison(TickEvent.WorldTickEvent event)
                      {
                      for (Map.Entry <uuid, date="">entry : ServerProxy.map2.entrySet())
                      {
                      if(ServerProxy.map2.containsKey(entry.getKey()))
                      {
                      Date date = ServerProxy.map2.get(entry.getKey());
                      System.out.println((date.getTime() - new Date().getTime()) / 1000);
                      if((date.getTime() - new Date().getTime()) / 1000 == 0)
                      {
                      System.out.println("stop");
                  
                      batonP.base.addChatMessage(new ChatComponentText("Votre temps de prison est fini."));
                      ServerProxy.map2.remove(entry.getKey());
                      }
                      }
                  
                      }
                      }
                  

                  C’est mieux ? en tout cas ça marche nickel en solo je penses que c’est bon pour le multi aussi

                  Dernier petit soucis:

                  
                  @SideOnly(Side.CLIENT)
                      @SubscribeEvent
                      public void renderGameOverlayEvent(RenderGameOverlayEvent.Pre event)
                      {
                  for (Map.Entry <uuid, date="">entry : ServerProxy.map2.entrySet())
                          {
                              if(ServerProxy.map2.containsKey(entry.getKey()))
                              {
                              Date date = ServerProxy.map2.get(entry.getKey());
                              str = EnumChatFormatting.WHITE + String.valueOf("Prison: " + (date.getTime() - new Date().getTime()) / 1000);
                                  mc.fontRendererObj.drawString(str, i - Minecraft.getMinecraft().fontRendererObj.getStringWidth(str), j, 0);
                              }
                         }
                          }
                  

                  ça m’affiche ça a mon écran, il faut l’afficher au joueur en prison, comment je peux faire ?</uuid,></uuid,>

                  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

                    Plutôt comme ça :

                    
                    @SubscribeEvent
                    public void onTimerPrison(TickEvent.WorldTickEvent event)
                    {
                    for (Map.Entry <uuid, date="">entry : ServerProxy.map2.entrySet())
                    {
                    Date date = entry.getValue();
                    System.out.println((date.getTime() - new Date().getTime()) / 1000);
                    if((date.getTime() - new Date().getTime()) / 1000 == 0)
                    {
                    System.out.println("stop");
                    Entity entity = MinecraftServer.getServer().getEntityFromUuid(entry.getKey());
                    if(entity instanceof EntityPlayer)
                    {
                    ((EntityPlayer)entity).addChatMessage(new ChatComponentText("Votre temps de prison est fini."));
                    }
                    ServerProxy.map2.remove(entry.getKey());
                    }
                    }
                    }
                    

                    ça évite une condition useless (comme tu es en train de parcourir la map, ServerProxy.map2.containsKey(entry.getKey()) sera toujours true, et je t’ai déjà dit que la variable base qui se trouve dans la classe batonP ne devrait pas exister).

                    Pour ton deuxième code, ça ne fonctionnera pas sur un serveur car ServerProxy.map2 est serveur side only.
                    Il faudrait à la connexion d’une entité lui envoyer via un paquet le temps qu’il lui reste en prison s’il est en prison et faire le calcule côté client (ou envoyer régulièrement le temps qu’il lui reste en prison).</uuid,>

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

                      @‘robin4002’:

                      Plutôt comme ça :

                      
                      @SubscribeEvent
                         public void onTimerPrison(TickEvent.WorldTickEvent event)
                         {
                             for (Map.Entry <uuid, date="">entry : ServerProxy.map2.entrySet())
                             {
                                 Date date = entry.getValue();
                                 System.out.println((date.getTime() - new Date().getTime()) / 1000);
                                 if((date.getTime() - new Date().getTime()) / 1000 == 0)
                                 {
                                     System.out.println("stop");
                                     Entity entity = MinecraftServer.getServer().getEntityFromUuid(entry.getKey());
                                     if(entity instanceof EntityPlayer)
                                     {
                                         ((EntityPlayer)entity).addChatMessage(new ChatComponentText("Votre temps de prison est fini."));
                                     }
                                     ServerProxy.map2.remove(entry.getKey());
                                 }
                             }
                         }
                      

                      ça évite une condition useless (comme tu es en train de parcourir la map, ServerProxy.map2.containsKey(entry.getKey()) sera toujours true, et je t’ai déjà dit que la variable base qui se trouve dans la classe batonP ne devrait pas exister).

                      Pour ton deuxième code, ça ne fonctionnera pas sur un serveur car ServerProxy.map2 est serveur side only.
                      Il faudrait à la connexion d’une entité lui envoyer via un paquet le temps qu’il lui reste en prison s’il est en prison et faire le calcule côté client (ou envoyer régulièrement le temps qu’il lui reste en prison).</uuid,>

                      Donc si j’ai bien compris:

                      Je fais un packet client, je l’envoi a la connexion du joueur, avec dedans le temps qu’il lui reste en prison si il est en prison et faire le calcul côté client.

                      Pour savoir si il est en prison ou non j’ai pensé faire un boolean dans le packet c’est le mieux à faire ou non?

                      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

                        Dans l’event de login tu as juste à check if(ServerProxy.map2.containsKey(event.player.getGameProfile.getId()))
                        Et si c’est true tu envoies le paquet.

                        Ensuite à l’arriver du paquet tu mets la valeur dans une variable qui peut être static (dans ta classe d’event par exemple) et qui est client seulement.
                        Et pour finir dans l’event RenderGameOverlay tu l’affiches si elle ne vaut pas 0 (et toutes les secondes tu la diminue de 1 du-coup).

                        1 réponse Dernière réponse Répondre Citer 0
                        • 1
                        • 2
                        • 1 / 2
                        • Premier message
                          Dernier message
                        Design by Woryk
                        ContactMentions Légales

                        MINECRAFT FORGE FRANCE © 2024

                        Powered by NodeBB