MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème avec les EEP ( ExtendEntityProperty)

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    5 Messages 3 Publieurs 759 Vues
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • ? This user is from outside of this forum
      Invité
      dernière édition par

      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.

      1 réponse Dernière réponse Répondre Citer 0
      • DeletedD Hors-ligne
        Deleted
        dernière édition par

        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.

        1 réponse Dernière réponse Répondre Citer 0
        • ? This user is from outside of this forum
          Invité
          dernière édition par

          @‘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.

          1 réponse Dernière réponse Répondre Citer 0
          • robin4002R Hors-ligne
            robin4002 Moddeurs confirmés Rédacteurs Administrateurs
            dernière édition par

            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.

            1 réponse Dernière réponse Répondre Citer 0
            • ? This user is from outside of this forum
              Invité
              dernière édition par

              @‘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 !

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              ContactMentions Légales

              MINECRAFT FORGE FRANCE © 2024

              Powered by NodeBB