MFF

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

    Packeta

    Planifier Épinglé Verrouillé Déplacé Mods en developpement
    1.11.x
    5 Messages 3 Publieurs 1.3k Vues 1 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.
    • LeBossMax2L Hors-ligne
      LeBossMax2
      dernière édition par LeBossMax2

      Une nouvelle version pour Minecraft 1.15 est disponible ici !

      Introduction

      Je sais que beaucoup de personnes n’aiment pas utiliser les packets parce qu’ils les trouvent trop compliqués à coder. C’est pour cela que j’ai créé Packeta. Packeta c’est à la fois un outil de développement (plus exactement un annotation processor) qui va créer du code à votre place et une library pour pouvoir utiliser le code généré. Son but est de simplifier le plus possible la création de packets tout en minimisant les données transférées.

      Principe

      Le principe est simple :

      • Vous créez une classe qui contient les données que vous voulez transférer
      • Vous implémentez une ou les deux interfaces, IClientPacket pour un packet envoyé vers le client ou IServerPacket pour un packet envoyé au serveur
      • Vous ajoutez l’annotation magique @GeneratePacket
      • Packeta crée automatiquement pour vous la classe du packet contenant le constructeur et les méthodes d’envoi de données (fromBytes et toByte)

      Bien entendu, il faut enregistrer ce packet sur un network. Pour cela encore plus simple :

      • Vous ajoutez l’annotation @GenerateNetwork sur votre classe principale
      • Packeta génère la classe de votre network qui enregistre tout seul les packets

      Exemple

      Voici un exemple qui montre quelques possibilités déjà implémentés dans Packeta :

      Code de la class de données :

      package fr.max2.packeta.test.network;
      //imports
      @GeneratePacket
      public class ExampleData implements IServerPacket
      {
      	public int someNumber;
      	public ItemStack aStack;
      	public String[] aStringArray;
      	public ArrayList<UUID> collectionOfIds;
      
      	@Override
      	public void onServerReceive(EntityPlayerMP sender)
      	{
      		sender.sendMessage(new TextComponentString("The number is " + this.someNumber));
      	}
      }
      

      Code de la classe générée :

      package fr.max2.packeta.test.network;
      //imports
      public class ExampleDataMessage extends ExampleData implements IServerMessage
      {
      	
      	public ExampleDataMessage()
      	{ }
      	
      	public ExampleDataMessage(ItemStack aStack, String[] aStringArray, ArrayList<UUID> collectionOfIds, int someNumber)
      	{
      		this.aStack = aStack;
      		this.aStringArray = aStringArray;
      		this.collectionOfIds = collectionOfIds;
      		this.someNumber = someNumber;
      	}
      
      	@Override
      	public void toBytes(ByteBuf buf)
      	{
      		ByteBufUtils.writeItemStack(buf, this.aStack);
      		buf.writeInt(this.aStringArray.length);
      		for (String aStringArrayElement : this.aStringArray)
      		{
      			ByteBufUtils.writeUTF8String(buf, aStringArrayElement);
      		}
      		buf.writeInt(this.collectionOfIds.size());
      		for (UUID collectionOfIdsElement : this.collectionOfIds)
      		{
      			buf.writeLong(collectionOfIdsElement.getMostSignificantBits());
      			buf.writeLong(collectionOfIdsElement.getLeastSignificantBits());
      		}
      		buf.writeInt(this.someNumber);
      	}
      	
      	@Override
      	public void fromBytes(ByteBuf buf)
      	{
      		this.aStack = ByteBufUtils.readItemStack(buf);
      		int aStringArrayLength = buf.readInt();
      		this.aStringArray = new String[aStringArrayLength];
      		for (int aStringArrayIndex = 0; aStringArrayIndex < aStringArrayLength; aStringArrayIndex++)
      		{
      			this.aStringArray[aStringArrayIndex] = ByteBufUtils.readUTF8String(buf);
      		}
      		int collectionOfIdsLength = buf.readInt();
      		this.collectionOfIds.clear();
      		for (int collectionOfIdsIndex = 0; collectionOfIdsIndex < collectionOfIdsLength; collectionOfIdsIndex++)
      		{
      			this.collectionOfIds.add(new UUID(buf.readLong(), buf.readLong()));
      		}
      		this.someNumber = buf.readInt();
      	}
      	
      }
      

      Utilisation

      Actuellement, le seul moyen d’utiliser Packeta, est de le compiler soit même à partir des sources disponibles sur mon github.
      Pour l’ajouter à un projet, il faudra :

      • placer le fichier Packeta-x.y.z-dev.jar dans votre dossier libs/
      • paramétrer gradle pour utiliser Packeta : le plus simple pour cela est d’utiliser le plugin net.ltgt.apt :
      plugins {
          id 'net.ltgt.apt' version '0.19'
      }
      
      • vous pouvez aussi ajouter le plugin net.ltgt.apt-eclipse ou net.ltgt.apt-idea pour aussi configurer votre IDE automatiquement. (N’oubliez pas de relancer les commandes de gradle)

      Possibilités d’amélioration futures :

      • ajouter la possibilité de faire passer un joueur ou une entité (en passant par son id / UUID)
      • ajouter la possibilité d’utiliser les annotations (@Nullable ou @NonNull par exemple) pour changer la manière dont les données sont enregistrées
      • supporter plus de versions (1.8.x à 1.12.x)
      • ajouter un système similaire pour l’enregistrement de données dans les NBT tags
      • ajouter la possibilité de synchroniser automatiquement des capabilities
      1 réponse Dernière réponse Répondre Citer 1
      • AmaA Hors-ligne
        Ama
        dernière édition par

        Très bonne idée ! A faire évoluer !
        Après “Packeta” ça m’fais marrer, on dirait un mexicain qui te propose des chips.

        Si je t'ai filé un coup de main n'oublie pas le + / -
        Par contre évite les demandes d'aides en MP, tu sera sympa'

        La JavaDoc c'est comme le PQ, ça sert à ce démerder tous seul. -Victor Hugo- 2017

        Une superbe API pour animer vos super modèles CraftStudio dans Minecraft !

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

          Merci, si tu as une meilleure idée pour le nom, n’hésite pas à proposer

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

            Ce message a été supprimé !
            LeBossMax2L 1 réponse Dernière réponse Répondre Citer 0
            • LeBossMax2L Hors-ligne
              LeBossMax2 @Romain_MC
              dernière édition par

              Pour l’instant, je vais rester avec Packeta, je m’y suis habitué.

              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