Récupérer les packets envoyés au joueur ?
-
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