MFF

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

    Extended Entity Properties

    Planifier Épinglé Verrouillé Déplacé Les entités
    1.7.2
    127 Messages 21 Publieurs 39.8k Vues 5 Watching
    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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      FMLCommonHandler.instance().bus().register(new EntityEventHandler()); n’est pas nécessaire ici, c’est pour les event de fml, or tu n’as pas d’event fml dans la classe 😉

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

        A ok, j’avais inversé les 2, je ne savais pas lequel enlevé, voila c’est dit .

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

          Salut  🙂 ,
          J’ai toujours un problème avec les Extended Entity Properties, j’ai revu plusieurs fois mon code mais les packets n’ont pas l’air de se transmettre peut importe ce que je fais les données restent toujours à 0
          Si vous avez une petite idée ^^ :
          PacketSonic :

          ​public class PacketSonic
          extends FFMTPacket
          {
          
          public int Descendre;
          public boolean DoubleJump;
          public long Ring;
          
          public PacketSonic(){
          
          }
          
          public PacketSonic(int Descendre, boolean DoubleJump, long Ring){
          this.Descendre = Descendre;
          this.DoubleJump = DoubleJump;
          this.Ring = Ring;
          }
          
          @Override
          public void writeData(ByteBuf buffer) throws IOException {
          buffer.writeInt(Descendre);
          buffer.writeBoolean(DoubleJump);
          buffer.writeLong(Ring);
          
          }
          
          @Override
          public void readData(ByteBuf buffer) {
          this.Descendre = buffer.readInt();
          this.DoubleJump = buffer.readBoolean();
          this.Ring = buffer.readLong();
          
          }
          
          @Override
          public void handleClientSide(EntityPlayer player) {
          ExtendedEntityPropSonic props = ExtendedEntityPropSonic
          .get(player);
          props.Descendre = this.Descendre;
          props.DoubleJump = this.DoubleJump;
          props.Ring = this.Ring;
          }
          
          @Override
          public void handleServerSide(EntityPlayer player) {
          ExtendedEntityPropSonic props = ExtendedEntityPropSonic
          .get(player);
          props.Descendre = this.Descendre;
          props.DoubleJump = this.DoubleJump;
          props.Ring = this.Ring;
          }
          
          }
          

          ExtendedEntityPropSonic :

          ​ public final static String EXT_PROP_NAME = "ExtPropSonic";
          
          private final EntityPlayer player;
          
          public int Descendre;
          public boolean DoubleJump;
          public long Ring;
          
          public ExtendedEntityPropSonic(EntityPlayer player) {
          this.player = player;
          this.Descendre = 0;
          this.DoubleJump = false;
          this.Ring = 0;
          
          }
          
          @Override
          public void saveNBTData(NBTTagCompound compound) {
          
          NBTTagCompound properties = new NBTTagCompound();
          
          properties.setInteger("Descendre", this.Descendre);
          properties.setBoolean("DoubleJump", this.DoubleJump);
          properties.setLong("Ring", this.Ring);
          
          compound.setTag(EXT_PROP_NAME, properties);
          
          }
          
          @Override
          public void loadNBTData(NBTTagCompound compound) {
          NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
          this.Descendre = properties.getInteger("Descendre");
          this.DoubleJump = properties.getBoolean("DoubleJump");
          this.Ring = properties.getLong("Ring");
          
          }
          
          @Override
          public void init(Entity entity, World world) {
          // TODO Auto-generated method stub
          
          }
          
          public static final void register(EntityPlayer player) {
          player.registerExtendedProperties(ExtendedEntityPropSonic.EXT_PROP_NAME,
          new ExtendedEntityPropSonic(player));
          }
          
          public static final ExtendedEntityPropSonic get(EntityPlayer player) {
          return (ExtendedEntityPropSonic) player.getExtendedProperties(EXT_PROP_NAME);
          }
          
          public final void sync() {
          PacketSonic packetSonic = new PacketSonic(this.Descendre, this.DoubleJump, this.Ring);
          Sonic_mod.rcModPacketHandler.sendToServer(packetSonic);
          
          if (!player.worldObj.isRemote) {
          EntityPlayerMP player1 = (EntityPlayerMP) player;
          Sonic_mod.rcModPacketHandler.sendTo(packetSonic, player1);
          }
          }
          private static String getSaveKey(EntityPlayer player) {
          return player.getDisplayName() + ":" + EXT_PROP_NAME;
          }
          
          public static void saveProxyData(EntityPlayer player) {
          ExtendedEntityPropSonic playerData = ExtendedEntityPropSonic.get(player);
          NBTTagCompound savedData = new NBTTagCompound();
          
          playerData.saveNBTData(savedData);
          CommonProxy.storeEntityData(getSaveKey(player), savedData);
          }
          
          public static void loadProxyData(EntityPlayer player) {
          ExtendedEntityPropSonic playerData = ExtendedEntityPropSonic.get(player);
          NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));
          
          if (savedData != null) {
          playerData.loadNBTData(savedData);
          }
          playerData.sync();
          }
          
          public long getRing() {
          return this.Ring;
          }
          
          public void setRing(long newRing) {
          this.Ring = newRing;
          this.sync();
          
          }
          
          public int getDescendre() {
          return this.Descendre;
          }
          
          public void setDescendre(int newDescendre) {
          this.Descendre = newDescendre;
          this.sync();
          }
          
          public boolean getDoubleJump() {
          return this.DoubleJump;
          }
          
          public void setDoubleJump(boolean newDoubleJump) {
          this.DoubleJump = newDoubleJump;
          this.sync();
          }
          

          Une partie de ma classe event :

          ​ /** Register data*/
          @SubscribeEvent
          public void onEntityConstructing(EntityConstructing event) {
          
          if (event.entity instanceof EntityPlayer
          && ExtendedEntityPropSonic.get((EntityPlayer) event.entity) == null)
          {
          ExtendedEntityPropSonic.register((EntityPlayer) event.entity);
          System.out.println("une entité a rejoint le monde");
          }
          }
          @SubscribeEvent
          public void onEntityJoinWorld(EntityJoinWorldEvent event) {
          if (!event.entity.worldObj.isRemote
          && event.entity instanceof EntityPlayer) {
          NBTTagCompound playerData = CommonProxy
          .getEntityData(((EntityPlayer) event.entity)
          .getDisplayName());
          if (playerData != null) {
          ((ExtendedEntityPropSonic) (event.entity
          .getExtendedProperties(ExtendedEntityPropSonic.EXT_PROP_NAME)))
          .loadNBTData(playerData);
          }
          
          ((ExtendedEntityPropSonic) (event.entity
          .getExtendedProperties(ExtendedEntityPropSonic.EXT_PROP_NAME)))
          .sync();
          }
          }
          }
          

          Je pense avoir tout mis
          Merci d’avance ^^’

          ^^

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

            Bonjour,
            Alors voilà mon problème : je n’arrive pas à synchroniser le server et le client pour mon ExtendedProperties : sur le client la propriété se remet à 0 dès qu’on charge le monde, et par contre sur le server pas de soucis ça sauvegarde bien :
            :::
            Voilà ce que j’obtiens quand je charge un monde et que je demande la valeur de stat :http://www.casimages.com/i/141029015100755129.png
            :::

            Je vous mets les classes de mon mod :
            :::

            Classe principale :

            package mc_plus.common;
            
            import mc_plus.network.PacketPipeline;
            import net.minecraft.block.Block;
            import net.minecraft.item.Item;
            import net.minecraftforge.common.MinecraftForge;
            import cpw.mods.fml.common.Mod;
            import cpw.mods.fml.common.Mod.EventHandler;
            import cpw.mods.fml.common.Mod.Instance;
            import cpw.mods.fml.common.SidedProxy;
            import cpw.mods.fml.common.event.FMLInitializationEvent;
            import cpw.mods.fml.common.event.FMLPostInitializationEvent;
            import cpw.mods.fml.common.event.FMLPreInitializationEvent;
            import cpw.mods.fml.common.registry.GameRegistry;
            
            @Mod(modid = "mc_plus", name = "Mc Plus", version = "1.0.0")
            
            public class Mc_Plus {
            
            @Instance("mc_plus")
            public static Mc_Plus instance;
            
            @SidedProxy(clientSide = "mc_plus.client.ClientProxy", serverSide = "mc_plus.common.CommonProxy")
            public static CommonProxy proxy;
            
            public static final PacketPipeline pipe = new PacketPipeline();
            public static int stat = 0;
            
            public static Block test;
            public static Block reset;
            
            @EventHandler
            public void preInit(FMLPreInitializationEvent event)
            {
            
            test = new Test(true).setBlockName("test");
            GameRegistry.registerBlock(test, "placer");
            reset = new Test(false).setBlockName("reset");
            GameRegistry.registerBlock(reset, "reset");
            }
            
            @EventHandler
            public void init(FMLInitializationEvent event)
            {
            proxy.registerRender();
            MinecraftForge.EVENT_BUS.register(new StatEventHandler());
            pipe.initialise();
            }
            
            @EventHandler
            public void postInit(FMLPostInitializationEvent event)
            {
            pipe.postInitialise();
            }
            
            }
            

            Classe de l’Extended Properties :

            package mc_plus.common;
            
            import mc_plus.network.PacketStat;
            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 ExtendedPlayer implements IExtendedEntityProperties {
            
            public final static String EXT_PROP_NAME = "ExtendedPlayer";
            private EntityPlayer player;
            private int stat;
            
            public ExtendedPlayer(EntityPlayer player)
            {
            this.player = player;
            this.stat = 0;
            }
            
            public static final void register(EntityPlayer player)
            {
            player.registerExtendedProperties(ExtendedPlayer.EXT_PROP_NAME, new ExtendedPlayer(player));
            }
            
            public static final ExtendedPlayer get(EntityPlayer player)
            {
            return (ExtendedPlayer) player.getExtendedProperties(EXT_PROP_NAME);
            }
            
            @Override
            public void saveNBTData(NBTTagCompound compound)
            {
            // We need to create a new tag compound that will save everything for our Extended Properties
            NBTTagCompound properties = new NBTTagCompound();
            
            properties.setInteger("stat", this.stat);
            
            /*
            Now add our custom tag to the player's tag with a unique name (our property's name). This will allow you to save multiple types of properties and distinguish between them. If you only have one type, it isn't as important, but it will still avoid conflicts between your tag names and vanilla tag names. For instance, if you add some "Items" tag, that will conflict with vanilla. Not good. So just use a unique tag name.
            */
            compound.setTag(EXT_PROP_NAME, properties);
            }
            
            // Load whatever data you saved
            @Override
            public void loadNBTData(NBTTagCompound compound)
            {
            // Here we fetch the unique tag compound we set for this class of Extended Properties
            NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
            // Get our data from the custom tag compound
            
            this.stat = properties.getInteger("stat");
            // Just so you know it's working, add this line:
            System.out.println("[TUT PROPS] Stat from NBT: " + this.stat);
            }
            
            @Override
            public void init(Entity entity, World world) {
            // TODO Auto-generated method stub
            
            }
            
            public void sync()
            {
            {
            PacketStat paquetPlayer = new PacketStat (this.stat);
            Mc_Plus.pipe.sendToServer(paquetPlayer);
            
            if (!player.worldObj.isRemote) {
            EntityPlayerMP player1 = (EntityPlayerMP) player;
            Mc_Plus.pipe.sendTo(paquetPlayer, player1);
            }
            
            }
            
            }
            
            public static String getSaveKey(EntityPlayer player)
            {
            return player.getDisplayName() + ":" + EXT_PROP_NAME;
            }
            
            public static void saveProxyData(EntityPlayer player) {
            
            ExtendedPlayer playerData = ExtendedPlayer.get(player);
            NBTTagCompound savedData = new NBTTagCompound();
            
            playerData.saveNBTData(savedData);
            CommonProxy.storeEntityData(getSaveKey(player), savedData);
            }
            
            public static void loadProxyData(EntityPlayer player) {
            
            ExtendedPlayer playerData = ExtendedPlayer.get(player);
            NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));
            
            if (savedData != null) {
            playerData.loadNBTData(savedData);
            }
            playerData.sync();
            }
            public int getStat()
            {
            return this.stat;
            
            }
            public void setStat(int i)
            {
            this.stat = i;
            this.sync();
            }
            public void incrStat()
            {
            this.stat++;
            this.sync();
            }
            public void decrStat()
            {
            if (this.stat > 0)
            this.stat–;
            this.sync();
            }
            }
            

            Classe des events :

            package mc_plus.common;
            
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.init.Items;
            import net.minecraft.item.ItemStack;
            import net.minecraft.nbt.NBTTagCompound;
            import net.minecraft.util.ChatComponentTranslation;
            import net.minecraftforge.event.entity.EntityEvent.EntityConstructing;
            import net.minecraftforge.event.entity.EntityJoinWorldEvent;
            import net.minecraftforge.event.entity.living.LivingDeathEvent;
            import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent;
            import cpw.mods.fml.common.eventhandler.SubscribeEvent;
            
            public class StatEventHandler {
            
            @SubscribeEvent
            public void onEntityConstructing(EntityConstructing event) {
            
            if (event.entity instanceof EntityPlayer && ExtendedPlayer.get((EntityPlayer) event.entity) == null)
            ExtendedPlayer.register((EntityPlayer) event.entity);
            }
            
            @SubscribeEvent
            public void onLivingDeathEvent(LivingDeathEvent event) {
            if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) {
            NBTTagCompound playerData = new NBTTagCompound();
            ((ExtendedPlayer) (event.entity.getExtendedProperties(ExtendedPlayer.EXT_PROP_NAME))).saveNBTData(playerData);
            CommonProxy.storeEntityData(((EntityPlayer) event.entity).getDisplayName(), playerData);
            ExtendedPlayer.saveProxyData((EntityPlayer) event.entity);
            } else {
            
            }
            }
            
            @SubscribeEvent
            public void onEntityJoinWorld(EntityJoinWorldEvent event) {
            if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) {
            NBTTagCompound playerData = CommonProxy.getEntityData(((EntityPlayer) event.entity).getDisplayName());
            if (playerData != null) {
            ((ExtendedPlayer) (event.entity.getExtendedProperties(ExtendedPlayer.EXT_PROP_NAME))).loadNBTData(playerData);
            }
            
            ((ExtendedPlayer) (event.entity.getExtendedProperties(ExtendedPlayer.EXT_PROP_NAME))).sync();
            }
            }
            
            @SubscribeEvent
            public void onUpdate(LivingUpdateEvent event)
            {
            
            if(event.entity instanceof EntityPlayer)
            {
            EntityPlayer player = (EntityPlayer) event.entity;
            ItemStack heldItem = player.getHeldItem();
            ExtendedPlayer props = ExtendedPlayer.get(player);
            // if(!player.worldObj.isRemote)
            int stat = props.getStat();
            
            if(heldItem != null && heldItem.getItem() == Items.gold_ingot)
            {
            if(!player.worldObj.isRemote)
            {
            player.addChatMessage(new ChatComponentTranslation("[SERVER] : Stat : " + stat));
            }
            else
            {
            player.addChatMessage(new ChatComponentTranslation("[CLIENT] : Stat : " + stat));
            
            }
            }
            if(heldItem != null && heldItem.getItem() == Items.diamond)
            {
            props.incrStat();
            }
            
            if(stat > 10)
            {
            player.capabilities.allowFlying = true;
            if(heldItem != null && heldItem.getItem() == Items.iron_ingot)
            {
            player.addChatMessage(new ChatComponentTranslation("Je peux voler !"));
            }
            
            }
            else
            {
            player.capabilities.allowFlying = false;
            if(heldItem != null && heldItem.getItem() == Items.iron_ingot)
            {
            player.addChatMessage(new ChatComponentTranslation("Je peux pas voler !"));
            
            }
            }
            
            }
            }
            }
            

            Je pense que c’est un problème de paquets, je vous mets donc les classes concernant les paquets :
            J’ai pris ces classes sur le wiki de forge :http://www.minecraftforge.net/wiki/Netty_Packet_Handling
            Classe de AbstractPacket :

            package mc_plus.network;
            
            import io.netty.buffer.ByteBuf;
            import io.netty.channel.ChannelHandlerContext;
            import net.minecraft.entity.player.EntityPlayer;
            
            public abstract class AbstractPacket {
            public abstract void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer);
            
               /**
                * Decode the packet data from the ByteBuf stream. Complex data sets may need specific data handlers (See @link{cpw.mods.fml.common.network.ByteBuffUtils})
                *
                * @param ctx    channel context
                * @param buffer the buffer to decode from
                */
               public abstract void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer);
            
               /**
                * Handle a packet on the client side. Note this occurs after decoding has completed.
                *
                * @param player the player reference
                */
               public abstract void handleClientSide(EntityPlayer player);
            
               /**
                * Handle a packet on the server side. Note this occurs after decoding has completed.
                *
                * @param player the player reference
                */
               public abstract void handleServerSide(EntityPlayer player);
            }
            

            Classe de PacketPipeline :

            package mc_plus.network;
            
            import io.netty.buffer.ByteBuf;
            import io.netty.buffer.Unpooled;
            import io.netty.channel.ChannelHandler;
            import io.netty.channel.ChannelHandlerContext;
            import io.netty.handler.codec.MessageToMessageCodec;
            
            import java.util.Collections;
            import java.util.Comparator;
            import java.util.EnumMap;
            import java.util.LinkedList;
            import java.util.List;
            
            import net.minecraft.client.Minecraft;
            import net.minecraft.entity.player.EntityPlayer;
            import net.minecraft.entity.player.EntityPlayerMP;
            import net.minecraft.network.INetHandler;
            import net.minecraft.network.NetHandlerPlayServer;
            import cpw.mods.fml.common.FMLCommonHandler;
            import cpw.mods.fml.common.network.FMLEmbeddedChannel;
            import cpw.mods.fml.common.network.FMLOutboundHandler;
            import cpw.mods.fml.common.network.NetworkRegistry;
            import cpw.mods.fml.common.network.internal.FMLProxyPacket;
            import cpw.mods.fml.relauncher.Side;
            import cpw.mods.fml.relauncher.SideOnly;
            
            /**
            * Packet pipeline class. Directs all registered packet data to be handled by the packets themselves.
            * @author sirgingalot
            * some code from: cpw
            */
            @ChannelHandler.Sharable
            public class PacketPipeline extends MessageToMessageCodec <fmlproxypacket, abstractpacket="">{
            
               private EnumMap <side, fmlembeddedchannel="">channels;
               private LinkedList<class<? extends="" abstractpacket="">> packets           = new LinkedList<class<? extends="" abstractpacket="">>();
               private boolean                                     isPostInitialised = false;
            
               /**
                * Register your packet with the pipeline. Discriminators are automatically set.
                *
                * @param clazz the class to register
                *
                * @return whether registration was successful. Failure may occur if 256 packets have been registered or if the registry already contains this packet
                */
               public boolean registerPacket(Class clazz) {
                   if (this.packets.size() > 256) {
                       // You should log here!!
                       return false;
                   }
            
                   if (this.packets.contains(clazz)) {
                       // You should log here!!
                       return false;
                   }
            
                   if (this.isPostInitialised) {
                       // You should log here!!
                       return false;
                   }
            
                   this.packets.add(clazz);
                   return true;
               }
            
               // In line encoding of the packet, including discriminator setting
               @Override
               protected void encode(ChannelHandlerContext ctx, AbstractPacket msg, List <object>out) throws Exception {
                   ByteBuf buffer = Unpooled.buffer();
                   Class clazz = msg.getClass();
                   if (!this.packets.contains(msg.getClass())) {
                       throw new NullPointerException("No Packet Registered for: " + msg.getClass().getCanonicalName());
                   }
            
                   byte discriminator = (byte) this.packets.indexOf(clazz);
                   buffer.writeByte(discriminator);
                   msg.encodeInto(ctx, buffer);
                   FMLProxyPacket proxyPacket = new FMLProxyPacket(buffer.copy(), ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get());
                   out.add(proxyPacket);
               }
            
               // In line decoding and handling of the packet
               @Override
               protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List <object>out) throws Exception {
                   ByteBuf payload = msg.payload();
                   byte discriminator = payload.readByte();
                   Class clazz = this.packets.get(discriminator);
                   if (clazz == null) {
                       throw new NullPointerException("No packet registered for discriminator: " + discriminator);
                   }
            
                   AbstractPacket pkt = clazz.newInstance();
                   pkt.decodeInto(ctx, payload.slice());
            
                   EntityPlayer player;
                   switch (FMLCommonHandler.instance().getEffectiveSide()) {
                       case CLIENT:
                           player = this.getClientPlayer();
                           pkt.handleClientSide(player);
                           break;
            
                       case SERVER:
                           INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
                           player = ((NetHandlerPlayServer) netHandler).playerEntity;
                           pkt.handleServerSide(player);
                           break;
            
                       default:
                   }
            
                   out.add(pkt);
               }
            
               // Method to call from FMLInitializationEvent
               public void initialise() {
                   this.channels = NetworkRegistry.INSTANCE.newChannel("TUT", this);
               }
            
               // Method to call from FMLPostInitializationEvent
               // Ensures that packet discriminators are common between server and client by using logical sorting
               public void postInitialise() {
                   if (this.isPostInitialised) {
                       return;
                   }
            
                   this.isPostInitialised = true;
                   Collections.sort(this.packets, new Comparator<class<? extends="" abstractpacket="">>() {
            
                       @Override
                       public int compare(Class clazz1, Class clazz2) {
                           int com = String.CASE_INSENSITIVE_ORDER.compare(clazz1.getCanonicalName(), clazz2.getCanonicalName());
                           if (com == 0) {
                               com = clazz1.getCanonicalName().compareTo(clazz2.getCanonicalName());
                           }
            
                           return com;
                       }
                   });
               }
            
               @SideOnly(Side.CLIENT)
               private EntityPlayer getClientPlayer() {
                   return Minecraft.getMinecraft().thePlayer;
               }
            
               /**
                * Send this message to everyone.
                *
            
                * Adapted from CPW's code in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper
                *
                * @param message The message to send
                */
               public void sendToAll(AbstractPacket message) {
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALL);
                   this.channels.get(Side.SERVER).writeAndFlush(message);
               }
            
               /**
                * Send this message to the specified player.
                *
            
                * Adapted from CPW's code in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper
                *
                * @param message The message to send
                * @param player  The player to send it to
                */
               public void sendTo(AbstractPacket message, EntityPlayerMP player) {
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.PLAYER);
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(player);
                   this.channels.get(Side.SERVER).writeAndFlush(message);
               }
            
               /**
                * Send this message to everyone within a certain range of a point.
                *
            
                * Adapted from CPW's code in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper
                *
                * @param message The message to send
                * @param point   The {@link cpw.mods.fml.common.network.NetworkRegistry.TargetPoint} around which to send
                */
               public void sendToAllAround(AbstractPacket message, NetworkRegistry.TargetPoint point) {
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT);
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(point);
                   this.channels.get(Side.SERVER).writeAndFlush(message);
               }
            
               /**
                * Send this message to everyone within the supplied dimension.
                *
            
                * Adapted from CPW's code in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper
                *
                * @param message     The message to send
                * @param dimensionId The dimension id to target
                */
               public void sendToDimension(AbstractPacket message, int dimensionId) {
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.DIMENSION);
                   this.channels.get(Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set(dimensionId);
                   this.channels.get(Side.SERVER).writeAndFlush(message);
               }
            
               /**
                * Send this message to the server.
                *
            
                * Adapted from CPW's code in cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper
                *
                * @param message The message to send
                */
               public void sendToServer(AbstractPacket message) {
                   this.channels.get(Side.CLIENT).attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.TOSERVER);
                   this.channels.get(Side.CLIENT).writeAndFlush(message);
               }
            }
            

            Classe de PacketStat :

            package mc_plus.network;
            
            import io.netty.buffer.ByteBuf;
            import io.netty.channel.ChannelHandlerContext;
            import mc_plus.common.ExtendedPlayer;
            import net.minecraft.entity.player.EntityPlayer;
            
            public class PacketStat extends AbstractPacket {
            
            private int stat;
            
            public PacketStat(){}
            
            public PacketStat(int stat)
            {
            this.stat = stat;
            }
            
            @Override
            public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
            buffer.writeInt(stat);
            
            }
            
            @Override
            public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
            this.stat = buffer.readInt();
            
            }
            
            @Override
            public void handleClientSide(EntityPlayer player) {
            ExtendedPlayer props = ExtendedPlayer.get(player);
            props.setStat(this.stat);
            }
            
            @Override
            public void handleServerSide(EntityPlayer player) {
            ExtendedPlayer props = ExtendedPlayer.get(player);
            props.setStat(this.stat);
            
            }
            
            }
            

            :::

            Voilà, j’espère que vous pourrez me dire où est mon erreur, sachant que le jeu se lance ! 🙂
            En tout cas, merci d’avoir pris le temps de lire ! :)</class<?></object></object></class<?></class<?></side,></fmlproxypacket,>

            1 réponse Dernière réponse Répondre Citer 0
            • RedRelayR Hors-ligne
              RedRelay Moddeurs confirmés
              dernière édition par

              A quoi sert la fonction init(Entity entity, World world) ??

              –------------------------------------------------------------------------------------
              Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                Comment passer par le système pour envoyer un packet via le FFMT api?

                Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

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

                  Bonjour,
                  J’ai un problème : Quand je rejoint le monde, je me fais éjecter avec un beau message, je cite : “A fatal error has occured, this connection is terminated” (Littéralement : “Une erreur fatale est survenue, cette connection est terminée”). Je regarde la console d’eclipse, qui m’indique que j’ai un NPE dans la fonction loadNBTData, sur mes "getShort(“gnagnagna”). POur voir si c’est bien l’origine du problème, je les retire, mais là ( la même chose, sauf que mes classes ne figurent plus dans le log) :

                  
                  io.netty.handler.codec.DecoderException: java.lang.NullPointerException
                  
                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
                  at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
                  at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
                  at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
                  at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
                  at net.minecraft.client.Minecraft.runTick(Minecraft.java:2141) [Minecraft.class:?]
                  at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1028) [Minecraft.class:?]
                  at net.minecraft.client.Minecraft.run(Minecraft.java:951) [Minecraft.class:?]
                  at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_11]
                  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_11]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_11]
                  at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_11]
                  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(GradleStartCommon.java:78) [start/:?]
                  at GradleStart.main(GradleStart.java:45) [start/:?]
                  Caused by: java.lang.NullPointerException
                  at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:676) ~[AbstractByteBuf.class:?]
                  at fr.MrBlockTNT.Dragons.network.PacketData$01.fromBytes(PacketData$01.java:34) ~[PacketData$01.class:?]
                  at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:17) ~[SimpleIndexedCodec.class:?]
                  at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
                  at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:77) ~[FMLIndexedMessageToMessageCodec.class:?]
                  at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
                  at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
                  … 19 more
                  [18:17:38] [Client thread/ERROR] [FML]: There was a critical exception handling a packet on channel dragons:CHANNEL_1
                  io.netty.handler.codec.DecoderException: java.lang.NullPointerException
                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:99) ~[MessageToMessageDecoder.class:?]
                  at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?]
                  at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?]
                  at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
                  at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
                  at net.minecraft.client.Minecraft.runTick(Minecraft.java:2141) [Minecraft.class:?]
                  at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1028) [Minecraft.class:?]
                  at net.minecraft.client.Minecraft.run(Minecraft.java:951) [Minecraft.class:?]
                  at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
                  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_11]
                  at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_11]
                  at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_11]
                  at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_11]
                  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(GradleStartCommon.java:78) [start/:?]
                  at GradleStart.main(GradleStart.java:45) [start/:?]
                  Caused by: java.lang.NullPointerException
                  at io.netty.buffer.AbstractByteBuf.readBytes(AbstractByteBuf.java:676) ~[AbstractByteBuf.class:?]
                  at fr.MrBlockTNT.Dragons.network.PacketData$01.fromBytes(PacketData$01.java:34) ~[PacketData$01.class:?]
                  at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:17) ~[SimpleIndexedCodec.class:?]
                  at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.decodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
                  at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:77) ~[FMLIndexedMessageToMessageCodec.class:?]
                  at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.decode(FMLIndexedMessageToMessageCodec.java:17) ~[FMLIndexedMessageToMessageCodec.class:?]
                  at io.netty.handler.codec.MessageToMessageCodec$2.decode(MessageToMessageCodec.java:81) ~[MessageToMessageCodec$2.class:?]
                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
                  … 19 more
                  [18:17:38] [Server thread/INFO]: Player730 lost connection: TextComponent{text='Disconnected', siblings=[], style=Style{hasParent=false, color=null, bold=null, italic=null, underlined=null, obfuscated=null, clickEvent=null, hoverEvent=null}}
                  [18:17:38] [Server thread/INFO]: Player730 left the game
                  [18:17:38] [Server thread/INFO]: Stopping singleplayer server as player logged out
                  
                  

                  Pouvez-vous m’éclairer sur l’origine possible de cette erreur ? (A mon avis c’est tout bête mais ça fait un petit peu que je cherche)
                  Je précise aussi que je suis en 1.7.10 mais ça ne doit rien changer de ce côté (enfin je pense).

                  Code intéressant de PlayerData.java :

                  
                  @Override
                  
                  public void loadNBTData(NBTTagCompound nbt) 
                  {
                  NBTTagCompound properties = (NBTTagCompound) nbt.getTag(DATA_NAME);
                  
                  this.mana = properties.getShort("Mana");
                  this.playerMaxMana = properties.getShort("MaxMana");
                  this.spell_levels = properties.getByteArray("Spell_Levels");
                  }
                  

                  Mes mods:

                  • New Ores
                  • More Dragons
                  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

                    NBTTagCompound properties = (NBTTagCompound) nbt.getTag(DATA_NAME);
                    System.out.println(properties == null)
                    Si il t’indique true dans la console c’est que nbt.getTag(DATA_NAME) est null, et donc que tu as un problème au niveau des tags nbt.

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

                      Retourne false, mais j’ai trouvé d’ou vient le bug :
                      Je voulais envoyer (packet) un tableau de byte, mais je ne trouvais pas (sur internet) comment récupérer alors j’ai tenté des choses hasardeuses :

                      
                      @Override
                      
                          public void fromBytes(ByteBuf buf) 
                          {
                              mana = buf.readShort();
                              playerMaxMana = buf.readShort();
                              buf.readBytes(levels); // ICI
                          }
                      

                      Donc si quelqu’un sait comment faire…

                      Mes mods:

                      • New Ores
                      • More Dragons
                      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

                        Pour envoyer un tableau il faut passer par des boucles for.
                        Dans un premier temps tu envoie la taille du tableau :

                        buf.writeInt(tonTableau.length);
                        

                        puis tu écris toutes les valeurs :

                        for(int i = 0; i > tonTableau.length;i++)
                        {
                              buf.writeByte(tonTableau*);
                        }
                        

                        Et pour le lire de l’autre côté tu l’initialises et tu fais une boucle for en fonction de sa taille :

                        int size = buf.readInt();
                        tonTableau = new Byte;
                        for(int i = 0; i > size;i++)
                        
                        {
                              tonTableau* = buf.readByte();
                        }
                        
                        1 réponse Dernière réponse Répondre Citer 0
                        • RedRelayR Hors-ligne
                          RedRelay Moddeurs confirmés
                          dernière édition par

                          Pourquoi ne pas passer par un NBTTagList ?
                          Si c’est un tableau d’entier, il y a aussi une méthode pour écrire directement un tableau d’entier.

                          –------------------------------------------------------------------------------------
                          Si tu trouves mon intervention pertinente, n'hésite pas a m…

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

                            Merci maintenant ça marche, mais ça fait laguer mon ordi O_O et en plus, à chaque fois que j’utilise mon item, la console me sort :

                            
                            [10:26:01] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 100 packets have leaked. Top offenders
                            
                            [10:26:01] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 100
                            [10:26:05] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 200 packets have leaked. Top offenders
                            [10:26:05] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 200
                            [10:26:08] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 300 packets have leaked. Top offenders
                            [10:26:08] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 300
                            [10:26:11] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 400 packets have leaked. Top offenders
                            [10:26:11] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 400
                            [10:26:13] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 500 packets have leaked. Top offenders
                            [10:26:13] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 500
                            [10:26:16] [Client thread/ERROR] [FML]: Detected ongoing potential memory leak. 600 packets have leaked. Top offenders
                            [10:26:16] [Client thread/ERROR] [FML]: dragons:CHANNEL_1 : 600
                            
                            

                            Mes mods:

                            • New Ores
                            • More Dragons
                            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

                              Oula, envoie tout ton code, visiblement tu as des paquets qui se perdent.

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

                                PlayerData.java (le code intéressant) :

                                
                                public final void sync() 
                                {
                                    PacketData$01 packet = new PacketData$01(this.mana, this.playerMaxMana, this.spell_levels, this.mana_regen_ticks);
                                   Dragons.network.sendToServer(packet);
                                
                                    if (!player.worldObj.isRemote) 
                                    {
                                        EntityPlayerMP player1 = (EntityPlayerMP) player;
                                        Dragons.network.sendTo(packet, player1);
                                    }
                                }
                                

                                PacketData$01.java :

                                
                                package fr.MrBlockTNT.Dragons.network;
                                
                                import fr.MrBlockTNT.Dragons.event.PlayerData;
                                import io.netty.buffer.ByteBuf;
                                import net.minecraft.client.Minecraft;
                                import net.minecraft.client.network.NetHandlerPlayClient;
                                import net.minecraft.entity.player.EntityPlayer;
                                import net.minecraft.network.NetHandlerPlayServer;
                                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 PacketData$01 implements IMessage
                                {
                                private short mana, playerMaxMana;
                                private int regen_ticks;
                                private byte[] levels;
                                
                                    public PacketData$01() { }
                                
                                    public PacketData$01(short mana, short playerMaxMana, byte[] levels, int r_ticks) 
                                    {
                                        this.mana = mana;
                                        this.playerMaxMana = playerMaxMana;
                                        this.levels = levels;
                                        this.regen_ticks = r_ticks;
                                    }
                                
                                    @Override
                                    public void fromBytes(ByteBuf buf) 
                                    {
                                        mana = buf.readShort();
                                        playerMaxMana = buf.readShort();
                                        byte size = buf.readByte();
                                        levels = new byte;
                                        for(int i = 0; i < size; i++)
                                        levels* = buf.readByte();
                                        regen_ticks = buf.readInt();
                                    }
                                
                                    @Override
                                    public void toBytes(ByteBuf buf) 
                                    {
                                    buf.writeShort(mana);
                                    buf.writeShort(playerMaxMana);
                                    buf.writeByte(levels.length);
                                    for(int i = 0; i < levels.length; i++)
                                    buf.writeByte(levels*);
                                    buf.writeInt(regen_ticks);
                                    }
                                
                                    public static class Handler implements IMessageHandler <packetdata$01, imessage="">{
                                
                                        @Override
                                        public IMessage onMessage(PacketData$01 message, MessageContext ctx) 
                                        {
                                        if(ctx.netHandler instanceof NetHandlerPlayServer)
                                        {
                                        PlayerData dat = PlayerData.get(getClientPlayer());
                                        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;
                                        }
                                
                                        @SideOnly(Side.CLIENT)
                                        public EntityPlayer getClientPlayer()
                                        {
                                        return Minecraft.getMinecraft().thePlayer;
                                        }
                                    }
                                }
                                ```</packetdata$01,>

                                Mes mods:

                                • New Ores
                                • More Dragons
                                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

                                  if(ctx.netHandler instanceof NetHandlerPlayServer)
                                  {
                                  PlayerData dat = PlayerData.get(getClientPlayer());

                                  ??!!??

                                  Et autre problème, le nom de la classe. Mettre un $ dans le nom est une très mauvaise idée.

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

                                    En fait, je ne voyais pas trop comment récupérer le joueur pour le côté serveur 😞 mais je viens de me rendre compte que c’est complètement c** stupide puisque le serveur ne pourra pas le récupérer (SideOnly). Une idée ? (J’avais aussi pensé à envoyer l’entity player mais il semblerait que je ne puisse pas (et puis ça serai trop lourd…)).

                                    Sinon pour le nom je voulais un séparateur entre le nom du packet et son index x)

                                    Mes mods:

                                    • New Ores
                                    • More Dragons
                                    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

                                      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.class

                                      Donc 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.

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

                                        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;
                                        }
                                        
                                        

                                        Mes mods:

                                        • New Ores
                                        • More Dragons
                                        1 réponse Dernière réponse Répondre Citer 0
                                        • bin4r1sB Hors-ligne
                                          bin4r1s
                                          dernière édition par

                                          Up, help svp  😞

                                          Mes mods:

                                          • New Ores
                                          • More Dragons
                                          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

                                            Ta fonction dat.update fait quoi ?

                                            1 réponse Dernière réponse Répondre Citer 0
                                            • 1
                                            • 2
                                            • 3
                                            • 4
                                            • 5
                                            • 6
                                            • 7
                                            • 5 / 7
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB