Récupérer les packets envoyés au joueur ?
-
Oui et ? Eclipse s’en fiche de savoir si telle ou telle ligne et plus ou moins décalée par-rapport à telle ou telle autre ligne

-
Je t’avouerai que tout ce qui est crash report c’est pas mon fort

-
Ce n’est pourtant pas compliqué, le crash report indique un NullPointerException sur la ligne 77, soit une déclaration d’une variable locale de type EntityPlayer. Je pense donc que l’UUID n’est pas le bon. Tu peux sinon avoir une instante toute facile d’un joueur en faisant Minecraft.getMinecraft().thePlayer. Si en faisant aussi ceci ça crash toujorus avec la même exception redonne nous la ligne précise, peut-être que j’ai mal compté ^^’
-
Le but n’est pas d’obtenir le joueur qui a le mod mais les joueurs présents sur le serveur. Or ```java
Minecraft.getMinecraft().thePlayer -
J’ai essayé quand même et ça a l’air de marcher ! J’ai testé pendant 4-5 min et tout fonctionne bien ! Un grand merci à vous deux

Vous imaginez même pas comment je suis content que ça marche enfin, encore merci à vous deux !
-
Peut-tu quand même mettre le code final, pour voir stp
-
Hop, le voilà :
package com.Toinou.LifeBarMod; import java.util.Comparator; import java.util.Iterator; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.client.network.NetworkPlayerInfo; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.WorldSettings; import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import com.google.common.collect.ComparisonChain; import com.google.common.collect.Ordering; public class EventClass { float Vie; float AncienneVie; @SubscribeEvent public void onRenderGameOverlay(RenderGameOverlayEvent e) { Ordering ordering = Ordering.from(new PlayerComparator()); NetHandlerPlayClient nethandler = Minecraft.getMinecraft().thePlayer.sendQueue; List list = ordering.sortedCopy(nethandler.func_175106_d()); Iterator iterator = list.iterator(); while(iterator.hasNext()) { NetworkPlayerInfo playerinfo = (NetworkPlayerInfo)iterator.next(); EntityPlayer player = Minecraft.getMinecraft().thePlayer; Vie = player.getHealth(); if(!(Vie == AncienneVie)){ double vieDouble = (double)Vie; int vieArrondie = (int) Math.ceil(vieDouble); String strVie = String.valueOf(vieArrondie); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentTranslation(strVie)); } AncienneVie = Vie; } } @SideOnly(Side.CLIENT) static class PlayerComparator implements Comparator { private PlayerComparator() {} public int comparation(NetworkPlayerInfo p_178952_1_, NetworkPlayerInfo p_178952_2_) { ScorePlayerTeam scoreplayerteam = p_178952_1_.getPlayerTeam(); ScorePlayerTeam scoreplayerteam1 = p_178952_2_.getPlayerTeam(); return ComparisonChain.start().compareTrueFirst(p_178952_1_.getGameType() != WorldSettings.GameType.SPECTATOR, p_178952_2_.getGameType() != WorldSettings.GameType.SPECTATOR).compare(scoreplayerteam != null ? scoreplayerteam.getRegisteredName() : "", scoreplayerteam1 != null ? scoreplayerteam1.getRegisteredName() : "").compare(p_178952_1_.getGameProfile().getName(), p_178952_2_.getGameProfile().getName()).result(); } public int compare(Object p_compare_1_, Object p_compare_2_) { return comparation((NetworkPlayerInfo)p_compare_1_, (NetworkPlayerInfo)p_compare_2_); } } } -
Ah ok, je pensais que tu voulais récupérer la vie de tout les joueurs sur le serveur … Si tu veux récupérer la ta vie à toi seulement c’est beacoup plus simple. Ya plein de lignes que tu peux enlever
-
Ah mince, je croyais que t’avais compris que c’était juste la vie du joueur qui a le mod, désolé si je t’ai fait perdre ton temps … Si ca ne te dérange pas, quelles sont les lignes que je peux enlever ? Est-ce que je peux juste laisser ça :
EntityPlayer player = Minecraft.getMinecraft().thePlayer; Vie = player.getHealth(); if(!(Vie == AncienneVie)){ double vieDouble = (double)Vie; int vieArrondie = (int) Math.ceil(vieDouble); String strVie = String.valueOf(vieArrondie); Minecraft.getMinecraft().thePlayer.addChatMessage(new ChatComponentTranslation(strVie)); } AncienneVie = Vie;En les laissant dans l’event bien sur.
-
private lastHealth; public void onRenderGameOverlay(RenderGameOverlayEvent e) //Encore une fois l'event à peu d'importance { EntityPlayer player = Minecraft.getMinecraft().thePlayer; if(player.getHealth() != lastHealth) player.addChatMessage(new ChatComponentText(String.valueOf((int)(Math.ceil((double)player.getHealth()))))); lastHealth = player.getHealth(); } -
Ah d’accord, c’était tout simple en fait, j’avais fait la même chose avec l’event PlayerTickEvent, mais sur les serveurs Bukkit, cela me renvoyait des choses étranges donc je cherchais d’autres moyens. Encore merci pour ton aide.

-
Aussi, fait attention à la convention, Une variable doit commencer par une lettre minuscule et si il y a un deuxieme mot le deuxieme commence par une lettre majuscule exemple: lastHealth. Tu dois les écrires préférablement en Anglais.
-
D’accord merci

-
Juste à titre informatif, il n’est impossible via un mod client side only de récupérer la vie de tous les joueurs du serveur.
Il faut forcement passer par le serveur (donc il faut un mod côté serveur). Pour la simple et bonne raison que le client ne connait que les joueurs autours de lui (les joueurs se trouvant dans les chunks chargés)
C’est pour cela que ce code :
@‘bodri’:public class EventClientListener { //Enregistré côté client seulement @SubscribeEvent public void onRenderGameOverlay(RenderGameOverlayEvent e) //J'ai pris cet event parce que c'est un event client et qu'il est exécuter sans aucune action { Ordering ordering = Ordering.from(new PlayerComparator()); //Pour trier les joueurs, c'est le système de minecraft NetHandlerPlayClient nethandler = Minecraft.getMinecraft().thePlayer.sendQueue; List list = ordering.sortedCopy(nethandler.func_175106_d()); Iterator iterator = list.iterator(); while(iterator.hasNext()) { NetworkPlayerInfo playerinfo = (NetworkPlayerInfo)iterator.next(); EntityPlayer player = Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(playerinfo.getGameProfile().getId()); Minecraft.getMinecraft().thePlayer.sendChatMessage(player.getName() + " a " + player.getHealth() + " demi-coeurs"); } } @SideOnly(Side.CLIENT) static class PlayerComparator implements Comparator // trie un fonction des teams et des modes de jeu (je crois) { private PlayerComparator() {} public int comparation(NetworkPlayerInfo p_178952_1_, NetworkPlayerInfo p_178952_2_) { ScorePlayerTeam scoreplayerteam = p_178952_1_.getPlayerTeam(); ScorePlayerTeam scoreplayerteam1 = p_178952_2_.getPlayerTeam(); return ComparisonChain.start().compareTrueFirst(p_178952_1_.getGameType() != WorldSettings.GameType.SPECTATOR, p_178952_2_.getGameType() != WorldSettings.GameType.SPECTATOR).compare(scoreplayerteam != null ? scoreplayerteam.getRegisteredName() : "", scoreplayerteam1 != null ? scoreplayerteam1.getRegisteredName() : "").compare(p_178952_1_.getGameProfile().getName(), p_178952_2_.getGameProfile().getName()).result(); } public int compare(Object p_compare_1_, Object p_compare_2_) { return comparation((NetworkPlayerInfo)p_compare_1_, (NetworkPlayerInfo)p_compare_2_); } } }Cause un NPE (certains joueurs ne sont pas présent sur le world client, donc Minecraft.getMinecraft().theWorld.getPlayerEntityByUUID(playerinfo.getGameProfile().getId()); return null, d’ou le NPE à la ligne suivante).
-
Ok, merci pour l’information