Résolu Problème avec les EEP ( ExtendEntityProperty)
-
Salut à tous,
j’ai suivi beaucoup de tuto sur les ExtentedEntityProperty,
mais je me heurte à un problème avec l’envoi des paquets et FFMT. Oui ! je suis allé voir les doc FFMT mais si je viens vers vous c’est que je n’ai trouvé ma réponse nulle part.ERREUR:
The method sendTo(FFMTPacket, EntityPlayerMP) in the type PacketManager is not applicable for the arguments (PacketMoney, EntityPlayerMP) ExtendedEntityProp.java /Minecraft/src/main/java/fr/baptiste/notifia/EEP line 132 Java Problem The method sendToServer(FFMTPacket) in the type PacketManager is not applicable for the arguments (PacketMoney) ExtendedEntityProp.java /Minecraft/src/main/java/fr/baptiste/notifia/EEP line 125 Java Problem
Mon code:
Main:
public static final PacketManager rcModPacketHandler = new PacketManager("fr.baptiste.notifia.eep.packetMoney", "notifia", "notifia");
classe EEPProp:
package fr.baptiste.notifia.EEP; import fr.baptiste.notifia.Main; import fr.baptiste.notifia.proxy.CommonProxy; 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.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class ExtendedEntityProp implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtPropTuto"; private final EntityPlayer player; public long money; public long maxMoney; private static String getSaveKey(EntityPlayer player) { return player.getDisplayName() + ":" + EXT_PROP_NAME; } public static void saveProxyData(EntityPlayer player) { ExtendedEntityProp playerData = ExtendedEntityProp.get(player); NBTTagCompound savedData = new NBTTagCompound(); playerData.saveNBTData(savedData); CommonProxy.storeEntityData(getSaveKey(player), savedData); } public static void loadProxyData(EntityPlayer player) { ExtendedEntityProp playerData = ExtendedEntityProp.get(player); NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player)); if (savedData != null) { playerData.loadNBTData(savedData); } playerData.sync(); } public ExtendedEntityProp(EntityPlayer player) { this.player = player; this.money = 0; this.maxMoney = 999999999; } public static final void register(EntityPlayer player) { player.registerExtendedProperties(ExtendedEntityProp.EXT_PROP_NAME, new ExtendedEntityProp(player)); } public static final ExtendedEntityProp get(EntityPlayer player) { return (ExtendedEntityProp) player.getExtendedProperties(EXT_PROP_NAME); } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setLong("Money", this.money); properties.setLong("MaxMoney", this.maxMoney); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.money = properties.getLong("Money"); this.maxMoney = properties.getLong("MaxMoney"); } @Override public void init(Entity entity, World world) { } public boolean pay(long amount) { boolean sufficient = amount <= this.money; if (sufficient) { this.money -= amount; this.sync(); } else { return false; } return sufficient; } public void addMoney(long amount) { this.money += amount; this.sync(); } public long getMoney() { return this.money; } public void setMoney(long newMoney) { this.money = newMoney; this.sync(); } public final void sync() { PacketMoney packetMoney = new PacketMoney(this.maxMoney, this.money); //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. Main.rcModPacketHandler.sendToServer(packetMoney); if (!player.worldObj.isRemote) { EntityPlayerMP player1 = (EntityPlayerMP) player; //Ici, même chose que précédemment, sauf que le packet est envoyé au player. Main.rcModPacketHandler.sendTo(packetMoney, player1); } } }
Classe du Packet:
package fr.baptiste.notifia.EEP; import java.io.IOException; import fr.minecraftforgefrance.ffmtlibs.network.AbstractPacket; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.PacketBuffer; public class PacketMoney extends AbstractPacket { private long maxMoney, Money; public PacketMoney() { } public PacketMoney(long maxMoney, long money){ this.maxMoney = maxMoney; this.Money = money; } @Override public void encodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { buffer.writeLong(maxMoney); buffer.writeLong(Money); } @Override public void decodeInto(ChannelHandlerContext ctx, PacketBuffer buffer) throws IOException { this.maxMoney = buffer.readLong(); this.Money = buffer.readLong(); } @Override public void handleClientSide(EntityPlayer player) { ExtendedEntityProp props = ExtendedEntityProp.get(player); props.maxMoney = this.maxMoney; props.money = this.Money; } @Override public void handleServerSide(EntityPlayer player) { ExtendedEntityProp props = ExtendedEntityProp.get(player); props.maxMoney = this.maxMoney; props.money = this.Money; } }
Je vous remercie déjà de vos réponses.
Amicalement. -
Salut,
alors je tiens à préciser que je ne me suis jamais servir de la FFMTLib, mais à en suivre l’erreur, peut-être devrais-tu hériter ta classe PacketMoney de FFMTPacket et non de AbstractPacket.
Une autre solution est d’utiliser le système classique des packets de Forge. -
@‘Plaigon’:
Salut,
alors je tiens à préciser que je ne me suis jamais servir de la FFMTLib, mais à en suivre l’erreur, peut-être devrais-tu hériter ta classe PacketMoney de FFMTPacket et non de AbstractPacket.
Une autre solution est d’utiliser le système classique des packets de Forge.Hey, non aucun changement avec ce changement…
Malheureusement, malgré tout les tutos, je ne suis pas encore au top avec le système classique. -
Salut,
Un système de paquet a été introduit dans forge même : https://www.minecraftforgefrance.fr/showthread.php?tid=1118 par cpw après qu’il ait réalité que la méthode répandu sur internet (celle qu’utilisait ffmtlib avant que ce soit retiré) causait de fuites des mémoire.Bref, ce système est déprécié et ne devrait pas être utilisé. Utilises plutôt le système de paquet de forge.
-
@‘robin4002’:
Salut,
Un système de paquet a été introduit dans forge même : https://www.minecraftforgefrance.fr/showthread.php?tid=1118 par cpw après qu’il ait réalité que la méthode répandu sur internet (celle qu’utilisait ffmtlib avant que ce soit retiré) causait de fuites des mémoire.Bref, ce système est déprécié et ne devrait pas être utilisé. Utilises plutôt le système de paquet de forge.
Merci Robin pour tes aides toujours aussi pertinentes.
Bonne journée, je le passe en résolu !