Système de nom et prénom à la place du pseudo
-
Ton instance n’est jamais initialisé.
-
@‘robin4002’:
Ton instance n’est jamais initialisé.
Pourtant elle est initialisé la:
if(NameSave.instance != null) { NameSave.load(event.getServer().getEntityWorld()); }J’ai remplacer le != par == pour voir si ça régler mon problème, j’ai un autre crash mais maintenant quand je me connecte:
[23:35:49] [Server thread/ERROR] [FML]: Fatal errors were detected during the transition from SERVER_ABOUT_TO_START to SERVER_STARTING. Loading cannot continue [23:35:49] [Server thread/ERROR] [FML]: mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->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->Available->Available Forge{11.14.1.1334} [Minecraft Forge] (forgeSrc-1.8-11.14.1.1334.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available csc{1.0} [Cite Sous Controle] (bin) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Errored [23:35:49] [Server thread/ERROR] [FML]: The following problems were captured during this phase [23:35:49] [Server thread/ERROR] [FML]: Caught exception from csc java.lang.ClassCastException: com.CSC.net.save.KeySave cannot be cast to com.CSC.net.save.NameSave at com.CSC.net.save.NameSave.load(NameSave.java:31) ~[bin/:?] at com.CSC.net.Main.onServerStarting(Main.java:186) ~[bin/:?] 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.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:518) ~[forgeSrc-1.8-11.14.1.1334.jar:?] 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 com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?] at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?] at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[forgeSrc-1.8-11.14.1.1334.jar:?] at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[forgeSrc-1.8-11.14.1.1334.jar:?] 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 com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?] at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?] at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?] at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:118) [LoadController.class:?] at net.minecraftforge.fml.common.Loader.serverStarting(Loader.java:738) [Loader.class:?] at net.minecraftforge.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:319) [FMLCommonHandler.class:?] at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:132) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:500) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45]Ligne 186 main class:
if(NameSave.instance == null) { NameSave.load(event.getServer().getEntityWorld());// ici }Ligne 31 namesave
public static NameSave load(World w) { if(DimensionManager.getWorlds().length < 1) return null; MapStorage storage = DimensionManager.getWorlds()[0].getMapStorage(); final String KEY = Events.Key; NameSave result = (NameSave)storage.loadData(NameSave.class, KEY);// ICI if (result == null) { result = new NameSave(KEY); storage.setData(KEY, result); } return result; } -
storage.loadData(NameSave.class, KEY) renvoie visiblement un objet com.CSC.net.save.KeySave et non com.CSC.net.save.NameSave donc le cast échoue.
Tu peux envoyer les deux classes en question ?
-
@‘robin4002’:
storage.loadData(NameSave.class, KEY) renvoie visiblement un objet com.CSC.net.save.KeySave et non com.CSC.net.save.NameSave donc le cast échoue.
Tu peux envoyer les deux classes en question ?
oui tien:
package com.CSC.net.save; import java.util.Iterator; import java.util.UUID; import java.util.Map.Entry; import javafx.geometry.Pos; import com.CSC.net.Events.Events; import com.CSC.net.Events.Events.Position; import com.CSC.net.properties.EnumRank; 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 KeySave extends WorldSavedData { public static KeySave instance; /** /* Ce constructeur est obligatoire */ public static KeySave 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. KeySave result = (KeySave)storage.loadData(KeySave.class, KEY);//On charge nos données if (result == null) { //Si nos données n'existe pas, … result = new KeySave(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 KeySave(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); Events.doorsPositions.add(new Position(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z"), keyTag.getInteger("dimension"))); } } @Override public void writeToNBT(NBTTagCompound compound) { NBTTagList keyList = new NBTTagList(); Iterator <position>iterator = Events.doorsPositions.iterator(); Position pos; NBTTagCompound keyTag; while(iterator.hasNext()) { pos = iterator.next(); keyTag = new NBTTagCompound(); keyTag.setInteger("x", pos.getX()); keyTag.setInteger("y", pos.getY()); keyTag.setInteger("z", pos.getZ()); keyTag.setInteger("dimension", pos.dimensionId); keyList.appendTag(keyTag); } compound.setTag("keyList", keyList); } }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); } }@EventHandler public void onServerStarting(FMLServerStartingEvent event) { if(KeySave.instance == null) { KeySave.load(event.getServer().getEntityWorld()); } if(NameSave.instance == null) { NameSave.load(event.getServer().getEntityWorld()); } } ```</string,></entry<string,></position> -
Pourquoi avoir deux WorldSavedData ?
Tu peux tout mettre dans le même.Et si en veux vraiment deux, il faut une clé différente.
-
@‘robin4002’:
Pourquoi avoir deux WorldSavedData ?
Tu peux tout mettre dans le même.Et si en veux vraiment deux, il faut une clé différente.
Ahhhhh ok
Du coup j’ai regroupé tout dans une classe j’ai plus de crash donc ça ma l’air bon

Merci ! j’essaye ça dès que je peux en multi et je te dis !
package com.CSC.net.save; import java.util.Iterator; import java.util.UUID; import java.util.Map.Entry; import javafx.geometry.Pos; import com.CSC.net.Events.Events; import com.CSC.net.Events.Events.Position; import com.CSC.net.properties.EnumRank; 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 WorldSaved extends WorldSavedData { public static WorldSaved instance; /** /* Ce constructeur est obligatoire */ public static WorldSaved 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. WorldSaved result = (WorldSaved)storage.loadData(WorldSaved.class, KEY);//On charge nos données if (result == null) { //Si nos données n'existe pas, … result = new WorldSaved(KEY);// Alors on les crée ... storage.setData(KEY, result);// Et on les ajoutes à la mapStorage. } return result; } } public WorldSaved(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); Events.doorsPositions.add(new Position(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z"), keyTag.getInteger("dimension"))); } 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 <position>iterator = Events.doorsPositions.iterator(); Position pos; NBTTagCompound keyTag = new NBTTagCompound(); while(iterator.hasNext()) { pos = iterator.next(); keyTag.setInteger("x", pos.getX()); keyTag.setInteger("y", pos.getY()); keyTag.setInteger("z", pos.getZ()); keyTag.setInteger("dimension", pos.dimensionId); keyList.appendTag(keyTag); } Iterator<entry<string, string="">> iterator2 = ServerProxy.map.entrySet().iterator(); while(iterator.hasNext()) { Entry <string, string="">entry = iterator2.next(); keyTag.setString("uuid", entry.getKey().toString()); keyTag.setString("name", entry.getKey().toString()); keyList.appendTag(keyTag); } compound.setTag("keyList", keyList); } }edit:
je viens de voir un truc quand je relance mon mc mon nom n’est pas sauvegarder normal?
Et aussi une fois que j’ai un nom et que je déco reco simplement mon nom est save mais je peux plus le changer normal?</string,></entry<string,></position>
-
- non
- ça dépend de comment ton code est fait
-
Peux tu essayer de voir ou est du coup le soucis ?
Je te passe ma classe worldsaveddata mon gui mon packet et comment est enregistrer le worldsaved.
WorldSaved:
package com.CSC.net.save; import java.util.Iterator; import java.util.UUID; import java.util.Map.Entry; import javafx.geometry.Pos; import com.CSC.net.Events.Events; import com.CSC.net.Events.Events.Position; import com.CSC.net.properties.EnumRank; 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 WorldSaved extends WorldSavedData { public static WorldSaved instance; /** /* Ce constructeur est obligatoire */ public static WorldSaved 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. WorldSaved result = (WorldSaved)storage.loadData(WorldSaved.class, KEY);//On charge nos données if (result == null) { //Si nos données n'existe pas, … result = new WorldSaved(KEY);// Alors on les crée ... storage.setData(KEY, result);// Et on les ajoutes à la mapStorage. } return result; } } public WorldSaved(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); Events.doorsPositions.add(new Position(keyTag.getInteger("x"), keyTag.getInteger("y"), keyTag.getInteger("z"), keyTag.getInteger("dimension"))); } 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 <position>iterator = Events.doorsPositions.iterator(); Position pos; NBTTagCompound keyTag = new NBTTagCompound(); while(iterator.hasNext()) { pos = iterator.next(); keyTag.setInteger("x", pos.getX()); keyTag.setInteger("y", pos.getY()); keyTag.setInteger("z", pos.getZ()); keyTag.setInteger("dimension", pos.dimensionId); keyList.appendTag(keyTag); } Iterator<entry<string, string="">> iterator2 = ServerProxy.map.entrySet().iterator(); while(iterator.hasNext()) { Entry <string, string="">entry = iterator2.next(); keyTag.setString("uuid", entry.getKey().toString()); keyTag.setString("name", entry.getKey().toString()); keyList.appendTag(keyTag); } compound.setTag("keyList", keyList); } }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() { } }Packet:
package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import com.CSC.net.save.NameSave; import com.CSC.net.save.WorldSaved; 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); WorldSaved.instance.markDirty(); break; case 2: ServerProxy.map.remove(Minecraft.getMinecraft().getSession().getPlayerID()); WorldSaved.instance.markDirty(); break; default: break; } return null; } } }Register WorldSaved:
@EventHandler public void onServerStarting(FMLServerStartingEvent event) { if(WorldSaved.instance == null) { WorldSaved.load(event.getServer().getEntityWorld()); } }Je penses que le problème vient du gui, une fois que on a un nom_prénom:
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 System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); 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(); }Voilà se que me donne le débug:
false [19:53:48] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiJoinServer:actionPerformed:109]: bjrrr_rrrrr [19:53:48] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiJoinServer:actionPerformed:111]: rrrrr_rrrr [19:53:48] [Client thread/INFO] [STDOUT]: [com.CSC.net.GUI.GuiJoinServer:actionPerformed:112]: nullMerci :)!</packetnameserver,></string,></entry<string,></position>
-
Commence déjà par formater ton code, car franchement lire ton code est actuellement est juste impossible.
Je ne sais pas comment tu fais pour coder avec ça. -
@‘robin4002’:
Commence déjà par formater ton code, car franchement lire ton code est actuellement est juste impossible.
Je ne sais pas comment tu fais pour coder avec ça.C’est plus clair comme ça?
package com.CSC.net.GUI; import java.io.IOException; import com.CSC.net.Main; import com.CSC.net.packet.PacketNameServerAdd; import com.CSC.net.packet.PacketNameServerRemove; 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())) { //si les text ne sont pas vide et que il sont > que 3 arguments et que le joueur n'a pas de nom_prénom: System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServerAdd(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText())); // ajoute le nouveau nom prénom dans la map 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())) { //si les text ne sont pas vide et que il sont > que 3 arguments et que le joueur à déjà un nom_prénom: System.out.println(b); b = false; ServerProxy.name = text2.getText() + "_" + text.getText(); Main.network.sendToServer(new PacketNameServerRemove(Minecraft.getMinecraft().getSession().getPlayerID()));// retire l'ancient nom_prénom de la map System.out.println(ServerProxy.map.get(Minecraft.getMinecraft().getSession().getPlayerID())); Main.network.sendToServer(new PacketNameServerAdd(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText() + "_" + text.getText())); // ajoute le nouveau nom prénom dans la map 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())) { //Ici en gros c'est pour ne pas avoir de nom, juste un prénom, le joueur met 72 dans le champ nom pour ne pas avoir de nom, on s'en occupe pas d'ici et en dessous. System.out.println(b); b = false; ServerProxy.name = text2.getText(); Main.network.sendToServer(new PacketNameServerAdd(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText())); // …. 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 PacketNameServerRemove(Minecraft.getMinecraft().getSession().getPlayerID()));// .... Main.network.sendToServer(new PacketNameServerAdd(Minecraft.getMinecraft().getSession().getPlayerID(), text2.getText()));// .... 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() { Minecraft.getMinecraft().displayGuiScreen(this); } }PacketNameServerRemove:
package com.CSC.net.packet; 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 com.CSC.net.proxy.ServerProxy; import com.CSC.net.save.WorldSaved; public class PacketNameServerRemove implements IMessage{ private String string1; public PacketNameServerRemove(String s1) { this.string1 = s1; } public PacketNameServerRemove() { } @Override public void fromBytes(ByteBuf buf) { this.string1 = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, string1); } public static class Handler implements IMessageHandler <packetnameserverremove, imessage="">{ @Override public IMessage onMessage(PacketNameServerRemove message, MessageContext ctx) { ServerProxy.map.remove(message.string1); WorldSaved.instance.markDirty(); return null; } } }PacketNameServerAdd:
package com.CSC.net.packet; import com.CSC.net.proxy.ServerProxy; import com.CSC.net.save.NameSave; import com.CSC.net.save.WorldSaved; 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 PacketNameServerAdd implements IMessage{ private String string1; private String string2; public PacketNameServerAdd(String s1, String s2) { this.string1 = s1; this.string2 = s2; } public PacketNameServerAdd() { } @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 <packetnameserveradd, imessage="">{ @Override public IMessage onMessage(PacketNameServerAdd message, MessageContext ctx) { ServerProxy.map.put(message.string1, message.string2); WorldSaved.instance.markDirty(); return null; } } } ```</packetnameserveradd,></packetnameserverremove,> -
ctrl + shift + f et voila …
ça prend 2 secondes formater correcte du code.Au pire envoies-moi un zip de ton dossier src, ça sera plus simple.
-
@‘robin4002’:
ctrl + shift + f et voila …
ça prend 2 secondes formater correcte du code.Au pire envoies-moi un zip de ton dossier src, ça sera plus simple.
[size=mediumTien:]
[size=medium(Si ça te dérange pas biensûr, vérifie l’item “batonp” avec son gui et tout, qui a pour but de mettre un joueur en prison en choisissant le nom de temps avec des sicles )][size=mediumMerci :)]
-
Tu utilises quelle mapping ? J’ai des erreurs partout de mon côté, donc on a pas les même.
-
@‘robin4002’:
Tu utilises quelle mapping ? J’ai des erreurs partout de mon côté, donc on a pas les même.
mapping ??? c’est quoi ?
-
Ça : http://export.mcpbot.bspk.rs/
Cherche dans ton fichier build.gradle une ligne avec marqué mapping et tu dis ce qu’il y a marqué après -
ça?
mappings = “snapshot_20141130”
-
En voyant les messages dans la section support ces derniers temps je commence à me demander si les gens lisent vraiment les tutoriels …
Je désespère de plus en plus
ÉDIT: oui c’est ça
Finalement remplaces ça par “stable_22”, je vais mettre à jour les mappings de mon côté et je t’envoies le code à jour. Il faut que tu refasse un setup après changement des mappings. -
D’accord merci.
-
Tu as quel encodage sur ta workspace ?
Chez moi tout les accents bug en utf8.Tu souhaites que le nom et prénom soit demandé à chaque connexion où seulement si le joueur n’a pas de nom / prénom ?
Je suppose que veux le premier cas ? Car actuellement le code est fait tel que ce soit le deuxième cas.
Quel est l’intérêt de la boolean nommé b ? -
@‘robin4002’:
Tu as quel encodage sur ta workspace ?
Chez moi tout les accents bug en utf8.Tu souhaites que le nom et prénom soit demandé à chaque connexion où seulement si le joueur n’a pas de nom / prénom ?
Je suppose que veux le premier cas ? Car actuellement le code est fait tel que ce soit le deuxième cas.
Quel est l’intérêt de la boolean nommé b ?Premier cas oui, le boolean sert a rien tu peux le viré, il servait avant dans le menu principal.
Pour les accent chez moi aussi ça bug, je te dis en quoi je suis je sais pas du touttt
il était en: Cp1252
je les mis en UTF8