RenderGameOverlay juste pour un joueur.



  • Bonsoir,

    Je cherches a faire afficher un texte sur l'écran d'un seul joueur par exemple et pas tout les qui ont le mod comment je peux faire ?

    Moi je fais comme ça mais ça affiche le texte a tout les joueurs qui on le mod:

     @SideOnly(Side.CLIENT)
        @SubscribeEvent
        public void renderGameOverlayEvent(RenderGameOverlayEvent.Pre event)
        {
            String str;
            int i = event.resolution.getScaledWidth();
            int j = event.resolution.getScaledHeight() - 80;
            Minecraft mc = Minecraft.getMinecraft();
    
                    str = EnumChatFormatting.WHITE + String.valueOf("test");
                    mc.fontRendererObj.drawString(str, i - Minecraft.getMinecraft().fontRendererObj.getStringWidth(str), j, 0);
                    System.out.println("test");
    
         }
    

    J'ai une autre question aussi:

    J'ai fais clique droit sur mon project je suis aller dans properties et dans "Resource" il y a une option: Text file encoding: de base c'est "Cp1252" moi j'ai mis "UTF-8" Car quand je compile mon mod tout les accents sont buggé mais avec le UTF-8 c'est pareil je peux choisir quoi comme encoding ?


  • Administrateurs

    Salut,
    Tout simplement avec :
    if(mc.thePlayer.getGameProfile().getId().toString() == "uuid du joueur qui doit voir le message")

    Pour l'encodage, normalement l'utf8 ne devrait pas avoir de soucis.
    Sinon le mieux reste de passer par les fichiers de lang.

    (PS : je suis en train de regarder pour ton autre demande d'aide avec les pseudos).



  • @'robin4002':

    Salut,
    Tout simplement avec :
    if(mc.thePlayer.getGameProfile().getId().toString() == "uuid du joueur qui doit voir le message")

    Pour l'encodage, normalement l'utf8 ne devrait pas avoir de soucis.
    Sinon le mieux reste de passer par les fichiers de lang.

    (PS : je suis en train de regarder pour ton autre demande d'aide avec les pseudos).

    Ah oui exact j'avais pas pensé au uuid.

    Par contre j'ai un autre soucis:

    J'ai une map avec deux object: (dans mon serverproxy)

    public static HashMap <uuid, date="">map2 = new HashMap<uuid, date="">();
    

    Du coup le problème et que il me dis que le type String et incompatible avec Date car je get la map et le getter me propose la Date et pas le UUID et si j'inverse le sens mettre Date en premier et ensuite UUID ça marchera pas non plus car il me faut récupéré le temps: (ça serra plus simple de comprendre avec le code)

    
    if(mc.thePlayer.getGameProfile().getId().toString() == ServerProxy.map2.get(mc.thePlayer.getUniqueID()))// érreur ici
                {
                str = EnumChatFormatting.WHITE + String.valueOf("Prison: " + (ServerProxy.map2.get(batonP.base).getTime() - new Date().getTime()));
                    mc.fontRendererObj.drawString(str, i - Minecraft.getMinecraft().fontRendererObj.getStringWidth(str), j, 0);
                    System.out.println("test");
                }
    

    En tout cas merci c'est super sympa se que tu fais !</uuid,></uuid,>


  • Administrateurs

    if(ServerProxy.map2.containskey(mc.thePlayer.getGameProfile().getId()))
    plutôt comme ça si tu veux check que le joueur est dans la map.



  • @'robin4002':

    if(ServerProxy.map2.containskey(mc.thePlayer.getGameProfile().getId()))
    plutôt comme ça si tu veux check que le joueur est dans la map.

    Ah oui exact merci,

    J'ai une dernière question après normalement c'est bon x)

    Pour récupéré la date je fais comment ? je vois pas du tout je suis coincé j'ai essayer ServerProxy.map2.get(new Date).getTime() plein d'autre mais ça marche pas fin ça crash en me pointant la ligne ou je veux récupéré la Date.


  • Administrateurs

    Date date = ServerProxy.map2.get(l'uuid du joueur);



  • @'robin4002':

    Date date = ServerProxy.map2.get(l'uuid du joueur);

    C'est pareil 😕

    
    [22:44:39] [Server thread/ERROR] [FML]: Index: 2 Listeners:
    [22:44:39] [Server thread/ERROR] [FML]: 0: NORMAL
    [22:44:39] [Server thread/ERROR] [FML]: 1: ASM: com.CSC.net.Events.Events@bdb938 onTimerPanneau(Lnet/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent;)V
    [22:44:39] [Server thread/ERROR] [FML]: 2: ASM: com.CSC.net.Events.Events@bdb938 onTimerPrison(Lnet/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent;)V
    [22:44:39] [Server thread/ERROR]: Encountered an unexpected exception
    java.lang.NullPointerException
    at com.CSC.net.Events.Events.onTimerPrison(Events.java:241) ~[Events.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_12_Events_onTimerPrison_WorldTickEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
    at net.minecraftforge.fml.common.FMLCommonHandler.onPreWorldTick(FMLCommonHandler.java:274) ~[FMLCommonHandler.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:762) ~[MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:681) ~[MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:159) ~[IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    [22:44:39] [Server thread/ERROR]: This crash report has been saved to: C:\Users\Admin\Desktop\CSC - Copie\run\.\crash-reports\crash-2016-11-08_22.44.39-server.txt
    [22:44:39] [Server thread/INFO]: Stopping server
    [22:44:39] [Server thread/INFO]: Saving players
    [22:44:39] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:612]: –-- Minecraft Crash Report ----
    // You should try our sister game, Minceraft!
    
    Time: 08/11/16 22:44
    Description: Exception in server tick loop
    
    

    Je te passe mon event:

        @SubscribeEvent
        public void onTimerPrison(TickEvent.WorldTickEvent event)
        {
    
        if(!ServerProxy.array.isEmpty())
            //if(base instanceof EntityPlayer)
                for(UUID u : ServerProxy.array)
                {
                Date date = ServerProxy.map2.get(Minecraft.getMinecraft().thePlayer.getGameProfile().getId());
                    if(ServerProxy.map2.containsKey(Minecraft.getMinecraft().thePlayer.getGameProfile().getId()))
                    {
                        System.out.println((date.getTime() - new Date().getTime()) / 1000);
    
                        if(ServerProxy.map2.get(batonP.base).getTime() <= new Date().getTime())
                        {
                            System.out.println(ServerProxy.map2.get(batonP.base).getTime() - new Date().getTime());
    
                           // entityIn.addChatMessage(new ChatComponentText("test " + u.getDisplayName()));
                            batonP.base.addChatMessage(new ChatComponentText("Votre temps de prison est fini."));
                            Main.network.sendToServer(new PacketMapPrison(1));
                            ServerProxy.array.remove(u);
                        }
                    }
                }
        }
    
    

  • Administrateurs

    Ton get devrais être après le containsKey.

    Et je ne comprend pas très bien l'intérêt de ta boucle for.



  • @'robin4002':

    Ton get devrais être après le containsKey.

    Et je ne comprend pas très bien l'intérêt de ta boucle for.

    Ah nickel mon problème est réglé, j'ai testé sur un mob et j'ai mon timer marcher bien, mais j'ai quitté entre temps.

    Du coup maintenant quand je me connecte en solo j'ai ça:

    
    [13:25:57] [Server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.fml.common.gameevent.TickEvent$WorldTickEvent@1666cb7:
    java.lang.NullPointerException
    at com.CSC.net.Events.Events.onTimerPrison(Events.java:233) ~[Events.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_12_Events_onTimerPrison_WorldTickEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
    at net.minecraftforge.fml.common.FMLCommonHandler.onPreWorldTick(FMLCommonHandler.java:274) [FMLCommonHandler.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:762) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:681) [MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:159) [IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    [13:25:57] [Server thread/ERROR] [FML]: Index: 2 Listeners:
    [13:25:57] [Server thread/ERROR] [FML]: 0: NORMAL
    [13:25:57] [Server thread/ERROR] [FML]: 1: ASM: com.CSC.net.Events.Events@955ef2 onTimerPanneau(Lnet/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent;)V
    [13:25:57] [Server thread/ERROR] [FML]: 2: ASM: com.CSC.net.Events.Events@955ef2 onTimerPrison(Lnet/minecraftforge/fml/common/gameevent/TickEvent$WorldTickEvent;)V
    [13:25:57] [Server thread/ERROR]: Encountered an unexpected exception
    java.lang.NullPointerException
    at com.CSC.net.Events.Events.onTimerPrison(Events.java:233) ~[Events.class:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_12_Events_onTimerPrison_WorldTickEvent.invoke(.dynamic) ~[?:?]
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) ~[ASMEventHandler.class:?]
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
    at net.minecraftforge.fml.common.FMLCommonHandler.onPreWorldTick(FMLCommonHandler.java:274) ~[FMLCommonHandler.class:?]
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:762) ~[MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:681) ~[MinecraftServer.class:?]
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:159) ~[IntegratedServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]
    [13:25:57] [Server thread/ERROR]: This crash report has been saved to: C:\Users\Admin\Desktop\CSC - Copie\run\.\crash-reports\crash-2016-11-09_13.25.57-server.txt
    [13:25:57] [Server thread/INFO]: Stopping server
    [13:25:57] [Server thread/INFO]: Saving players
    [13:25:57] [Server thread/INFO]: Saving worlds
    [13:25:57] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld
    [13:25:57] [Server thread/INFO]: Saving chunks for level 'New World'/Nether
    [13:25:57] [Server thread/INFO]: Saving chunks for level 'New World'/The End
    [13:25:57] [Server thread/INFO] [FML]: Unloading dimension 0
    [13:25:57] [Server thread/INFO] [FML]: Unloading dimension -1
    [13:25:57] [Server thread/INFO] [FML]: Unloading dimension 1
    [13:25:57] [Server thread/INFO] [FML]: Applying holder lookups
    [13:25:57] [Server thread/INFO] [FML]: Holder lookups applied
    [13:25:57] [Server thread/INFO] [FML]: The state engine was in incorrect state SERVER_STOPPING and forced into state SERVER_STOPPED. Errors may have been discarded.
    [13:25:58] [Realms Notification Availability checker #1/INFO]: Could not authorize you against Realms server: Invalid session id
    [13:25:58] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:612]: –-- Minecraft Crash Report ----
    // Hi. I'm Minecraft, and I'm a crashaholic.
    
    Time: 09/11/16 13:25
    Description: Exception in server tick loop
    
    java.lang.NullPointerException: Exception in server tick loop
    at com.CSC.net.Events.Events.onTimerPrison(Events.java:233)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_12_Events_onTimerPrison_WorldTickEvent.invoke(.dynamic)
    at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55)
    at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:140)
    at net.minecraftforge.fml.common.FMLCommonHandler.onPreWorldTick(FMLCommonHandler.java:274)
    at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:762)
    at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:681)
    at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:159)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:548)
    at java.lang.Thread.run(Thread.java:745)
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- System Details --
    Details:
    Minecraft Version: 1.8.9
    Operating System: Windows 7 (x86) version 6.1
    Java Version: 1.8.0_45, Oracle Corporation
    Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Oracle Corporation
    Memory: 651142448 bytes (620 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
    FML: MCP 9.19 Powered by Forge 11.15.1.1722 4 mods loaded, 4 mods active
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
    UCHIJAAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar) 
    UCHIJAAAA FML{8.0.99.99} [Forge Mod Loader] (forgeSrc-1.8.9-11.15.1.1722.jar) 
    UCHIJAAAA Forge{11.15.1.1722} [Minecraft Forge] (forgeSrc-1.8.9-11.15.1.1722.jar) 
    UCHIJAAAA csc{1.0} [Cite Sous Controle] (bin) 
    Loaded coremods (and transformers): 
    GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
    Profiler Position: N/A (disabled)
    Player Count: 0 / 8; []
    Type: Integrated Server (map_client.txt)
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    [13:25:58] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:612]: #@!@# Game crashed! Crash report saved to: #@!@# .\crash-reports\crash-2016-11-09_13.25.57-server.txt
    AL lib: (EE) alc_cleanup: 1 device not closed
    Java HotSpot(TM) Client VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
    
    

    Code:

    
      @SubscribeEvent
        public void onTimerPrison(TickEvent.WorldTickEvent event)
        {
            //if(base instanceof EntityPlayer)
                    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)
                        {
                            System.out.println(date.getTime() - new Date().getTime());
    
                           // 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));
                    }
                }
        }
    

    Pour se qui est de la boucle for j'avais oublier de l'enlever.

    PS:

    Ligne Events:233 c'est elle: if(ServerProxy.map2.containsKey(batonP.base.getUniqueID()))


  • Administrateurs

    batonP.base correspond à quoi ?



  • @'robin4002':

    batonP.base correspond à quoi ?

    a ça:

    
    package com.CSC.net.item;
    
    import java.util.ArrayList;
    import java.util.Date;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.ChatComponentText;
    import net.minecraft.world.World;
    
    import com.CSC.net.Main;
    import com.CSC.net.packet.PacketMapPrison;
    import com.CSC.net.proxy.ServerProxy;
    
    public class batonP extends Item
    {
    
        public static EntityLivingBase base;
    
        public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase target)
        {
            if(target instanceof EntityLivingBase)
            {
    
                player.openGui(Main.instance, 6, player.worldObj, (int)player.posX, (int)player.posY, (int)player.posZ);
                base = target;// ceci
            }
            return false;
        }
    
        public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer player)
        {
            return itemStackIn;
        }
    }
    

    Surement que l'entity est nulle vue que j'ai pas interagie avec l'item (fin j'ai pas le temps il crash direct).


  • Administrateurs

    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.



  • @'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));
                    }
                }
        }
    

  • Administrateurs

    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,>



  • @'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,>


  • Administrateurs

    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.



  • @'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


  • Administrateurs

    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.



  • @'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,>


  • Administrateurs

    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,>