Extended Entity Properties
-
PlayerData dat = PlayerData.get(((NetHandlerPlayServer)netHandler).playerEntity);
Le $ est utilisé pour les noms des classes lorsque tu utilise des sous classe.
Par exemple si tu fais :public class BlaBla { public static class AutreClasse { } }Lors de la compilation ça va créer deux fichiers .class :
BlaBla.class
BlaBla$AutreClasse.classDonc c’est très déconseillé de mettre des $ dans le nom de la classe, ça risque de créer des problèmes avec ça.
-
Ah d’accord, merci
je vais changer ça.EDIT :
Ah ben en fait je perds toujours des packets
. Nouveau code :@Override public IMessage onMessage(PacketData_01 message, MessageContext ctx) { if(ctx.netHandler instanceof NetHandlerPlayServer) { PlayerData dat = PlayerData.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity); dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks); } else if(ctx.netHandler instanceof NetHandlerPlayClient) { PlayerData dat = PlayerData.get(getClientPlayer()); dat.update(message.mana, message.playerMaxMana, message.levels, message.regen_ticks); } return null; } -
Up, help svp

-
Ta fonction dat.update fait quoi ?
-
Elle met juste à jour les propriétés du joueur.
-
Un copier/coller de la fonction aurait été utile. Car je suspecte que tu renvoie un paquet à chaque fois, enfin je ne vois pas d’autres explications.
-
public void update(short mana, short playerMaxMana, byte[] levels, int regen) { this.mana = mana; this.playerMaxMana = playerMaxMana; this.spell_levels = levels; this.mana_regen_ticks = regen; }En effet ta théorie sur le fait que je renvoie le packet à chaque fois n’est pas impossible. Je check ça.
EDIT : Rien trouvé
(Enfin intelligible pour moi)Code (peut-être auras-tu plus de chance
) :
PlayerData.java
PacketData_01.java
CommonProxy.javaIl y a quelques erreurs dans un constructeur et la méthode update notamment car je suis en train de mettre en place quelque chose.
-
Up

-
Je ne vois pas d’erreur non plus

Sinon envoie un zip de ton dossier src, je vais faire des tests en local. -
Regarde tes MPs
-
Je l’ai vu, il me faut juste le temps de regarder.
J’édite mon message dès que c’est bon (d’ici midi, et si j’ai pas trouvé pour midi je regarderais cette aprèm).En semaine mon temps est très limité.
Finalement ça a été assez rapide. Le problème c’est que les paquets qui partent du serveur se perdent, le client ne sait pas quoi en faire.
Dans ta classe principale tu as ça actuellement : // Network network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID + ":CHANNEL_1"); network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.SERVER);Donc si le paquet par du client vers le serveur le serveur sait ce qu’il doit faire.
Mais dans l’autre sens non.
Solution ? Il suffit d’ajouter cette ligne en plus : network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.CLIENT); -
Merci je teste

