RenderGameOverlay juste pour un joueur.
-
@‘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?
-
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).