Résolu Récupérer les packets envoyés au joueur ?
-
Il y a quelque chose de bizarre, dans Eclipse, la ligne 77 c’est " float Vie = player.getHealth() " et la, la ligne 77, c’est celle d’au dessus
-
Essai de remplacer la ligne 77 par :
EntityPlayer player = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(playerinfo.getGameProfile().getName());
-
Ca crash toujours
Mais je ne sais pas si tu as vu mais j’ai remarqué que dans Eclipse la ligne 77 c’est " float Vie = player.getHealth() " c’est quand je le copie, il rajoute une ligne au début ce qui décale les lignes par rapport à Eclipse.Le crash report :
–-- Minecraft Crash Report ---- WARNING: coremods are present: Contact their authors BEFORE contacting forge // Who set us up the TNT? Time: 04/10/15 14:51 Description: Unexpected error java.lang.NullPointerException: Unexpected error at com.Toinou.LifeBarMod.EventClass.onRenderGameOverlay(EventClass.java:77) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_6_EventClass_onRenderGameOverlay_RenderGameOverlayEvent.invoke(.dynamic) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) at net.minecraftforge.client.GuiIngameForge.pre(GuiIngameForge.java:854) at net.minecraftforge.client.GuiIngameForge.func_175180_a(GuiIngameForge.java:108) at net.minecraft.client.renderer.EntityRenderer.func_78480_b(EntityRenderer.java:1266) at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1055) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:345) at net.minecraft.client.main.Main.main(SourceFile:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at com.Toinou.LifeBarMod.EventClass.onRenderGameOverlay(EventClass.java:77) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_6_EventClass_onRenderGameOverlay_RenderGameOverlayEvent.invoke(.dynamic) at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:55) at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:138) at net.minecraftforge.client.GuiIngameForge.pre(GuiIngameForge.java:854) at net.minecraftforge.client.GuiIngameForge.func_175180_a(GuiIngameForge.java:108) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityPlayerSP['Toinou9120'/811898, l='MpServer', x=-11,50, y=92,00, z=-19,50]] Chunk stats: MultiplayerChunkCache: 0, 0 Level seed: 0 Level generator: ID 01 - flat, ver 0\. Features enabled: false Level generator options: Level spawn location: -1397,00,4,00,593,00 - World: (-1397,4,593), Chunk: (at 11,0,1 in -88,37; contains blocks -1408,0,592 to -1393,255,607), Region: (-3,1; contains chunks -96,32 to -65,63, blocks -1536,0,512 to -1025,255,1023) Level time: 0 game time, 0 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: false Forced entities: 2 total; [EntityPlayerSP['Toinou9120'/811898, l='MpServer', x=-11,50, y=92,00, z=-19,50], EntityWither['§e§lPlaying §f§lSKYWARS§e§l on §f§lMC.HYPIXEL.NET'/-1234, l='MpServer', x=-1393,50, y=-1,00, z=628,50]] Retry entities: 0 total; [] Server brand: BungeeCord (Hypixel) <- Spigot Server type: Non-integrated multiplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.func_72914_a(WorldClient.java:407) at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2502) at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:374) at net.minecraft.client.main.Main.main(SourceFile:120) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) – System Details -- Details: Minecraft Version: 1.8 Operating System: Windows 7 (amd64) version 6.1 Java Version: 1.7.0_75, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 253641320 bytes (241 MB) / 405528576 bytes (386 MB) up to 2134114304 bytes (2035 MB) JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.10 FML v8.0.99.99 Minecraft Forge 11.14.3.1450 Optifine OptiFine_1.8_HD_U_D5 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 UCHIJA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) UCHIJA FML{8.0.99.99} [Forge Mod Loader] (forge-1.8-11.14.3.1450.jar) UCHIJA Forge{11.14.3.1450} [Minecraft Forge] (forge-1.8-11.14.3.1450.jar) UCHIJA LBM{1.0} [LifeBarMod] (LifeBar Mod 18.jar) Loaded coremods (and transformers): GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.5.13399 Compatibility Profile Context 15.200.1062.1004' Renderer: 'AMD Radeon HD 6450' Launched Version: 1.8-Forge11.14.3.1450 LWJGL: 2.9.1 OpenGL: AMD Radeon HD 6450 GL version 4.5.13399 Compatibility Profile Context 15.200.1062.1004, ATI Technologies Inc. GL Caps: Using GL 1.3 multitexturing. Using GL 1.3 texture combiners. Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported. Shaders are available because OpenGL 2.1 is supported. VBOs are available because OpenGL 1.5 is supported. Using VBOs: Yes Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [faithful32pack.zip, OCD pack 1.8 [Perso].zip, thebaum64_sky.zip] Current Language: §eEnglish (§bColor§e) Profiler Position: N/A (disabled)
-
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