EDIT :
Super ça marche ! Un grand merci
-
Bonjour j’ai suivi ce tuto mais j’ai des erreur dans ma console je ne comprend pas car le packet marche mais il y a des erreurs
[14:07:56 ERROR]: SimpleChannelHandlerWrapper exception java.lang.RuntimeException: Missing at cpw.mods.fml.server.FMLServerHandler.getClientToServerNetworkManager(FMLServerHandler.java:238) ~[FMLServerHandler.class:1.7.10-1448.121] at cpw.mods.fml.common.FMLCommonHandler.getClientToServerNetworkManager(FMLCommonHandler.java:542) ~[FMLCommonHandler.class:1.7.10-1448.121] at cpw.mods.fml.common.network.FMLOutboundHandler$OutboundTarget$8.selectNetworks(FMLOutboundHandler.java:225) ~[FMLOutboundHandler$OutboundTarget$8.class:1.7.10-1448 .121] at cpw.mods.fml.common.network.FMLOutboundHandler.write(FMLOutboundHandler.java:273) ~[FMLOutboundHandler.class:1.7.10-1448.121] at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:637) ~[DefaultChannelHandlerContext.class:?] at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:115) ~[MessageToMessageEncoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java :893) ~[DefaultChannelPipeline.class:?] at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:1.7.10-1448.121] at joueur.ExtendedEntityPropCaracteristique.sync(ExtendedEntityPropCaracteristique.java:183) [ExtendedEntityPropCaracteristique.class:?] at joueur.ExtendedEntityPropCaracteristique.addKamas(ExtendedEntityPropCaracteristique.java:277) [ExtendedEntityPropCaracteristique.class:?] at equipement.epees.Goultard.func_77659_a(Goultard.java:29) [Goultard.class:?] at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:172) [add.class:?] at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:382) [mx.class:?] at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:825) [nh.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?] at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?] at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?] at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) [MinecraftServer.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?] at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal] [14:07:56 WARN]: More than one exception was raised. Will report only the first one and log others. java.lang.RuntimeException: Missing at cpw.mods.fml.server.FMLServerHandler.getClientToServerNetworkManager(FMLServerHandler.java:238) ~[FMLServerHandler.class:1.7.10-1448.121] at cpw.mods.fml.common.FMLCommonHandler.getClientToServerNetworkManager(FMLCommonHandler.java:542) ~[FMLCommonHandler.class:1.7.10-1448.121] at cpw.mods.fml.common.network.FMLOutboundHandler$OutboundTarget$8.selectNetworks(FMLOutboundHandler.java:225) ~[FMLOutboundHandler$OutboundTarget$8.class:1.7.10-1448.121] at cpw.mods.fml.common.network.FMLOutboundHandler.write(FMLOutboundHandler.java:273) ~[FMLOutboundHandler.class:1.7.10-1448.121] at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:637) ~[DefaultChannelHandlerContext.class:?] at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:115) ~[MessageToMessageEncoder.class:?] at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?] at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java :717) ~[DefaultChannelHandlerContext.class:?] at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?] at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?] at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:1.7.10-1448.121] at joueur.ExtendedEntityPropCaracteristique.sync(ExtendedEntityPropCaracteristique.java:183) [ExtendedEntityPropCaracteristique.class:?] at joueur.ExtendedEntityPropCaracteristique.addKamas(ExtendedEntityPropCaracteristique.java:277) [ExtendedEntityPropCaracteristique.class:?] at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:172) [add.class:?] at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:382) [mx.class:?] at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:825) [nh.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?] at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?] at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?] at net.minecraft.network.NetworkSystem.func_1 51269_c(NetworkSystem.java:173) [nc.class:?] at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) [MinecraftServer.class:?] at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?] at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) [MinecraftServer.class:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal]Mon extends entityproperties
public static final ExtendedEntityPropCaracteristique get(EntityPlayer player) { return (ExtendedEntityPropCaracteristique) player.getExtendedProperties(EXT_PROP_NAME); } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setLong("Cooldown", this.cooldown); properties.setLong("Argent", this.argent); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.cooldown = properties.getLong("Cooldown"); this.argent = properties.getLong("Argent"); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public final void sync() { Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.argent); //La ligne suivante dépend de votre manière d'envoyer les packets. Celle-ci vient de mon mod, je ne la changerais pas car je ne peux l'appliquer à votre mod, mais elle reste bonne pour un exemple. TutoMod.network.sendToServer((IMessage)new Packetcaracteristique()); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; //Ici, même chose que précédemment, sauf que le packet est envoyé au player. TutoMod.network.sendTo((IMessage)new Packetcaracteristique(), player1); } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); Commonproxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player); NBTTagCompound savedData = Commonproxy.getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public void update(long cooldown, long argent) { this.cooldown = cooldown; this.argent = argent; } public boolean pay(long amount) { boolean sufficient = amount <= this.argent; if (sufficient) { this.argent -= amount; this.sync(); } else { return false; } return sufficient; } public void addMoney(long amount) { this.argent += amount; this.sync(); } public long getMoney() { return this.argent; } public void setMoney(long newMoney) { this.argent = newMoney; this.sync(); } }mon packet
implements IMessage { public long cooldown; public long argent; public Packetcaracteristique() { } public Packetcaracteristique(long cooldown, long argent) { this.cooldown = cooldown; this.argent = argent; } @Override public void fromBytes(ByteBuf buf) { cooldown = buf.readInt(); argent = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { buf.writeLong(cooldown); buf.writeLong(argent); } public static class Handler implements IMessageHandler <packetcaracteristique, imessage="">{ @Override public IMessage onMessage(Packetcaracteristique message, MessageContext ctx) { if(ctx.netHandler instanceof NetHandlerPlayServer) { ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity); prop.update(message.cooldown, message.argent); } else if(ctx.netHandler instanceof NetHandlerPlayClient) { ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(getClientPlayer()); prop.update(message.cooldown, message.argent); } return null; } } @SideOnly(Side.CLIENT) public static EntityPlayer getClientPlayer() { return Minecraft.getMinecraft().thePlayer; } }Mon init
network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.SERVER); network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.CLIENT); ```</packetcaracteristique,> -
D’un côté tu fais un readInt et l’autre writeLong, essaie déjà en mettant un readLong plutôt
-
ah oui desolé l’erreur est déjà corrigé j’avais remarqué entre temps mais ca ne fonctionne toujours pas toujours ce message d’erreur dans la console
-
Est-ce que ce serai possible d’avoir les classes complètes (avec les imports) car sinon le rapport d’erreur est faussé.
-
Dessolé pour le retard weekend de décembre chargé avec le père noël
bon voici mes classe scarex :mon ExtendedEntityPropCaracteristique :
package joueur; import interfaces.gui.metiers.Guilevelmetier; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.TutoMod; import mods.common.Commonproxy; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class ExtendedEntityPropCaracteristique implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "Caracteristiquejoueur"; private final EntityPlayer player; public long cooldown; public long kamas; public long classe; public long levelbucheron; public long xpalchimiste, xpbucheron , xpchasseur , xpmineur , xppaysan , xppecheur , xpbijoutier , xpboulanger , xpbricoleur , xpforgeurdedagues , xpforgeurdepees , xpforgeurdehaches , xpforgeurdemarteaux , xpforgeurdepelles , xppoissonnier , xpcordonnier , xpforgeurdeboucliers , xpsculpteurdarcs , xpsculpteurdebaguettes , xpsculpteurdebatons , xptailleur , xpcordomage , xpcostumage , xpjoaillomage , xpforgemagededagues , xpforgemagedepees , xpforgemagedhaches , xpforgemagedemarteaux , xpforgemagedepelles , xpsculptemagedarcs , xpsculptemagedebaguettes , xpsculptemagedebaton; public ExtendedEntityPropCaracteristique(EntityPlayer player) { this.player = player; this.cooldown = 0; this.kamas = 0; this.classe =0; this.levelbucheron = 0; this.xpalchimiste = 0; this.xpbucheron = 0; this.xpchasseur = 0; this.xpmineur = 0; this.xppaysan = 0; this.xppecheur = 0; this.xpbijoutier = 0; this.xpboulanger = 0; this.xpbricoleur = 0; this.xpforgeurdedagues = 0; this.xpforgeurdepees = 0; this.xpforgeurdehaches = 0; this.xpforgeurdemarteaux = 0; this.xpforgeurdepelles = 0; this.xppoissonnier = 0; this.xpcordonnier = 0; this.xpforgeurdeboucliers = 0; this.xpsculpteurdarcs = 0; this.xpsculpteurdebaguettes = 0; this.xpsculpteurdebatons = 0; this.xptailleur = 0; this.xpcordomage = 0; this.xpcostumage = 0; this.xpjoaillomage = 0; this.xpforgemagededagues = 0; this.xpforgemagedepees = 0; this.xpforgemagedhaches = 0; this.xpforgemagedemarteaux = 0; this.xpforgemagedepelles = 0; this.xpsculptemagedarcs = 0; this.xpsculptemagedebaguettes = 0; this.xpsculptemagedebaton = 0; } public static final void register(EntityPlayer player) { player.registerExtendedProperties(ExtendedEntityPropCaracteristique.EXT_PROP_NAME, new ExtendedEntityPropCaracteristique(player)); } public static final ExtendedEntityPropCaracteristique get(EntityPlayer player) { return (ExtendedEntityPropCaracteristique) player.getExtendedProperties(EXT_PROP_NAME); } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setLong("Cooldown", this.cooldown); properties.setLong("Kamas", this.kamas); properties.setLong("Classe", this.classe); properties.setLong("Xpalchimiste", this.xpalchimiste); properties.setLong("Xpbucheron", this.xpbucheron); properties.setLong("Xpchasseur", this.xpchasseur); properties.setLong("Xpmineur", this.xpmineur); properties.setLong("Xppaysan", this.xppaysan); properties.setLong("Xppecheur", this.xppecheur); properties.setLong("Xpbijoutier", this.xpbijoutier); properties.setLong("Xpboulanger", this.xpboulanger); properties.setLong("Xpbricoleur", this.xpbricoleur); properties.setLong("Xpforgeurdedagues", this.xpforgeurdedagues); properties.setLong("Xpforgeurdepees", this.xpforgeurdepees); properties.setLong("Xpforgeurdehaches", this.xpforgeurdehaches); properties.setLong("Xpforgeurdemarteaux", this.xpforgeurdemarteaux); properties.setLong("Xpforgeurdepelles", this.xpforgeurdepelles); properties.setLong("Xppoissonnier", this.xppoissonnier); properties.setLong("Xpcordonnier", this.xpcordonnier); properties.setLong("Xpforgeurdeboucliers", this.xpforgeurdeboucliers); properties.setLong("Xpsculpteurdarcs", this.xpsculpteurdarcs); properties.setLong("Xpsculpteurdebaguettes", this.xpsculpteurdebaguettes); properties.setLong("Xpsculpteurdebatons", this.xpsculpteurdebatons); properties.setLong("Xptailleur", this.xptailleur); properties.setLong("Xpcordomage", this.xpcordomage); properties.setLong("Xpcostumage", this.xpcostumage); properties.setLong("Xpjoaillomage", this.xpjoaillomage); properties.setLong("Xpforgemagededagues", this.xpforgemagededagues); properties.setLong("Xpforgemagedepees", this.xpforgemagedepees); properties.setLong("Xpforgemagedhaches", this.xpforgemagedhaches); properties.setLong("Xpforgemagedemarteaux", this.xpforgemagedemarteaux); properties.setLong("Xpforgemagedepelles", this.xpforgemagedepelles); properties.setLong("Xpsculptemagedarcs", this.xpsculptemagedarcs); properties.setLong("Xpsculptemagedebaguettes", this.xpsculptemagedebaguettes); properties.setLong("Xpsculptemagedebaton", this.xpsculptemagedebaton); properties.setLong("Levelbucheron", this.levelbucheron); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.cooldown = properties.getLong("Cooldown"); this.kamas = properties.getLong("Kamas"); this.classe = properties.getLong("Classe"); this.xpalchimiste = properties.getLong("Xpalchimiste"); this.xpbucheron = properties.getLong("Xpbucheron"); this.xpmineur = properties.getLong("Xpmineur"); this.xppaysan = properties.getLong("Xppaysan"); this.xppecheur = properties.getLong("Xppecheur"); this.xpbijoutier = properties.getLong("Xpbijoutier"); this.xpboulanger = properties.getLong("Xpboulanger"); this.xpbricoleur = properties.getLong("Xpbricoleur"); this.xpforgeurdedagues = properties.getLong("Xpforgeurdedagues"); this.xpforgeurdepees = properties.getLong("Xpforgeurdepees"); this.xpforgeurdehaches = properties.getLong("Xpforgeurdehaches"); this.xpforgemagedemarteaux = properties.getLong("Xpforgemagedemarteaux"); this.xpforgeurdepelles = properties.getLong("Xpforgeurdepelles"); this.xppoissonnier = properties.getLong("Xppoissonnier"); this.xpcordonnier = properties.getLong("Xpcordonnier"); this.xpforgeurdeboucliers = properties.getLong("Xpforgeurdeboucliers"); this.xpsculpteurdarcs = properties.getLong("Xpsculpteurdarcs"); this.xpsculpteurdebaguettes = properties.getLong("Xpsculpteurdebaguettes"); this.xpsculpteurdebatons = properties.getLong("Xpsculpteurdebatons"); this.xptailleur = properties.getLong("Xptailleur"); this.xpcordomage = properties.getLong("Xpcordomage"); this.xpcostumage = properties.getLong("Xpcostumage"); this.xpjoaillomage = properties.getLong("Xpjoaillomage"); this.xpforgemagededagues = properties.getLong("Xpforgemagededagues"); this.xpforgemagedepees = properties.getLong("Xpforgemagedepees"); this.xpforgemagedhaches = properties.getLong("Xpforgemagedhaches"); this.xpforgemagedemarteaux = properties.getLong("Xpforgemagedemarteaux"); this.xpforgemagedepelles = properties.getLong("Xpforgemagedepelles"); this.xpsculptemagedarcs = properties.getLong("Xpsculptemagedarcs"); this.xpsculptemagedebaguettes = properties.getLong("Xpsculptemagedebaguettes"); this.xpsculptemagedebaton = properties.getLong("Xpsculptemagedebaton"); this.levelbucheron = properties.getLong("Levelbucheron"); } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } public final void sync() { Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.kamas, this.classe, this.xpalchimiste, this.xpbucheron, this.xpchasseur, this.xpmineur, this.xppaysan, this.xppecheur, this.xpbijoutier, this.xpboulanger, this.xpbricoleur, this.xpforgeurdedagues, this.xpforgeurdepees, this.xpforgeurdehaches, this.xpforgemagedemarteaux, this.xpforgeurdepelles, this.xppoissonnier, this.xpcordonnier, this.xpforgeurdeboucliers, this.xpsculpteurdarcs, this.xpsculpteurdebaguettes, this.xpsculpteurdebatons, this.xptailleur, this.xpcordomage, this.xpcostumage, this.xpjoaillomage, this.xpforgemagededagues, this.xpforgemagedepees, this.xpforgemagedhaches, this.xpforgemagedemarteaux, this.xpforgemagedepelles, this.xpsculptemagedarcs, this.xpsculptemagedebaguettes, this.xpsculptemagedebaton, this.levelbucheron); TutoMod.network.sendToServer(packetcaracteristique); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; TutoMod.network.sendTo(packetcaracteristique, player1); } } private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); Commonproxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player); NBTTagCompound savedData = Commonproxy.getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public void update(long cooldown, long classe, long kamas, long xpalchimiste, long xpbucheron, long xpchasseur, long xpmineur, long xppaysan, long xppecheur, long xpbijoutier, long xpboulanger, long xpbricoleur, long xpforgeurdedagues, long xpforgeurdepees, long xpforgeurdehaches, long xpforgeurdemarteaux, long xpforgeurdepelles, long xppoissonnier, long xpcordonnier, long xpforgeurdeboucliers, long xpsculpteurdarcs, long xpsculpteurdebaguettes, long xpsculpteurdebatons, long xptailleur, long xpcordomage, long xpcostumage, long xpjoaillomage, long xpforgemagededagues, long xpforgemagedepees, long xpforgemagedhaches, long xpforgemagedemarteaux, long xpforgemagedepelles, long xpsculptemagedarcs, long xpsculptemagedebaguettes, long xpsculptemagedebaton, long levelbucheron) { this.cooldown = cooldown; this.kamas = kamas; this.classe = classe; this.xpalchimiste= xpalchimiste; this.xpbucheron= xpbucheron; this.xpchasseur= xpchasseur; this.xpmineur= xpmineur; this.xppaysan= xppaysan; this.xppecheur= xppecheur; this.xpbijoutier= xpbijoutier; this.xpboulanger= xpboulanger; this.xpbricoleur= xpbricoleur; this.xpforgeurdedagues= xpforgeurdedagues; this.xpforgeurdepees= xpforgeurdepees; this.xpforgeurdehaches= xpforgeurdehaches; this.xpforgeurdemarteaux= xpforgeurdemarteaux; this.xpforgeurdepelles= xpforgeurdepelles; this.xppoissonnier= xppoissonnier; this.xpcordonnier= xpcordonnier; this.xpforgeurdeboucliers= xpforgeurdeboucliers; this.xpsculpteurdarcs= xpsculpteurdarcs; this.xpsculpteurdebaguettes= xpsculpteurdebaguettes; this.xpsculpteurdebatons= xpsculpteurdebatons; this.xptailleur= xptailleur; this.xpcordomage= xpcordomage; this.xpcostumage= xpcostumage; this.xpjoaillomage= xpjoaillomage; this.xpforgemagededagues= xpforgemagededagues; this.xpforgemagedepees= xpforgemagedepees; this.xpforgemagedhaches= xpforgemagedhaches; this.xpforgemagedemarteaux= xpforgemagedemarteaux; this.xpforgemagedepelles= xpforgemagedepelles; this.xpsculptemagedarcs= xpsculptemagedarcs; this.xpsculptemagedebaguettes= xpsculptemagedebaguettes; this.xpsculptemagedebaton = xpsculptemagedebaton; this.levelbucheron = levelbucheron; } //Kamas public boolean pay(long amount) { boolean sufficient = amount <= this.kamas; if (sufficient) { this.kamas -= amount; this.sync(); } else { return false; } return sufficient; } public void addKamas(long amount) { this.kamas += amount; this.sync(); } public long getKamas() { return this.kamas; } public void setKamas(long newKamas) { this.kamas = newKamas; this.sync(); } //Cooldown public void addCooldown(long amount) { this.cooldown += amount; this.sync(); } public void setCooldown(long newCooldown) { this.cooldown = newCooldown; this.sync(); } //Metier //Bucheron public void addxpbucheron(long amount) { this.xpbucheron += amount; this.sync(); } public void setxpbucheron(long newXpbucheron) { this.xpbucheron = newXpbucheron; this.sync(); } public void addlevelbucheron(long amount) { this.levelbucheron += amount; this.sync(); } @SideOnly(Side.CLIENT) public void openscreen() { Minecraft.getMinecraft().displayGuiScreen(new Guilevelmetier()); } }mon Packetcaracteristique:
package joueur; import java.io.IOException; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.NetHandlerPlayServer; import interfaces.packets.Zaap; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class Packetcaracteristique implements IMessage { public long cooldown; public long kamas; public long classe; public long levelbucheron; public long xpalchimiste, xpbucheron , xpchasseur , xpmineur , xppaysan , xppecheur , xpbijoutier , xpboulanger , xpbricoleur , xpforgeurdedagues , xpforgeurdepees , xpforgeurdehaches , xpforgeurdemarteaux , xpforgeurdepelles , xppoissonnier , xpcordonnier , xpforgeurdeboucliers , xpsculpteurdarcs , xpsculpteurdebaguettes , xpsculpteurdebatons , xptailleur , xpcordomage , xpcostumage , xpjoaillomage , xpforgemagededagues , xpforgemagedepees , xpforgemagedhaches , xpforgemagedemarteaux , xpforgemagedepelles , xpsculptemagedarcs , xpsculptemagedebaguettes , xpsculptemagedebaton; public Packetcaracteristique() { } public Packetcaracteristique(long cooldown, long kamas, long classe, long xpalchimiste, long xpbucheron, long xpchasseur, long xpmineur, long xppaysan, long xppecheur, long xpbijoutier, long xpboulanger, long xpbricoleur, long xpforgeurdedagues, long xpforgeurdepees, long xpforgeurdehaches, long xpforgeurdemarteaux, long xpforgeurdepelles, long xppoissonnier, long xpcordonnier, long xpforgeurdeboucliers, long xpsculpteurdarcs, long xpsculpteurdebaguettes, long xpsculpteurdebatons, long xptailleur, long xpcordomage, long xpcostumage, long xpjoaillomage, long xpforgemagededagues, long xpforgemagedepees, long xpforgemagedhaches, long xpforgemagedemarteaux, long xpforgemagedepelles, long xpsculptemagedarcs, long xpsculptemagedebaguettes, long xpsculptemagedebaton, long levelbucheron) { this.cooldown = cooldown; this.kamas = kamas; this.classe = classe; this.xpalchimiste= xpalchimiste; this.xpbucheron= xpbucheron; this.xpchasseur= xpchasseur; this.xpmineur= xpmineur; this.xppaysan= xppaysan; this.xppecheur= xppecheur; this.xpbijoutier= xpbijoutier; this.xpboulanger= xpboulanger; this.xpbricoleur= xpbricoleur; this.xpforgeurdedagues= xpforgeurdedagues; this.xpforgeurdepees= xpforgeurdepees; this.xpforgeurdehaches= xpforgeurdehaches; this.xpforgeurdemarteaux= xpforgeurdemarteaux; this.xpforgeurdepelles= xpforgeurdepelles; this.xppoissonnier= xppoissonnier; this.xpcordonnier= xpcordonnier; this.xpforgeurdeboucliers= xpforgeurdeboucliers; this.xpsculpteurdarcs= xpsculpteurdarcs; this.xpsculpteurdebaguettes= xpsculpteurdebaguettes; this.xpsculpteurdebatons= xpsculpteurdebatons; this.xptailleur= xptailleur; this.xpcordomage= xpcordomage; this.xpcostumage= xpcostumage; this.xpjoaillomage= xpjoaillomage; this.xpforgemagededagues= xpforgemagededagues; this.xpforgemagedepees= xpforgemagedepees; this.xpforgemagedhaches= xpforgemagedhaches; this.xpforgemagedemarteaux= xpforgemagedemarteaux; this.xpforgemagedepelles= xpforgemagedepelles; this.xpsculptemagedarcs= xpsculptemagedarcs; this.xpsculptemagedebaguettes= xpsculptemagedebaguettes; this.xpsculptemagedebaton = xpsculptemagedebaton; this.levelbucheron = levelbucheron; } @Override public void fromBytes(ByteBuf buf) { cooldown = buf.readLong(); kamas = buf.readLong(); classe = buf.readLong(); xpalchimiste = buf.readLong(); xpbucheron = buf.readLong(); xpchasseur = buf.readLong(); xpmineur = buf.readLong(); xppaysan = buf.readLong(); xppecheur = buf.readLong(); xpbijoutier = buf.readLong(); xpboulanger = buf.readLong(); xpbricoleur = buf.readLong(); xpforgeurdedagues = buf.readLong(); xpforgeurdepees = buf.readLong(); xpforgeurdehaches = buf.readLong(); xpforgeurdemarteaux = buf.readLong(); xpforgeurdepelles = buf.readLong(); xppoissonnier = buf.readLong(); xpcordonnier = buf.readLong(); xpforgeurdeboucliers = buf.readLong(); xpsculpteurdarcs = buf.readLong(); xpsculpteurdebaguettes = buf.readLong(); xpsculpteurdebatons = buf.readLong(); xptailleur = buf.readLong(); xpcordomage = buf.readLong(); xpcostumage = buf.readLong(); xpjoaillomage = buf.readLong(); xpforgemagededagues = buf.readLong(); xpforgemagedepees = buf.readLong(); xpforgemagedhaches = buf.readLong(); xpforgemagedemarteaux = buf.readLong(); xpforgemagedepelles = buf.readLong(); xpsculptemagedarcs = buf.readLong(); xpsculptemagedebaguettes = buf.readLong(); xpsculptemagedebaton = buf.readLong(); levelbucheron = buf.readLong(); } @Override public void toBytes(ByteBuf buf) { buf.writeLong(cooldown); buf.writeLong(kamas); buf.writeLong(classe); buf.writeLong(xpalchimiste); buf.writeLong(xpbucheron); buf.writeLong(xpchasseur); buf.writeLong(xpmineur); buf.writeLong(xppaysan); buf.writeLong(xppecheur); buf.writeLong(xpbijoutier); buf.writeLong(xpboulanger); buf.writeLong(xpbricoleur); buf.writeLong(xpforgeurdedagues); buf.writeLong(xpforgeurdepees); buf.writeLong(xpforgeurdehaches); buf.writeLong(xpforgeurdemarteaux); buf.writeLong(xpforgeurdepelles); buf.writeLong(xppoissonnier); buf.writeLong(xpcordonnier); buf.writeLong(xpforgeurdeboucliers); buf.writeLong(xpsculpteurdarcs); buf.writeLong(xpsculpteurdebaguettes); buf.writeLong(xpsculpteurdebatons); buf.writeLong(xptailleur); buf.writeLong(xpcordomage); buf.writeLong(xpcostumage); buf.writeLong(xpjoaillomage); buf.writeLong(xpforgemagededagues); buf.writeLong(xpforgemagedepees); buf.writeLong(xpforgemagedhaches); buf.writeLong(xpforgemagedemarteaux); buf.writeLong(xpforgemagedepelles); buf.writeLong(xpsculptemagedarcs); buf.writeLong(xpsculptemagedebaguettes); buf.writeLong(xpsculptemagedebaton); buf.writeLong(levelbucheron); } public static class Handler implements IMessageHandler <packetcaracteristique, imessage="">{ @Override public IMessage onMessage(Packetcaracteristique message, MessageContext ctx) { if(ctx.netHandler instanceof NetHandlerPlayServer) { ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity); prop.update(message.cooldown, message.kamas,message.classe ,message.xpalchimiste ,message.xpbucheron ,message.xpchasseur ,message.xpmineur ,message.xppaysan, message.xppecheur ,message.xpbijoutier ,message.xpboulanger ,message.xpbricoleur ,message.xpforgeurdedagues ,message.xpforgeurdepees ,message.xpforgeurdehaches, message.xpforgeurdemarteaux, message.xpforgeurdepelles, message.xppoissonnier, message.xpcordonnier, message.xpforgeurdeboucliers, message.xpsculpteurdarcs, message.xpsculpteurdebaguettes, message.xpsculpteurdebatons,message.xptailleur, message.xpcordomage, message.xpcostumage, message.xpjoaillomage, message.xpforgemagededagues, message.xpforgemagedepees, message.xpforgemagedhaches, message.xpforgemagedemarteaux, message.xpforgemagedepelles, message.xpsculptemagedarcs, message.xpsculptemagedebaguettes, message.xpsculptemagedebaton, message.levelbucheron); } else if(ctx.netHandler instanceof NetHandlerPlayClient) { ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(getClientPlayer()); prop.update(message.cooldown, message.kamas ,message.classe ,message.xpalchimiste ,message.xpbucheron ,message.xpchasseur ,message.xpmineur ,message.xppaysan, message.xppecheur ,message.xpbijoutier ,message.xpboulanger ,message.xpbricoleur ,message.xpforgeurdedagues ,message.xpforgeurdepees ,message.xpforgeurdehaches, message.xpforgeurdemarteaux, message.xpforgeurdepelles, message.xppoissonnier, message.xpcordonnier, message.xpforgeurdeboucliers, message.xpsculpteurdarcs, message.xpsculpteurdebaguettes, message.xpsculpteurdebatons,message.xptailleur, message.xpcordomage, message.xpcostumage, message.xpjoaillomage, message.xpforgemagededagues, message.xpforgemagedepees, message.xpforgemagedhaches, message.xpforgemagedemarteaux, message.xpforgemagedepelles, message.xpsculptemagedarcs, message.xpsculptemagedebaguettes, message.xpsculptemagedebaton, message.levelbucheron); } return null; } } @SideOnly(Side.CLIENT) public static EntityPlayer getClientPlayer() { return Minecraft.getMinecraft().thePlayer; } }et mon item qui compte :
package equipement.epees; import joueur.ExtendedEntityPropCaracteristique; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.world.World; public class Goultard extends ItemSword { public Goultard(ToolMaterial material) { super(material); } @Override public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player) { if (!world.isRemote) { ExtendedEntityPropCaracteristique metier = ExtendedEntityPropCaracteristique.get(player); metier.addKamas(10); ChatComponentTranslation comp = new ChatComponentTranslation("tu as " + metier.kamas +" kamas"); player.addChatComponentMessage(comp); } return itemstack; } }Voila donc ça fonctionne mais avec des erreurs console … le crash du dessus et le bon
Merci à toi pour ton aide</packetcaracteristique,>
-
public final void sync() { Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.argent); //La ligne suivante dépend de votre manière d'envoyer les packets. Celle-ci vient de mon mod, je ne la changerais pas car je ne peux l'appliquer à votre mod, mais elle reste bonne pour un exemple. TutoMod.network.sendToServer((IMessage)new Packetcaracteristique()); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; //Ici, même chose que précédemment, sauf que le packet est envoyé au player. TutoMod.network.sendTo((IMessage)new Packetcaracteristique(), player1); } }->
public final void sync() { if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; TutoMod.network.sendTo((IMessage)new Packetcaracteristique(), player1); } else { Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.argent); TutoMod.network.sendToServer((IMessage)new Packetcaracteristique()); } }Envoyer un paquet au serveur alors que tu es déjà côté serveur ne risque pas de fonctionner.
En passant tu devrais utiliser des tableaux pour ton code, ça serait bien plus pratique.
-
Niquel merci beaucoup robin exact erreur de débutant
et oui je vais passer par des tableaux XD -
Bonjour, je ne m’étais jamais rendu compte jusqu’à aujourd’hui, mais ce tuto n’a jamais été revu pour prendre en compte les uuid des joueurs, car là pour le moment, il enregistre les données en fonctions des usernames que contient la hashmap. De ce fait, si un joueur se déco, change son pseudo sur minecraft.net, puis revient, il aura perdu toutes ses données relatives
