Système de nom et prénom à la place du pseudo
-
Le nom du joueur pour que le serveur puisse associer un joueur à un nom.
-
@‘jglrxavpok’:
Le nom du joueur pour que le serveur puisse associer un joueur à un nom.
Je vois mais je l’envoie ou ?
J’ai fais une map mais j’ai un crash:
[11:53:09] [main/INFO] [GradleStart]: username: floriangabet [11:53:09] [main/INFO] [GradleStart]: Extra: [] [11:53:09] [main/INFO] [GradleStart]: Running with arguments: [–userProperties, {}, --assetsDir, C:/Users/Admin/.gradle/caches/minecraft/assets, --assetIndex, 1.8, --accessToken, {REDACTED}, --version, 1.8, --username, floriangabet, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker] [11:53:09] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker [11:53:09] [main/INFO] [FML]: Forge Mod Loader version 8.0.37.1334 for Minecraft 1.8 loading [11:53:09] [main/INFO] [FML]: Java is Java HotSpot(TM) Client VM, version 1.8.0_45, running on Windows 7:x86:6.1, installed at C:\Program Files (x86)\Java\jdk1.8.0_45\jre [11:53:09] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation [11:53:09] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker [11:53:09] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin [11:53:09] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin [11:53:09] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [11:53:09] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [11:53:09] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work! [11:53:10] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [11:53:10] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [11:53:10] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [11:53:10] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker [11:53:10] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker [11:53:10] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker [11:53:10] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [11:53:10] [Client thread/INFO]: Setting user: floriangabet [11:53:12] [Client thread/INFO]: LWJGL Version: 2.9.1 [11:53:13] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization [11:53:13] [Client thread/INFO] [FML]: MinecraftForge v11.14.1.1334 Initialized [11:53:13] [Client thread/INFO] [FML]: Replaced 204 ore recipies [11:53:13] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization [11:53:13] [Client thread/INFO] [FML]: Searching C:\Users\Admin\Desktop\CSC\eclipse\mods for mods [11:53:14] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load [11:53:14] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, csc] at CLIENT [11:53:14] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, csc] at SERVER [11:53:15] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Cite Sous Controle [11:53:15] [Client thread/INFO] [FML]: Processing ObjectHolder annotations [11:53:15] [Client thread/INFO] [FML]: Found 384 ObjectHolder annotations [11:53:15] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0 [11:53:15] [Client thread/INFO] [STDOUT]: [com.CSC.net.block.CSCBlocks:registerItemsBlocksModels:50]: registerItemsBlocksModels [11:53:15] [Client thread/INFO] [FML]: Applying holder lookups [11:53:15] [Client thread/INFO] [FML]: Holder lookups applied [11:53:15] [Sound Library Loader/INFO]: Starting up SoundSystem… [11:53:15] [Thread-7/INFO]: Initializing LWJGL OpenAL [11:53:15] [Thread-7/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) [11:53:16] [Thread-7/INFO]: OpenAL initialized. [11:53:16] [Sound Library Loader/INFO]: Sound engine started [11:53:31] [Client thread/INFO]: Created: 4096x2048 textures-atlas [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_batonP#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_panierlinge#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_lesive#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_coli#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_balai#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_propre_sec#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_linge_propre_mouiller#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_medic#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_infoplayer#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_linge_sale#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_belier#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_clefm#inventory not found [11:53:31] [Client thread/ERROR] [FML]: Model definition for location csc:item_lingette#inventory not found [11:53:32] [Client thread/INFO] [STDOUT]: [com.CSC.net.Main:init:115]: [11:53:32] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods [11:53:32] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Cite Sous Controle [11:53:32] [Client thread/INFO]: SoundSystem shutting down… [11:53:32] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com [11:53:32] [Sound Library Loader/INFO]: Starting up SoundSystem… [11:53:32] [Thread-9/INFO]: Initializing LWJGL OpenAL [11:53:32] [Thread-9/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) [11:53:32] [Thread-9/INFO]: OpenAL initialized. [11:53:33] [Sound Library Loader/INFO]: Sound engine started [11:53:33] [Client thread/INFO]: Created: 4096x2048 textures-atlas [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_batonP#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_panierlinge#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_lesive#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_coli#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_balai#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_propre_sec#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_linge_propre_mouiller#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_medic#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_infoplayer#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_linge_sale#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_belier#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_clefm#inventory not found [11:53:34] [Client thread/ERROR] [FML]: Model definition for location csc:item_lingette#inventory not found [11:53:34] [Client thread/INFO] [STDOUT]: [com.CSC.net.proxy.ClientProxy:onGuiOpen:175]: net.minecraft.client.gui.GuiMainMenu@18f9bb5 [11:53:37] [Client thread/INFO] [STDOUT]: [com.CSC.net.proxy.ClientProxy:onGuiOpen:175]: net.minecraft.client.gui.GuiSelectWorld@8ec235 [11:53:37] [Client thread/INFO] [STDOUT]: [com.CSC.net.proxy.ClientProxy:onGuiOpen:175]: com.CSC.net.GUI.PrenomGui@145ef9 true [11:53:39] [Client thread/FATAL]: Reported exception thrown! net.minecraft.util.ReportedException: Updating screen events at net.minecraft.client.Minecraft.runTick(Minecraft.java:1766) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1080) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:376) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:117) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_45] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_45] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_45] at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_45] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?] at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?] at GradleStart.main(Unknown Source) [start/:?] Caused by: java.lang.NullPointerException at com.CSC.net.GUI.PrenomGui.actionPerformed(PrenomGui.java:100) ~[PrenomGui.class:?] at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:510) ~[GuiScreen.class:?] at com.CSC.net.GUI.PrenomGui.mouseClicked(PrenomGui.java:77) ~[PrenomGui.class:?] at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:602) ~[GuiScreen.class:?] at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:571) ~[GuiScreen.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752) ~[Minecraft.class:?] … 11 more [11:53:39] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:660]: –-- Minecraft Crash Report ---- // Shall we play a game? Time: 21/10/16 11:53 Description: Updating screen events java.lang.NullPointerException: Updating screen events at com.CSC.net.GUI.PrenomGui.actionPerformed(PrenomGui.java:100) at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:510) at com.CSC.net.GUI.PrenomGui.mouseClicked(PrenomGui.java:77) at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:602) at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:571) at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1080) at net.minecraft.client.Minecraft.run(Minecraft.java:376) at net.minecraft.client.main.Main.main(Main.java:117) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Stacktrace: at com.CSC.net.GUI.PrenomGui.actionPerformed(PrenomGui.java:100) at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:510) at com.CSC.net.GUI.PrenomGui.mouseClicked(PrenomGui.java:77) at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:602) at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:571) -- Affected screen -- Details: Screen name: com.CSC.net.GUI.PrenomGui Stacktrace: at net.minecraft.client.Minecraft.runTick(Minecraft.java:1752) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1080) at net.minecraft.client.Minecraft.run(Minecraft.java:376) at net.minecraft.client.main.Main.main(Main.java:117) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) at GradleStart.main(Unknown Source) -- System Details -- Details: Minecraft Version: 1.8 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: 850573872 bytes (811 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB) JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP v9.10 FML v8.0.37.1334 Minecraft Forge 11.14.1.1334 4 mods loaded, 4 mods active mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available FML{8.0.37.1334} [Forge Mod Loader] (forgeSrc-1.8-11.14.1.1334.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available Forge{11.14.1.1334} [Minecraft Forge] (forgeSrc-1.8-11.14.1.1334.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available csc{1.0} [Cite Sous Controle] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available Loaded coremods (and transformers): Launched Version: 1.8 LWJGL: 2.9.1 OpenGL: GeForce GTX 960/PCIe/SSE2 GL version 4.5.0 NVIDIA 368.39, NVIDIA Corporation 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: No Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: [] Current Language: Français (France) Profiler Position: N/A (disabled) [11:53:39] [Client thread/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:660]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Admin\Desktop\CSC\eclipse\.\crash-reports\crash-2016-10-21_11.53.39-client.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 releaseClasse:
package com.CSC.net.GUI; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.UUID; import org.lwjgl.input.Keyboard; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import com.CSC.net.Main; public class PrenomGui extends GuiScreen { private static boolean erreur; public static HashMap<UUID, String> map = new HashMap<UUID, String>(); public static boolean b; private int valider; private int nom; private int prenom; public static GuiTextField text; public static GuiTextField text2; public PrenomGui() { } @Override public void initGui() { valider = 0; nom = 1; prenom = 2; text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20); text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20); text.setFocused(false); text2.setFocused(true); text.setMaxStringLength(20); text2.setMaxStringLength(20); this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider")); super.initGui(); } @Override public void mouseClicked(int i, int j, int k) { text.mouseClicked(i, j, k); text2.mouseClicked(i, j, k); try { super.mouseClicked(i, j, k); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { text.textboxKeyTyped(typedChar, keyCode); text2.textboxKeyTyped(typedChar, keyCode); super.keyTyped(typedChar, keyCode); } @Override protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3) { if (!map.containsKey(Minecraft.getMinecraft().thePlayer.getUniqueID()))// crash surement car mc est // client et il faut du serveur // /*\ Ligne 100 { System.out.println(b); b = false; map.put(Minecraft.getMinecraft().thePlayer.getUniqueID(), text2.getText() + "_" + text.getText()); System.out.println(map.get(Minecraft.getMinecraft().thePlayer.getUniqueID())); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else { map.remove(Minecraft.getMinecraft().thePlayer.getUniqueID()); System.out.println(b); b = false; map.put(Minecraft.getMinecraft().thePlayer.getUniqueID(), text2.getText() + "_" + text.getText()); System.out.println(map.get(Minecraft.getMinecraft().thePlayer.getUniqueID())); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } } else if (text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3) { if (!map.containsKey(Minecraft.getMinecraft().thePlayer.getUniqueID())) { System.out.println(b); b = false; map.put(Minecraft.getMinecraft().thePlayer.getUniqueID(), text2.getText()); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else { map.remove(Minecraft.getMinecraft().thePlayer.getUniqueID()); System.out.println(b); b = false; map.put(Minecraft.getMinecraft().thePlayer.getUniqueID(), text2.getText()); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } } else { erreur = true; } break; default: erreur = false; break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { this.drawDefaultBackground(); text.drawTextBox(); text2.drawTextBox(); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Nom", width / 2 - 80, 135, 0); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0); super.drawScreen(mouseX, mouseY, partialTick); if (erreur) { this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !", this.width / 2 - 110, this.height / 2 - 50, 0); } } @Override public void onGuiClosed() { } }event:
@SubscribeEvent public void test(PlayerEvent.NameFormat e) { if(PrenomGui.b) { e.displayname = PrenomGui.map.get(e.entityPlayer.getUniqueID()); System.out.println(e.displayname); } else { PrenomGui.b = false; } } -
1. La map doit être stockée côté serveur, ça sert absolument à rien de la mettre dans le GUI.
2. Tu utilises ‘Minecraft::thePlayer’, mais es-tu sûr qu’il existe? Parce que si ton GUI est ouvert sans être dans un monde MC, thePlayer renvoit null. Pour récupérer l’ID du joueur, utilise plutôt GameProfile (il y a un getter dans Minecraft de mémoire) -
@‘jglrxavpok’:
1. La map doit être stockée côté serveur, ça sert absolument à rien de la mettre dans le GUI.
2. Tu utilises ‘Minecraft::thePlayer’, mais es-tu sûr qu’il existe? Parce que si ton GUI est ouvert sans être dans un monde MC, thePlayer renvoit null. Pour récupérer l’ID du joueur, utilise plutôt GameProfile (il y a un getter dans Minecraft de mémoire)Quand tu dis stockée une map côté serveur tu peux t’expliqué mieux je comprends pas ou je peux la stocké.
Oui mon gui est ouvert sans êtres dans un monde mc se qui explique le crash d’accord !
Avec GameProfile je peux avoir l’uuid du joueur du coup ?
-
Pour le GameProfile, oui
Pour la map côté serveur, dans ton proxy serveur (par exemple), fais une map et ajoute lui du contenu lorsque tu reçois un packet pour les noms.
-
@‘jglrxavpok’:
Pour le GameProfile, oui
Pour la map côté serveur, dans ton proxy serveur (par exemple), fais une map et ajoute lui du contenu lorsque tu reçois un packet pour les noms.
Du coup ça rend ça:
ServerProxy:
package com.CSC.net.proxy; import java.io.File; import java.util.HashMap; import java.util.UUID; import com.CSC.net.properties.EnumRank; public class ServerProxy extends CommonProxy { public static final HashMap<String, String> map = new HashMap<String, String>(); @Override public void preInit(File configFile) { super.preInit(configFile); // code } @Override public void init() { super.init(); } }Classe gui:
package com.CSC.net.GUI; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.UUID; import org.lwjgl.input.Keyboard; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import com.CSC.net.Main; import com.CSC.net.proxy.ServerProxy; import com.mojang.authlib.GameProfile; public class PrenomGui extends GuiScreen { private static boolean erreur; public static boolean b; private int valider; private int nom; private int prenom; public static GuiTextField text; public static GuiTextField text2; public PrenomGui() { } @Override public void initGui() { valider = 0; nom = 1; prenom = 2; text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20); text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20); text.setFocused(false); text2.setFocused(true); text.setMaxStringLength(20); text2.setMaxStringLength(20); this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider")); super.initGui(); } @Override public void mouseClicked(int i, int j, int k) { text.mouseClicked(i, j, k); text2.mouseClicked(i, j, k); try { super.mouseClicked(i, j, k); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { text.textboxKeyTyped(typedChar, keyCode); text2.textboxKeyTyped(typedChar, keyCode); super.keyTyped(typedChar, keyCode); } @Override protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3) { if (!ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID()))// crash car mc // est client et // il faut du // serveur // surement /*\ // Ligne 100 { System.out.println(b); b = false; ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText()); System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else { ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID()); System.out.println(b); b = false; ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText()); System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } } else if (text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3) { if (!ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) { System.out.println(b); b = false; ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText()); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else { ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID()); System.out.println(b); b = false; ServerProxy.map.put(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText()); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } } else { erreur = true; } break; default: erreur = false; break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { this.drawDefaultBackground(); text.drawTextBox(); text2.drawTextBox(); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Nom", width / 2 - 80, 135, 0); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0); super.drawScreen(mouseX, mouseY, partialTick); if (erreur) { this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !", this.width / 2 - 110, this.height / 2 - 50, 0); } } @Override public void onGuiClosed() { } }Event:
@SubscribeEvent public void test(PlayerEvent.NameFormat e) { if(PrenomGui.b) { e.displayname = ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()); System.out.println(e.displayname); } else { PrenomGui.b = false; } } -
Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.
Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
- Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
- Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte. -
@‘LeBossMax2’:
Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.
Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
- Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
- Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?
-
@‘floriangabet’:
@‘LeBossMax2’:
Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.
Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
- Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
- Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?
Oui et non : Coté client : tu laisse le serveur proxy, tu n’a pas besoin d’une map vu que tu n’a qu’un nom à enregistrer tu met juste une variable de type String. Et ne la met pas dans ton guiscreen car quand le joueur aura fermé le gui, tu n’aura plus le nom. Il faut donc l’enregistrer quelque par comme sur le client proxy, si tu veux. ( et pas besion de l’id du joueur coté client)
Ensuite tu envoi juste le nom_prenom par un packet quand le joueur se connecte et coté serveur, tu ajoute le nom_prenom avec l’id du joueur dans la map du serveur proxy. -
@‘LeBossMax2’:
@‘floriangabet’:
@‘LeBossMax2’:
Le problème, c’est que “actionPerformed” est appelé coté client et que tu essaye d’accéder au serveurProxy.
Pour pouvoir t’aider, j’ai juste une petite question : ton gui s’ouvre lorsque l’on est dans un monde ou on est sur le menu principale ?
- Si tu est sur un monde, alors tu envoie un packet au serveur avec le Nom que le joueur a choisi et le serveur s’occupera d’enregistrer le nom dans la map du serveurProxy.
- Si tu est sur le menu principale, il faut enregistrer le nom coté client et l’envoyer au serveur quand tu t’y connecte.Je suis sur le menu principal donc j’enregistrer le nom côté client c’est a dire que le server proxy on laisse, je met ma map dans mon guiscreen je put donc l’id du joueur avec son nom_prénom et une fois que il se connecte au serveur j’envoie son nom_prénom par un packet au serveur c’est ça?
Oui et non : Coté client : tu laisse le serveur proxy, tu n’a pas besoin d’une map vu que tu n’a qu’un nom à enregistrer tu met juste une variable de type String. Et ne la met pas dans ton guiscreen car quand le joueur aura fermé le gui, tu n’aura plus le nom. Il faut donc l’enregistrer quelque par comme sur le client proxy, si tu veux. ( et pas besion de l’id du joueur coté client)
Ensuite tu envoi juste le nom_prenom par un packet quand le joueur se connecte et coté serveur, tu ajoute le nom_prenom avec l’id du joueur dans la map du serveur proxy.D’accord je vois,
le seul truc que je comprends pas c’est: je dois utiliser obligatoirement cet event pour le changement de pseudo: PlayerEvent.NameFormat .
Mais toi tu me dis d’envoyer côté client le string du nom_prénom quand le joueur se connecte et côté serveur ajouter le nom_prénom et l’UUID du joueur dans la map mais pour cela je dois utiliser cet event : PlayerEvent.PlayerLoggedInEvent . Comment je peux faire du coup ?
-
Tu peux très bien faire les deux.
Envoyer le nom lors du login au serveur puis avec PlayerEvent.NameFormat changer le nom.Je ne vois pas ce qui cause problème.
-
Bon je sais pas trop se que j’ai fais dites moi si c’est presque ça ou si je suis loin:
Events:
@SubscribeEvent public void changedisplayname(PlayerEvent.NameFormat e) { if(PrenomGui.b) { e.displayname = ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID()); System.out.println(e.displayname); } else { PrenomGui.b = false; } } @SubscribeEvent public void onconnection(net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent e) { EntityPlayerMP playermp = (EntityPlayerMP)e.player; Main.network.sendTo(new PacketNameClient(ServerProxy.name), playermp); }Packets:
package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.ByteBufUtils; 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 PacketNameClient implements IMessage{ private String string; public PacketNameClient(String s) { this.string = s; } public PacketNameClient() { } @Override public void fromBytes(ByteBuf buf) { this.string = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, string); } public static class Handler implements IMessageHandler <packetnameclient, imessage="">{ @SideOnly(Side.CLIENT) @Override public IMessage onMessage(PacketNameClient message, MessageContext ctx) { System.out.println(message.string); return null; } } }package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.ByteBufUtils; 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 PacketNameServer implements IMessage{ private String string1; private String string2; public PacketNameServer(String s1, String s2) { this.string1 = s1; this.string2 = s2; } public PacketNameServer() { } @Override public void fromBytes(ByteBuf buf) { this.string1 = ByteBufUtils.readUTF8String(buf); this.string2 = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, string1); ByteBufUtils.writeUTF8String(buf, string2); } public static class Handler implements IMessageHandler <packetnameserver, imessage="">{ @SideOnly(Side.SERVER) @Override public IMessage onMessage(PacketNameServer message, MessageContext ctx) { ServerProxy.map.put(message.string1, message.string2); return null; } } }Guiscreen:
package com.CSC.net.GUI; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.UUID; import org.lwjgl.input.Keyboard; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; import com.CSC.net.Main; import com.CSC.net.packet.PacketNameServer; import com.CSC.net.proxy.ServerProxy; import com.mojang.authlib.GameProfile; public class PrenomGui extends GuiScreen { private static boolean erreur; public static boolean b; private int valider; private int nom; private int prenom; public static GuiTextField text; public static GuiTextField text2; public PrenomGui() { } @Override public void initGui() { valider = 0; nom = 1; prenom = 2; text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20); text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20); text.setFocused(false); text2.setFocused(true); text.setMaxStringLength(20); text2.setMaxStringLength(20); this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider")); super.initGui(); } @Override public void mouseClicked (int i , int j, int k) { text.mouseClicked (i, j, k); text2.mouseClicked (i, j, k); try { super.mouseClicked (i, j, k); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { text.textboxKeyTyped(typedChar, keyCode); text2.textboxKeyTyped(typedChar, keyCode); super.keyTyped(typedChar, keyCode); } @Override protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3) { System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name)); System.out.println(ServerProxy.name); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else if(text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3) { System.out.println(b); b = false; ServerProxy.name = text2.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name)); System.out.println(ServerProxy.name); erreur = false; mc.displayGuiScreen(new GuiSelectWorld(this)); } else { erreur = true; } break; default: erreur = false; break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { this.drawDefaultBackground(); text.drawTextBox(); text2.drawTextBox(); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0); super.drawScreen(mouseX, mouseY, partialTick); if (erreur) { this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !", this.width / 2 - 110, this.height / 2 - 50, 0); } } @Override public void onGuiClosed() { } }Registers Packets:
network.registerMessage(PacketNameClient.Handler.class, PacketNameClient.class, 3, Side.CLIENT); network.registerMessage(PacketNameServer.Handler.class, PacketNameServer.class, 4, Side.SERVER);ServerProxy:
package com.CSC.net.proxy; import java.io.File; import java.util.HashMap; import java.util.UUID; import com.CSC.net.properties.EnumRank; public class ServerProxy extends CommonProxy{ public static HashMap <string, string="">map = new HashMap<string, string="">(); public static String name; @Override public void preInit(File configFile) { super.preInit(configFile); //code } @Override public void init() { super.init(); } }Merci d’avance !</string,></string,></packetnameserver,></packetnameclient,>
-
Help ?
-
Je viens de faire quelque vérification, PlayerEvent.NameFormat est un event commun (client et serveur) donc ce que tu as fait actuellement ne risque pas de fonctionner.
Il faudrait plutôt :
- garder dans une variable client le pseudo changé et l’envoyer au serveur lors de la connexion (voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement).
- sauvegarder côté serveur le pseudo dans une map de joueur + l’enregistrer dans le monde ou enregistrer directement dans le nbt du joueur (pas besoin de map alors)
- envoyer également au client son pseudo custom lors de la connexion.
-
@‘robin4002’:
Je viens de faire quelque vérification, PlayerEvent.NameFormat est un event commun (client et serveur) donc ce que tu as fait actuellement ne risque pas de fonctionner.
Il faudrait plutôt :
- garder dans une variable client le pseudo changé et l’envoyer au serveur lors de la connexion (voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement).
- sauvegarder côté serveur le pseudo dans une map de joueur + l’enregistrer dans le monde ou enregistrer directement dans le nbt du joueur (pas besoin de map alors)
- envoyer également au client son pseudo custom lors de la connexion.
Je vais faire comme tu as dis ça a l’air plus simple. “(voir simplement proposer le changement de pseudo uniquement si on est sur le serveur et l’envoyer directement)”
Donc j’ouvre mon gui quand je me connecte.
Une fois ouvert je choisis mon nom puis prénom, je valide…
J’envois donc un packet au serveur contenant deux string, L’UUID et le nom et le prénom espacé d’un tiré du 8 (Nom + “_” + Prénom)
Dans ce packet j’ajoute tout ça dans une hashmap qui se situe dans le ServerProxy.
L’event NameFormat récupére donc le nom et prénom du joueur via la hashmap
et j’ai pas fais le reste…Je crash au moment de validé mon nom prénom. (au moment ou j’envois ça au serveur avec le packet)
Je vous passe mon gui et mon packet:
GUI:
package com.CSC.net.GUI; import java.io.IOException; import com.CSC.net.Main; import com.CSC.net.packet.PacketNameServer; import com.CSC.net.proxy.ServerProxy; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; public class GuiJoinServer extends GuiScreen { private static boolean erreur; public static boolean b; private int valider; private int nom; private int prenom; public static GuiTextField text; public static GuiTextField text2; public GuiJoinServer() { } @Override public void initGui() { valider = 0; nom = 1; prenom = 2; text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20); text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20); text.setFocused(false); text2.setFocused(true); text.setMaxStringLength(20); text2.setMaxStringLength(20); this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider")); super.initGui(); } @Override public void mouseClicked (int i , int j, int k) { text.mouseClicked (i, j, k); text2.mouseClicked (i, j, k); try { super.mouseClicked (i, j, k); } catch (IOException e) { e.printStackTrace(); } } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { text.textboxKeyTyped(typedChar, keyCode); text2.textboxKeyTyped(typedChar, keyCode); super.keyTyped(typedChar, keyCode); } @Override protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3) { System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText())); System.out.println(ServerProxy.name); erreur = false; mc.thePlayer.closeScreen(); } // else if(text.getText().equals("72") && !text2.getText().equals("") // && text2.getText().length() > 3) // { // System.out.println(b); // b = false; // ServerProxy.name = text2.getText(); // Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), ServerProxy.name)); // System.out.println(ServerProxy.name); // erreur = false; // mc.thePlayer.closeScreen(); // } // else { // erreur = true; // } break; default: erreur = false; break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { this.drawDefaultBackground(); text.drawTextBox(); text2.drawTextBox(); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0); super.drawScreen(mouseX, mouseY, partialTick); if (erreur) { this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !", this.width / 2 - 110, this.height / 2 - 50, 0); } } @Override public void onGuiClosed() { } }Packet:
package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import io.netty.buffer.ByteBuf; import net.minecraftforge.fml.common.network.ByteBufUtils; 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 PacketNameServer implements IMessage{ private String string1; private String string2; public PacketNameServer(String s1, String s2) { this.string1 = s1; this.string2 = s2; } public PacketNameServer() { } @Override public void fromBytes(ByteBuf buf) { this.string1 = ByteBufUtils.readUTF8String(buf); this.string2 = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, string1); ByteBufUtils.writeUTF8String(buf, string2); } public static class Handler implements IMessageHandler <packetnameserver, imessage="">{ @SideOnly(Side.SERVER) @Override public IMessage onMessage(PacketNameServer message, MessageContext ctx) { ServerProxy.map.put(message.string1, message.string2); return null; } } }Crash:
[20:25:39] [Netty Server IO #1/ERROR] [FML]: There was a critical exception handling a packet on channel csc: java.lang.NoSuchMethodError: com.CSC.net.packet.PacketNameServer$Handler.onMessage(Lcom/CSC/net/packet/PacketNameServer;Lnet/minecraftforge/fml/common/network/simpleimpl/MessageContext;)Lnet/minecraftforge/fml/common/network/simpleimpl/IMessage; at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:1) ~[PacketNameServer$Handler.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:37) ~[SimpleChannelHandlerWrapper.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:17) ~[SimpleChannelHandlerWrapper.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) ~[SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[MessageToMessageDecoder.class:4.0.15.Final] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) ~[DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) ~[DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:4.0.15.Final] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:4.0.15.Final] at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:88) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:144) [NetworkManager.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:469) [NetworkManager.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:398) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:226) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:49) [NetworkDispatcher.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final] at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:312) [LocalChannel.class:4.0.15.Final] at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:44) [LocalChannel.class:4.0.15.Final] at io.netty.channel.local.LocalChannel$6.run(LocalChannel.java:298) [LocalChannel$6.class:4.0.15.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) [SingleThreadEventExecutor.class:4.0.15.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [NioEventLoop.class:4.0.15.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:4.0.15.Final] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45] [20:25:39] [Server thread/INFO]: floriangabet lost connection: TextComponent{text='A fatal error has occured, this connection is terminated', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null, insertion=null}} [20:25:39] [Server thread/INFO]: floriangabet a quitté la partie [20:25:39] [Server thread/INFO]: Stopping singleplayer server as player logged out [20:25:39] [Server thread/INFO]: Stopping server [20:25:39] [Server thread/INFO]: Saving players [20:25:39] [Server thread/INFO]: Saving worlds [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/Overworld [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/Nether [20:25:39] [Server thread/INFO]: Saving chunks for level 'New World'/The End [20:25:40] [Server thread/INFO] [FML]: Unloading dimension 0 [20:25:40] [Server thread/INFO] [FML]: Unloading dimension -1 [20:25:40] [Server thread/INFO] [FML]: Unloading dimension 1 [20:25:40] [Server thread/INFO] [FML]: Applying holder lookups [20:25:40] [Server thread/INFO] [FML]: Holder lookups appliedMerci :)</packetnameserver,>
-
Retires le @SideOnly(Side.SERVER)
-
@‘robin4002’:
Retires le @SideOnly(Side.SERVER)
Ah ouais merci

Donc je suis bon je crois il me manque plus que a save ça dans le worldsaveddata.
Tu peux me donner un peu plus d’indice pour la worldsaved s’il te plait ?
En tout cas merci

-
-
@‘robin4002’:
Merci,
C’est bien comme ça:package com.CSC.net.save; import java.util.Iterator; import java.util.Map.Entry; import com.CSC.net.Events.Events; import com.CSC.net.Events.Events.Position; import com.CSC.net.proxy.ServerProxy; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; import net.minecraft.world.storage.MapStorage; import net.minecraftforge.common.DimensionManager; public class NameSave extends WorldSavedData{ public static NameSave instance; /** /* Ce constructeur est obligatoire */ public static NameSave load(World w) { if(DimensionManager.getWorlds().length < 1) return null; MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); //On récupère la mapStorage de la dimension final String KEY = Events.Key; // Si vous avez choisis de faire une fonction static String. Quoiqu'il en soit, la variable KEY que nous utiliserons ici représente votre clé. Si vous utilisez un attribut static, utilisez le directement. NameSave result = (NameSave)storage.loadData(NameSave.class, KEY);//On charge nos données if (result == null) { //Si nos données n'existe pas, … result = new NameSave(KEY);// Alors on les crée ... storage.setData(KEY, result);// Et on les ajoutes à la mapStorage. } return result; //On retourne notre objet qui représente les données a sauvegarder } public NameSave(String key) { super(key); instance = this; } @Override public void readFromNBT(NBTTagCompound compound) { NBTTagList keyList = (NBTTagList)compound.getTag("keyList"); for(int i = 0; i < keyList.tagCount(); i++) { NBTTagCompound keyTag = keyList.getCompoundTagAt(i); ServerProxy.map.put(keyTag.getString("uuid"), keyTag.getString("name")); } } @Override public void writeToNBT(NBTTagCompound compound) { NBTTagList keyList = new NBTTagList(); Iterator<entry<string, string="">> iterator = ServerProxy.map.entrySet().iterator(); while(iterator.hasNext()) { NBTTagCompound keyTag = new NBTTagCompound(); Entry <string, string="">entry = iterator.next(); keyTag.setString("uuid", entry.getKey().toString()); keyTag.setString("name", entry.getKey().toString()); keyList.appendTag(keyTag); } compound.setTag("keyList", keyList); } }EDIT:
Le markdirty génère un crash.
Packet:
package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import com.CSC.net.save.NameSave; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.network.ByteBufUtils; 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 PacketNameServer implements IMessage{ private String string1; private int i; private String string2; public PacketNameServer(String s1, String s2, Integer in) { this.string1 = s1; this.string2 = s2; this.i = in; } public PacketNameServer() { } @Override public void fromBytes(ByteBuf buf) { this.string1 = ByteBufUtils.readUTF8String(buf); this.string2 = ByteBufUtils.readUTF8String(buf); this.i = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, string1); ByteBufUtils.writeUTF8String(buf, string2); buf.writeInt(i); } public static class Handler implements IMessageHandler <packetnameserver, imessage="">{ @Override public IMessage onMessage(PacketNameServer message, MessageContext ctx) { switch(message.i) { case 1: ServerProxy.map.put(message.string1, message.string2); NameSave.instance.markDirty(); // break; case 2: ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID()); NameSave.instance.markDirty();// break; default: break; } return null; } } }Crash:
[22:14:03] [Netty Server IO #1/ERROR] [FML]: SimpleChannelHandlerWrapper exception java.lang.NullPointerException at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:58) ~[PacketNameServer$Handler.class:?] at com.CSC.net.packet.PacketNameServer$Handler.onMessage(PacketNameServer.java:1) ~[PacketNameServer$Handler.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:37) ~[SimpleChannelHandlerWrapper.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:17) ~[SimpleChannelHandlerWrapper.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) ~[SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:4.0.15.Final] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:4.0.15.Final] at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:88) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:144) [NetworkManager.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:469) [NetworkManager.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:398) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:226) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:49) [NetworkDispatcher.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:103) [SimpleChannelInboundHandler.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:338) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:324) [DefaultChannelHandlerContext.class:4.0.15.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:4.0.15.Final] at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:312) [LocalChannel.class:4.0.15.Final] at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:44) [LocalChannel.class:4.0.15.Final] at io.netty.channel.local.LocalChannel$6.run(LocalChannel.java:298) [LocalChannel$6.class:4.0.15.Final] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:354) [SingleThreadEventExecutor.class:4.0.15.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:353) [NioEventLoop.class:4.0.15.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:4.0.15.Final] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]Register NameSave:
if(NameSave.instance != null) { NameSave.load(event.getServer().getEntityWorld()); }Mon gui:
package com.CSC.net.GUI; import java.io.IOException; import com.CSC.net.Main; import com.CSC.net.packet.PacketNameServer; import com.CSC.net.proxy.ServerProxy; import com.CSC.net.save.NameSave; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiSelectWorld; import net.minecraft.client.gui.GuiTextField; import net.minecraft.util.EnumChatFormatting; public class GuiJoinServer extends GuiScreen { private static boolean erreur; public static boolean b; private int valider; private int nom; private int prenom; public static GuiTextField text; public static GuiTextField text2; public GuiJoinServer() { } @Override public void initGui() { valider = 0; nom = 1; prenom = 2; text = new GuiTextField(nom, fontRendererObj, width / 2, 130, 64, 20); text2 = new GuiTextField(prenom, fontRendererObj, width / 2, 100, 64, 20); text.setFocused(false); text2.setFocused(true); text.setMaxStringLength(20); text2.setMaxStringLength(20); this.buttonList.add(new GuiButton(valider, width / 2 - 123, 200, 40, 20, "Valider")); super.initGui(); } @Override public void mouseClicked (int i , int j, int k) { text.mouseClicked (i, j, k); text2.mouseClicked (i, j, k); try { super.mouseClicked (i, j, k); } catch (IOException e) { e.printStackTrace(); } } @Override protected void keyTyped(char typedChar, int keyCode) throws IOException { text.textboxKeyTyped(typedChar, keyCode); text2.textboxKeyTyped(typedChar, keyCode); super.keyTyped(typedChar, keyCode); } @Override protected void actionPerformed(GuiButton button) throws IOException { switch (button.id) { case 0: if (!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3 && !ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) { System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 1)); System.out.println(ServerProxy.name); System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); erreur = false; mc.thePlayer.closeScreen(); } else if(!text.getText().equals("") && text.getText().length() > 3 && !text2.getText().equals("") && text2.getText().length() > 3 && ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) { System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 2));// 2 = remove / 1 = add Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText(), 1)); System.out.println(ServerProxy.name); System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); erreur = false; mc.thePlayer.closeScreen(); } else if(text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3 && !ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) { System.out.println(b); b = false; ServerProxy.name = text2.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 1)); System.out.println(ServerProxy.name); erreur = false; mc.thePlayer.closeScreen(); } else if(text.getText().equals("72") && !text2.getText().equals("") && text2.getText().length() > 3 && ServerProxy.map.containsKey(Minecraft.getMinecraft().getSession().getPlayerID())) { System.out.println(b); b = false; ServerProxy.name = text2.getText(); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 2)); Main.network.sendToServer(new PacketNameServer(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText(), 1)); System.out.println(ServerProxy.name); erreur = false; mc.thePlayer.closeScreen(); } else { erreur = true; } break; default: erreur = false; break; } super.actionPerformed(button); } @Override public void updateScreen() { super.updateScreen(); } public void drawScreen(int mouseX, int mouseY, float partialTick) { this.drawDefaultBackground(); text.drawTextBox(); text2.drawTextBox(); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY +"Nom", width / 2 - 80, 135, 0); this.drawString(this.fontRendererObj, EnumChatFormatting.GRAY + "Prénom", width / 2 - 80, 105, 0); super.drawScreen(mouseX, mouseY, partialTick); if (erreur) { this.drawString(fontRendererObj, "§cVotre nom et/ou prénom est/sont vide ou trop court !", this.width / 2 - 110, this.height / 2 - 50, 0); } } @Override public void onGuiClosed() { } } ```</packetnameserver,></string,></entry<string,> -
Ton instance n’est jamais initialisé.